性能的度量指标

1、平均值

平均值是把这段时间所有请求的响应时间数据相加,再除以总请求数。但是它存在一定的问题,可能这段时间有10000个请求,只有100个响应时间为100ms,其他都是1s,这样算下来平均值不太大,但是系统是有问题的。

2、最大值

即找到一段时间请求的响应时间的最大值。但是又过于敏感,如果只有一个请求响应是100ms,那么最大值就是100。

3、分位值

分位值有很多种,比如 90 分位、95 分位、75 分位。以 90 分位为例,我们把这段时间请求的响应时间从小到大排序,假如一共有 100 个请求,那么排在第 90 位的响应时间就是 90 分位值。

image-20230424200201337

高并发下的性能优化

加入说现在的系统中只有一个处理核心,执行的响应时间都在10ms以内,我们该如何优化呢?

1. 提高系统的处理核心数

当提高了系统的处理核心数,那么我们就可以开更多的线程来同时处理请求。那么系统的吞吐量会变得大一点。但是并不意味着无限制的增加处理核心数可以一直的提高性能。随着并发进程数的增加,并行的任务对于系统资源的争抢也会愈发严重。在某一个临界点上继续增加并发进程数,反而会造成系统性能的下降。

image-20230424201739627

2、减少单次任务响应时间

想要减少任务的响应时间,首先要看你的系统是 CPU 密集型还是 IO 密集型的。不同类型的系统性能优化方式不尽相同。

CPU 密集型系统中,需要处理大量的 CPU 运算,那么选用更高效的算法或者减少运算次数就是这类系统重要的优化手段。

IO 密集型系统指的是系统的大部分操作是在等待 IO 完成,这里 IO 指的是磁盘 IO 和网络 IO。我们熟知的系统大部分都属于 IO 密集型,比如数据库系统、缓存系统、Web 系统。

比方说,如果是数据库访问慢,那么就要看是不是有锁表的情况、是不是有全表扫描、索引加的是否合适、是否有 JOIN 操作、需不需要加缓存,等等;如果是网络的问题,就要看网络的参数是否有优化的空间,抓包来看是否有大量的超时重传,网卡是否有大量丢包等。

参考

《高并发系统设计40问》