性能指标¶
- 时间指标:接口响应时间、业务响应时间
- 容量指标:接口容量、业务容量
- 资源利用率指标
- 操作系统(CPU、IO、Memory、Disk、Network、System)
- JVM(GC、Classes)
指标关系¶
经典示意图
其实不太符合实际,出处:某白皮书·第18页
三条曲线
利用率 Utilization(绿色)
吞吐量 Throughput(紫色)
响应时间 Response Time(蓝色)
三个区域
轻负载区(Light Load)
重负载区(Heavy Load)
塌陷区(Buckle Zone)
两个点
最优并发用户数(The Optimum Number of Concurrent Users)
最大并发用户数(The Maximum Number of Concurrent Users)
三个状态描述
资源饱和(Resource Saturated)
吞吐下降(Throughput Falling)
用户受影响(End Users Effected)
比较合理的一张示意图(蓝线:TPS,黄线:RT)
RT¶
单位通常为 ms,1s=1000ms
最大、最小、平均
响应时间的拆分和定位,是非常重要的一个环节
TPS¶
TPS 可以反应出一个系统处理事务的能力
事务就是统计了一段脚本的执行时间,在不同的行业不同业务中定义的粒度是不同的
通常我们所说的并发,指的都是相对并发,即一个时间段内发生的事情,而不是同一时刻的绝对并发(这其实叫并行),并行其实是没什么意义的,提到并发就默认理解为相对并发即可。
而且并发指的是并发用户数,而不是并发线程
示意图中,有 4 个并发线程,每个线程 1 秒内可完成 4 个事务,所以总 TPS 是 16,即并发数是 16
TPS 不仅取决于线程数,还受到事务的复杂性、响应时间、系统资源以及其他外部因素(如网络延迟)的影响。
估算在线用户数¶
技术指标不能脱离业务指标,在设置技术指标前需要先弄清楚业务指标,比如:1000 万在线用户
通常我们会把一些数据放到 Redis 这样的缓存服务器中,所以想知道在线的最大的用户数是多少,直接拿缓存的内存来算就可以了
- PV(Page View) 页面浏览量,指用户每次访问网站时所查看的页面总数,反映了用户在网站上的活跃程度
- VV(Visit View) 访问次数(每次访问多个页面也算一次),用于衡量用户对网站的粘性和回访频率,可以了解用户的忠诚度
- UV(Unique Visitor) 独立访问用户数,通过 IP 和 Cookie 判断
- UV < IP 可能是同一用户不同时间使用动态IP访问
- UV > IP 可能是公司学校网吧等公用IP访问
比如某人上午访问了某网站2个页面,下午又访问了3个页面,则:PV=5, VV=2, UV=1
估算并发用户数和线程数¶
涉及到用户数,通常要分析并发度,一般业务中,并发度都会低于 5%,甚至低于 1%
假设 10000 个在线用户,并发度为 1%,则并发用户数为:\(10000 * 0.01 = 100\)
即总 TPS 为 100,如果有 5 个线程,则每个线程产生 20TPS
\(平均响应时间 = 1000ms / 20TPS = 50ms\)
没啥人用的服务:TPS 20 / RT 300ms
后台服务:TPS 20 / RT 200ms
十万到百万级的服务:TPS 50 / RT 200ms
秒杀类短时间高并发服务:TPS 100~200 / RT 100ms
所以知道平均响应时间的情况下,就可以估算出并发用户数
\(并发用户数 = (1000ms/平均响应时间ms) * 线程数\)
平均响应时间若为 100ms,则达到 500TPS 需要的并发线程数为:\(500TPS / (1000ms/100ms) = 50\)
Load Average¶
可使用
uptime
命令查看,结果其实就是top
命令返回的第一行信息
平均负载,指单位时间内处于可运⾏状态和不可中断状态的进程数,负载过⾼可能会导致进程响应变慢进⽽影响服务的正常功能
- 可运⾏状态的进程(R):正在使⽤CPU的进程(Running)、正在等待CPU的进程(Runnable)
- 不可中断状态的进程(D):正在等待I/O的进程(Disk Sleep),这些进程正在与硬件进⾏不允许中断的交互(系统保护)
网络指标¶
带宽 Bandwidth¶
指单位时间内信道理论上能传输的最大数据量
带宽越大,网络连接的速度潜力越高
全双工系统的带宽是半双工系统的两倍
单位
- 电气领域:指的是模拟带宽,单位:Hz(赫兹)
- 计算机领域:指的是数字带宽
- 十进制:用 K、M、G 等表示,1K=1000,比如 1Kbps,表示 1k 比特每秒
- 二进制:用 Ki、Mi、Gi 等表示,1Ki=1024,比如 1KiBps,表示 1024 字节每秒
带宽可以分为上行带宽(上传数据量)和下行带宽(下载数据量)
下行,即下载
浏览网页和下载网页内容。
流媒体视频播放,如 Netflix 或 YouTube。
下载文件、软件或更新。
接收电子邮件及附件。
在线游戏时接收数据包。
上行,即上传
上传文件到云存储或服务器。
视频通话和视频会议。
在线游戏时发送数据到游戏服务器。
上传视频到视频网站如 YouTube。
发送电子邮件,特别是带有大附件的邮件。
大多数家庭宽带服务提供的下行速率远高于上行速率,因为用户主要是下载数据,一些企业和专业用户可能需要对称光纤连接,这种连接提供相同的上行和下行速率,以支持大量的数据上传和下载需求。
带宽如果想突破千兆,需要光猫和路由器都支持 2.5G 网口,网线必须是超 5 类(比如 CAT 6)以上的
即使带宽能跑到千兆以上,但网站限速,下载速度也达不到千兆
吞吐量 Throughput¶
指单位时间内信道实际能传输的数据量
\(Throughput = TPS * m\)
信息传输速率限制¶
香农公式指出了信息的传输速率上限,信道的带宽或信道中的信噪比越大,上限就越高
在带宽不变,信噪比不能再提高后,若想提高信息传输速率,可以用编码的方法让每个码元携带更多的信息
码元传输速率限制¶
在任何信道中,码元传输的速率是有上限的,传输速率超过此上限,就会出现严重的码间串扰的问题,使接收端对码元的判别成为不可能
信噪比¶
随机产生的噪声存在于所有的电子设备和通信信道中
\(信噪比(dB,分贝) = 信号的平均功率(S) / 噪声的平均功率(N)\)
时延 delay¶
存储转发的过程中,虽然计算机自动处理,但也仍然避免不了会有一定的时延
- 发送时延
- 传播时延
- 处理时延
- 排队时延
- 往返时延:RTT(Round Trip Time)双向交互一次的时间
利用率¶
- 信道利用率,有数据通过的时间占比,并非越高越好
- 网络利用率,全网信道利用率的加权平均值