第2章通用的高并发架构设计——2.1 高并发架构设计的要点

高并发意味着系统要应对海量请求。从笔者多年的面试经验来看,很多面试者在面对“什么是高并发架构”的问题时,往往会粗略地认为一个系统的设计是否满足高并发架构,就是看这个系统是否可以应对海量请求。再细问具体的细节时,回答往往显得模棱两可,比如每秒多少个请求才是高并发请求、系统的性能表现如何、系统的可用性表现如何,等等。为了可以清晰地评判一个系统的设计是否满足高并发架构,在正式给出通用的高并发架构设计方案前,我们先要厘清以下三点:

  1. 形成高并发系统的必要条件
  2. 高并发系统的衡量指标
  3. 高并发场景分类

2.1.1 形成高并发系统的必要条件

形成高并发系统主要有三大必要条件。

  1. 高性能:性能代表一个系统的并行处理能力,在同样的硬件设备条件下,性能越高,越能节约硬件资源;同时性能关乎用户体验,如果系统响应时间过长,用户就会产生抱怨。
  2. 高可用性:系统可以长期稳定、正常地对外提供服务,而不是经常出故障、宕机、崩溃。
  3. 可扩展性:系统可以通过水平扩容的方式,从容应对请求量的日渐递增乃至突发的请求量激增。

我们可以将形成高并发系统的必要条件类比为一个篮球运动员的各项属性:

  • 高性能:相当于这个球员在赛场上的表现力强
  • 高可用性:相当于这个球员在赛场上总可以稳定发挥
  • 可扩展性:相当于这个球员的未来成长性好

2.1.2 高并发系统的衡量指标

(1)高性能指标

一个很容易想到的可以体现系统性能的指标是,在一段时间内系统的平均响应时间。例如,在一段时间内有10000个请求被成功响应,那么在这段时间内系统的平均响应时间是这10000个请求响应时间的平均值。

然而,平均值有明显的硬伤并在很多数据统计场景中为大家所调侃。假设你和传奇篮球巨星姚明被分到同一组,你的身高是174cm,姚明的身高是226cm,那么这组的平均身高是2m!这看起来非常不合理。假设在10000个请求中有9900个请求的响应时间分别是1ms,另外100个请求的响应时间分别是100ms,那么平均响应时间仅为1.99ms,完全掩盖了那100个请求的100ms响应时间的问题。平均值的主要缺点是易受极端值的影响,这里的极端值是指偏大值或偏小值——当出现偏大值时,平均值将会增大;当出现偏小值时,平均值将会减小。

笔者推荐的系统性能的衡量指标是响应时间PCTn统计方式,PCTn表示请求响应时间按从小到大排序后第n分位的响应时间。假设在一段时间内100个请求的响应时间从小到大排序如图2-1所示,则第99分位的响应时间是100ms,即PCT99 = 100ms。

image-20250217202646775

分位值越大,对响应时间长的请求越敏感。比如统计10000个请求的响应时间:

  • PCT50=1ms,表示在10000个请求中50%的请求响应时间都在1ms以内。
  • PCT99=800ms,表示在10000个请求中99%的请求响应时间都在800ms以内。
  • PCT999=1.2s,表示在10000个请求中99.9%的请求响应时间都在1.2s以内。

从笔者总结的经验数据来看,请求的平均响应时间=200ms,且PCT99=1s的高并发系统基本能够满足高性能要求。如果请求的响应时间在200ms以内,那么用户不会感受到延迟;而如果请求的响应时间超过1s,那么用户会明显感受到延迟。

(2)高可用性指标

可用性 = 系统正常运行时间 / 系统总运行时间,表示一个系统正常运行的时间占比,也可以将其理解为一个系统对外可用的概率。我们一般使用N个9来描述系统的可用性如何,如表2-1所示。

image-20250217203406161

高可用性要求系统至少保证3个9或4个9的可用性。在实际的系统指标监控中,**很多公司会取3个9和4个9的中位数:99.95%**(3个9、1个5),作为系统可用性监控的阈值。当监控到系统可用性低于99.95%时及时发出告警信息,以便系统维护者可以及时做出优化,如系统可用性补救、扩容、分析故障原因、系统改造等。

(3)可扩展性指标

面对到来的突发流量,我们明显来不及对系统做架构改造,而更快捷、有效的做法是增加系统集群中的节点来水平扩展系统的服务能力可扩展性 = 吞吐量提升比例 / 集群节点增加比例。在最理想的情况下,集群节点增加几倍,系统吞吐量就能增加几倍。一般来说,拥有70%~80%可扩展性的系统基本能够满足可扩展性要求

2.1.3 高并发场景分类

我们使用计算机实现各种业务功能,最终将体现在对数据的两种操作上,即读和写,于是高并发请求可以被归为两类:

  • 高并发读
  • 高并发写

比如有的业务场景读多写少,需要重点解决高并发读的问题;有的业务场景写多读少,需要重点解决高并发写的问题;而有的业务场景读多写多,则需要同时解决高并发读和高并发写的问题。将高并发场景划分为高并发读场景高并发写场景,是因为在这两种场景中往往有不同的高并发解决方案(详见2.2~2.7节)。

总结

形成高并发系统的三大必要条件?

  1. 高性能:性能代表一个系统的并行处理能力,在同样的硬件设备条件下,性能越高,越能节约硬件资源;同时性能关乎用户体验,如果系统响应时间过长,用户就会产生抱怨。
  2. 高可用性:系统可以长期稳定、正常地对外提供服务,而不是经常出故障、宕机、崩溃。
  3. 可扩展性:系统可以通过水平扩容的方式,从容应对请求量的日渐递增乃至突发的请求量激增。

衡量系统的高性能指标是啥?

  • PCTn

什么是PCTn呢?

  • PCTn表示请求响应时间按从小到大排序后第n分位的响应时间。
  • 分位值越大,对响应时间长的请求越敏感。

高性能的经验之谈?

  • 请求的平均响应时间=200ms,且PCT99=1s的高并发系统基本能够满足高性能要求。

衡量系统的高可用性指标是啥?

  • 可用性=系统正常运行时间 / 系统总运行时间
  • 我们一般使用N个9来描述系统的可用性如何

高可用性的经验之谈?

  • 高可用性要求系统至少保证3个9或4个9的可用性。在实际的系统指标监控中,很多公司会取3个9和4个9的中位数:99.95%

衡量系统的可扩展性指标是啥?

  • 可扩展性 = 吞吐量提升比例 / 集群节点增加比例

可扩展性的经验之谈?

  • 一般来说,拥有70%~80%可扩展性的系统基本能够满足可扩展性要求。

高并发请求可以被归为哪两类?

  • 高并发读
  • 高并发写