仿照古时牛顿三大定律,这里提出web高性能三大定理,主要是对web系统性能度量值的一些内在关系的描述,这里的定理不能像牛顿三大定理那样在力学界起到基础支撑的作用,它只是为我们在设计高性能的web系统时的一些思考进行更形式化的描述。
1. 并发定理
一个系统的并发度等于请求处理耗时与系统的吞吐量的乘积
并发度: 一个系统在同时处理的请求个数。
请求处理耗时: 一个请求从进入系统处理到处理完毕经过的时间。
吞吐量: 系统在现有资源情况下单位时间中(每秒)能完成的请求数。
证明:
我们假设一个简单的情况,即每一个请求都是完全一样的,耗时也都一样,在实际系统中各项性能度量值都是不同且不断变化的,我们这个假设反映了系统的一种平均情况。
设并发度的值为Curr,请求处理耗时为Cost,吞吐量的值为QPS。
设单位时间进入系统处理阶段的请求数为N1, 单位时间系统能够完成的请求数为N2,根据吞吐量定义,N2即系统吞吐量。
在系统中N1是无法大于N2的值的, 不能处理而放在某种外部队列中的请求我们不认为其进入了处理阶段, 即进入系统请求的最大速率也等于吞吐量的值,即有N1=N2=QPS。
在某个时间点t, 它有多少正在处理的请求呢,这代表了Curr的值,它的值等于已到达系统的请求数减去已结束的请求数。
到达的请求数等于时长乘以请求到达速率,即:
到达的请求数 = t*N1 = t*N2= t*QPS
已结束的请求数应该是在t-Cost时间点之前就已经到达的请求数, 很好理解,在t-Cost时间点之前到达的请求,在t时刻刚好都处理结束了,即
已结束的请求数 = (t-Cost)*QPS
Curr = t*QPS - (t-Cost)*QPS = Cost *QPS,这证明了我们的并发定理,即:
并发度 = 请求处理耗时 *吞吐量
说明:
该定理描述了并发度与耗时及吞吐量的一种关系,但并发度往往不是系统能够决定的,比如12306这种购票网站,高峰期的并发度来源于页面操作的用户数,所以对于设计系统者来说,并发度可以理解为一个我们无法控制的常数,即
请求处理耗时 *吞吐量 = Const
一般来说,为了提高系统吞吐量,我们要降低请求处理耗时,为了降低请求的耗时,我们要提高系统吞吐量。
2. 延时定理
在一个高并发且有排队的系统中,请求延时随时间成线性增长
一个请求处理过程中需要使用各种系统资源,如网络读写,CPU计算,磁盘读写等等,在高并发的状况下,这些资源不是即时可得的,这就需要排队,另外我们可能人为设计一些应用层队列让请求排队,如nginx异步模型中的请求队列。
证明:
我们将系统中的所有队列简化为一个单一队列。
设请求延时的值为Cost, 吞吐量的值为QPS。
设单位时间进入系统的请求数为N1, 不同于并发定理中描述的N1值,这N1值表示进入了系统,但不一定进行了处理,可能在一个队列中等待处理。设单位时间系统能够完成的请求为N2,N2=QPS, 在高并发情况下, 会有N1>N2。 同时设请求不用排队的情况下耗时为T, 即纯资源计算耗时,此时队列长度为1,只有当前请求本身。 设某一个时间点t 系统队列长度为L,L表示还有多少个待处理请求,则队列末端一个请求的耗时就等于队列长度乘以单个请求的耗时,即:
Cost = L* T
而队列累积长度等于到达的请求数减去已完成的请求数,即:
L = N1*t- N2*t = (N1-N2) * t
即 Cost = (N1-N2) * t* T = ( N1-QPS)*T*t
这证明了延时定理中的耗时与时间增长的线性关系,增长系数为( N1-QPS)*T。
说明:
在一个高并发系统中,当用户请求速度大于系统吞吐量时,单个请求随时间增长耗时就越长,到后面,耗时会长到难以忍受的程度,为了避免这种情况,我们需要设定系统中的队列的最大长度,不能让队列长度无限增长。
3. 吞吐量定理
一个系统的吞吐量等于各子系统最小吞吐量的值
一个请求的处理可能分为多个阶段,比如先进行网络读写,再CPU计算,最后写磁盘,还可能与第三方服务交互,阶段间的处理对不同请求来说都是可以并行的,即一个请求在进行CPU计算时,同时另一个请求可以写磁盘,这对于具有最小吞吐量的处理阶段的系统资源来说,不会处于空闲状态,所以它也等于整个系统的吞吐量。
对于任何一个处理阶段来说,吞吐量等于处理耗时的倒数。
定理较直观,证明略
说明:
为了提高系统的吞吐量,我们需要找到具有最小吞吐量的处理阶段,即找出系统的瓶颈所在,只有对系统处理瓶颈的阶段进行优化才能提高整体吞吐量。
本文提出了仿照牛顿定律的web高性能三大定理,包括并发定理、延时定理和吞吐量定理,阐述了这些定理在web系统性能优化中的意义和证明。并发定理指出并发度等于请求处理耗时与吞吐量的乘积;延时定理描述了在高并发系统中请求延时随时间的线性增长;吞吐量定理揭示系统吞吐量等于各子系统最小吞吐量。通过理解和应用这些定理,可以有效提升web系统的性能。
1265





