目录
一、高并发
1.高并发相关指标
2.如何提高并发能力
二、高并发的目标
1.高性能
2.高可用
3.高扩展
一、高并发
高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。
1.高并发相关指标
-
QPS (Queries Per Second) / RPS (Requests Per Second): 每秒查询/请求数,表示服务器在一秒内能够处理的请求数量。这是衡量系统处理能力的一个重要指标,适用于所有类型的请求-响应系统。
-
TPS (Transactions Per Second): 每秒事务数,特指系统每秒能处理的事务数量,通常用于数据库操作或者业务逻辑中一系列操作的集合。
-
响应时间 (Response Time): 从客户端发出请求到接收到响应的总时间。它直接影响用户体验,响应时间越短,用户体验越好。
-
吞吐量 (Throughput): 单位时间内系统处理的请求数量或完成的任务数量(QPS和TPS都可视为吞吐量的一种特定形式)。吞吐量可以用来衡量系统的处理能力,但需要注意区分是瞬时吞吐量还是持续吞吐量。
-
并发用户数: 系统在同一时间内能够同时处理的用户数量,是评估系统并发处理能力的重要依据。高并发用户数意味着系统需要处理更多的并发请求。
-
错误率 (Error Rate): 在特定时间段内失败请求占总请求的比例。在高并发场景下,维持低错误率对于保证服务稳定性至关重要。
-
饱和度 (Saturation): 表示系统接近其最大处理能力的程度。当系统达到饱和状态时,再增加负载可能会导致响应时间显著增加或错误率上升。
-
带宽 (Bandwidth): 网络传输速率,单位时间内能够传输的数据量。在高并发场景下,足够的带宽是确保数据流畅传输的基础。
-
PV (Page View) - 页面浏览量: PV是指网站被访问的页面总数。每当用户浏览一次网页,无论是否是同一个人或同一个IP地址,都会记录为一次PV。因此,如果一个用户在网站上浏览了多个页面,这将增加多个PV。PV是评价网站活跃度的重要指标,反映了网站内容被浏览的次数。
-
UV (Unique Visitor) - 独立访客: UV是指在一定统计周期内访问网站的独立用户数。通常通过 cookies 或者设备标识符来识别唯一的访问者,即便同一用户使用不同的设备或浏览器访问,也会被计为多个UV。UV更能准确反映实际的用户数量,是衡量网站用户基础规模的指标。
-
IP (Internet Protocol) - IP访问: 基于IP地址统计的访问量,即来自不同IP地址的访问次数。IP作为统计标准在现代互联网分析中已较少直接应用。
2.如何提高并发能力
- 垂直扩展(Scale Up)
- 增强单机硬件性能(优先):例如:增加CPU核数如32核,升级更好的网卡如万兆,升级更好的硬盘如SSD,扩充硬盘容量如2T,扩充系统内存如128G。
- 提升单机架构性能:例如:使用Cache来减少IO次数,使用异步来增加单服务吞吐量,使用无锁数据结构来减少响应时间。
- 总结:管是提升单机硬件性能,还是提升单机架构性能,都有一个致命的不足:单机性能总是有极限的。所以互联网分布式架构设计高并发终极解决方案还是水平扩展。
- 水平扩展(Scale Out)
- 只要增加服务器数量,就能线性扩充系统性能。水平扩展对系统架构设计是有要求的,难点在于:如何在架构各层进行可水平扩展的设计。
二、高并发的目标
1.高性能
- 简单的说,高性能(High Performance)就是指程序处理速度快,所占内存少,cpu占用率低。
- 高并发和高性能是紧密相关的,提高应用的性能,是肯定可以提高系统的并发能力的。
- 应用性能优化的时候,对于计算密集型和IO密集型还是有很大差别,需要分开来考虑。
- 增加服务器资源(CPU、内存、服务器数量),绝大部分时候是可以提高应用的并发能力和性能 (前提是应用能够支持多任务并行计算,多服务器分布式计算才行),但也是要避免其中的一些问题,才可以更好的更有效率的利用服务器资源。
- 避免因为IO阻塞让CPU闲置,导致CPU的浪费。
- 避免多线程间增加锁来保证同步,导致并行系统串行化。
- 免创建、销毁、维护太多进程、线程,导致操作系统浪费资源在调度上。
- 避免分布式系统中多服务器的关联,比如:依赖同一个mysql,程序逻辑中使用分布式锁,导致瓶颈在mysql,分布式又变成串行化运算。
2.高可用
高可用性(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性(一直都能用)。
高可用性是指系统具有较高的无故障运行能力,可用性 = 平均故障时间 / 系统总运行时间,一般使用几个 9 来描述系统的可用性。
高可用注意事项
- 避免单点:使用单个服务器,一旦该服务器意外宕机,将导致服务不可用
- 使用“集群”,一台服务器挂了,还有其他后备服务器能够顶上
3.高扩展
表示系统的扩展能力,流量高峰时能否在短时间内完成扩容,更平稳地承接峰值流量,比如双11活动、明星离婚等热点事件。
面对突发流量,不可能临时改造架构,最快的方式就是增加机器来线性提高系统的处理能力。
对于业务集群或者基础组件来说,扩展性 = 性能提升比例 / 机器增加比例,理想的扩展能力是:资源增加几倍,性能提升几倍。通常来说,扩展能力要维持在 70%以上。
但是从高并发系统的整体架构角度来看,扩展的目标不仅仅是把服务设计成无状态就行了,因为当流量增加 10 倍,业务服务可以快速扩容 10 倍,但是数据库可能就成为了新的瓶颈。
像 MySQL 这种有状态的存储服务通常是扩展的技术难点,如果架构上没提前做好规划(垂直和水平拆分),就会涉及到大量数据的迁移。
我们需要站在整体架构的角度,而不仅仅是业务服务器的角度来考虑系统的扩展性 。所以说,数据库、缓存、依赖的第三方、负载均衡、交换机带宽等等都是系统扩展时需要考虑的因素。我们要知 道系统并发到了某一个量级之后,哪一个因素会成为我们的瓶颈点,从而针对性地进行扩展。