网络是统计的,是不确定的,这话天天说,就不在乎再说一次,就着前文 为什么高速网络更怕抖动 接着说。从独立随机流叠加定理开始:
- n n n 条独立同分布的到达流叠加,总到达过程随 n n n 增多呈现泊松分布;
我的解释是广义中心极限定理在计数过程上的特例,似乎有点泊松分布随 λ \lambda λ 增加趋向正态分布的意思,要不是泊松分布左边有一堵 x = 0 x=0 x=0 的墙,它事实上就是正态分布,增大 λ \lambda λ 只是把整个图形右移,泊松分布左边墙后面的尾巴就露出来了。
本文先说三个同构的流叠加场景,并分析对应结论下的实际行为和启示:
- 泊松极限,即总均值 λ \lambda λ 恒定的稀疏流叠加,总带宽一定;
- 大数定理,广义 C L T CLT CLT,即总均值为常数的负载切分,总 B D P BDP BDP 一定;
- 经典 C L T CLT CLT,即固定强度单流的叠加,总带宽无限,边际成本递减;
- 上述三大统计律下的实际网络流量行为;
泊松极限说的是,给定有限总到达率,把总流量拆成 n n n 条独立同分布,稀疏的子流,当流数量 n → ∞ n\to\infty n→∞,每条子流到达率 → 0 \to 0 →0,聚合后的整体到达过程收敛为泊松过程。
总到达率 λ total \lambda_{\text{total}} λtotal 恒定,拆为 n n n 条独立子流,单流到达率 λ n = λ total n \lambda_n = \dfrac{\lambda_{\text{total}}}{n} λn=nλtotal,当 n ↑ , λ n → 0 n\uparrow,\lambda_n \to 0 n↑,λn→0,每条流平均很久才发一个报文,就是稀疏流。
形象地看,在聚合之前,单条流突发极强,扎堆发送和长时间静默交替,此时其 C a ≫ 1 C_a\gg1 Ca≫1,拆分后聚合,扎堆被分散,每一条流发包的平均间隔延长,任意小区间,同时有两个及以上子流发包的概率极低,绝大多数情况 1 1 1 个或 0 0 0 个。这种大量独立且稀有事件叠加的行为,即泊松过程的典型。
抛 n n n 枚独立硬币,每枚正面概率 p → 0 p\to0 p→0,总期望 n p = λ np=\lambda np=λ 固定,正面出现次数趋近泊松分布,网络流叠加和它同一种数学结构。
若用数学描述,也不麻烦。把时间切为极小的时隙 Δ t \Delta t Δt,单个时隙内,总共有报文到达的数量,服从二项分布 B ( n , p n ) B(n,\,p_n) B(n,pn):
P ( k ) = ( n k ) p n k ( 1 − p n ) n − k P(k) = \binom{n}{k}\,p_n^k\,(1-p_n)^{n-k} P(k)=(kn)pnk(1−pn)n−k
总平均到达数固定的约束下:
λ = n p n = 常数 \lambda = n\,p_n =\text{常数} λ=npn=常数
即 p n = λ n p_n = \dfrac{\lambda}{n} pn=nλ,满足当 n\\to\\infty 时, p n → 0 p_n\to0 pn→0.
代入二项分布并求极限:
lim n → ∞ ( n k ) ( λ n ) k ( 1 − λ n ) n − k = λ k e − λ k ! \begin{aligned} \lim_{n\to\infty} \binom{n}{k}\left(\dfrac{\lambda}{n}\right)^k \left(1-\dfrac{\lambda}{n}\right)^{n-k} &= \dfrac{\lambda^k e^{-\lambda}}{k!} \end{aligned} n→∞lim(kn)(nλ)k(1−nλ)n−k=k!λke−λ
看,右边正是泊松分布的概率质量函数:
P ( N = k ) = λ k e − λ k ! P(N=k) = \dfrac{\lambda^k e^{-\lambda}}{k!} P(N=k)=k!λke−λ
这就是独立随机流叠加定理的一般结论, n → ∞ , p n → 0 , n p n = 常数 n\to\infty,\ p_n\to0,\ np_n=\text{常数} n→∞, pn→0, npn=常数 条件下,独立稀疏伯努利试验的叠加趋向泊松分布,即大量独立,稀疏的子流叠加,到达计数过程收敛为泊松过程。
泊松过程的到达间隔 X X X 服从指数分布:
f ( x ) = λ e − λ x , x ≥ 0 f(x) = \lambda e^{-\lambda x},\quad x\ge 0 f(x)=λe−λx,x≥0
指数分布矩性质, E X = 1 λ , V a r ( X ) = ( 1 λ ) 2 \text{E}X = \dfrac{1}{\lambda},\quad \mathrm{Var}(X) = \left(\dfrac{1}{\lambda}\right)^2 EX=λ1,Var(X)=(λ1)2
代入到达变异系数定义:
C a = V a r ( X ) E X = 1 λ 1 λ = 1 C_a = \dfrac{\sqrt{\mathrm{Var}(X)}}{\mathrm EX} = \dfrac{\dfrac{1}{\lambda}}{\dfrac{1}{\lambda}}=1 Ca=EXVar(X) =λ1λ1=1
所以趋向于泊松过程的聚合流, C a → 1 {C_a \to 1} Ca→1。
这就是骨干网,移动通信基站,小区宽带的设计依据,将大量独立稀疏用户流聚合,流量突发会被自然抹平,最终趋近平稳泊松流。
接入用户数越多,整体流量抖动越稳定,只要 ρ \rho ρ 不过大,链路可以跑高利用率仍保持低时延:
W q = ρ ⋅ E S 2 ( 1 − ρ ) ⋅ ( C a 2 + C s 2 ) → W q ≈ ρ ⋅ E S 2 ( 1 − ρ ) W_q=\dfrac{\rho\cdot\text{E}S}{2(1-\rho)}\cdot(C_a^2+C_s^2)\to W_q\approx\dfrac{\rho\cdot\text{E}S}{2(1-\rho)} Wq=2(1−ρ)ρ⋅ES⋅(Ca2+Cs2)→Wq≈2(1−ρ)ρ⋅ES
但随着总负载 λ \lambda λ 增加, ρ \rho ρ 增至过大,聚合后越发趋向对称钟形正态分布,钟形被压扁,排队时延 W q W_q Wq 趋向增加。
另一方面,若在长程依赖场景,存在流的集合同步突发,各流发包便不再是独立稀有事件,就不会收敛到泊松流,这在重大新闻播报,赛事等场景下是常态。
为解决以上两类统计偏离问题,就要触发拥塞控制,既要确保足够的带宽,又要确保公平性,这就 buffer \text{buffer} buffer 的主场了。
本文第二个场景,大数定律下的广义 CLT \text{CLT} CLT 极限,buffer 一定下, BDP \text{BDP} BDP 总量固定,单流尺度随 1 n \dfrac{1}{n} n1 收缩且不影响 BDP \text{BDP} BDP,以经典 AIMD \text{AIMD} AIMD 为例, α = 1 , β = 0.5 \alpha=1,\beta=0.5 α=1,β=0.5 建模。
设 n n n 个独立同分布随机变量 X k ∈ { 1 n , 2 n } , k = 1 , 2 , ... , n X_k \in \left\{\,\dfrac{1}{n},\;\dfrac{2}{n}\,\right\},\quad k=1,2,\dots,n Xk∈{n1,n2},k=1,2,...,n,假设两点等概率:
P ( X k = 1 n ) = 1 2 , P ( X k = 2 n ) = 1 2 P\left(X_k=\tfrac1n\right) =\dfrac12,\quad P\left(X_k=\tfrac2n\right) =\dfrac12 P(Xk=n1)=21,P(Xk=n2)=21
至于 { 1 n , 2 n } \left\{\,\dfrac{1}{n},\;\dfrac{2}{n}\,\right\} {n1,n2} 区间的保证则来自 AIMD \text{AIMD} AIMD,或者更普遍的端到端 capacity-seeking \text{capacity-seeking} capacity-seeking 算法。 n n n 条流的叠加和:
S n = X 1 + X 2 + ⋯ + X n S_n = X_1 + X_2 + \dots + X_n Sn=X1+X2+⋯+Xn
单个变量均值 :
μ = E X k = 1 2 ⋅ 1 n + 1 2 ⋅ 2 n = 3 2 n \mu =\text{E}X_k=\dfrac12\cdot\frac1n +\dfrac12\cdot\dfrac2n=\dfrac{3}{2n} μ=EXk=21⋅n1+21⋅n2=2n3
单个变量方差:
Var ( X k ) = E X k 2 − ( E X k ) 2 = 1 4 n 2 \text{Var}(X_k)=\text{E}X_k\^2-\big(\text{E}X_k\big)^2=\dfrac{1}{4n^2} Var(Xk)=EXk2−(EXk)2=4n21
利用独立变量和性质:
E S n = n ⋅ μ , Var ( S n ) = n ⋅ Var ( X k ) \text{E}S_n=n\cdot\mu,\quad\text{Var}(S_n)=n\cdot \text{Var}(X_k) ESn=n⋅μ,Var(Sn)=n⋅Var(Xk)
故:
E S n = n ⋅ 3 2 n = 3 2 \text{E}S_n=n\cdot\dfrac{3}{2n}={\dfrac{3}{2}} ESn=n⋅2n3=23
总均值恒为常数,不随 n n n 变化,在 BDP \text{BDP} BDP 一定时,总负载真不变。
现在看方差,标准错:
V a r ( S n ) = n ⋅ 1 4 n 2 = 1 4 n \mathrm{Var}(S_n)=n\cdot\dfrac{1}{4n^2}={\dfrac{1}{4n}} Var(Sn)=n⋅4n21=4n1
σ S n = V a r ( S n ) = 1 2 n \sigma_{S_n}=\sqrt{\mathrm{Var}(S_n)}=\dfrac{1}{2\sqrt{n}} σSn=Var(Sn) =2n 1
方差趋于 0 0 0,说明 n n n 越大 X ˉ n \bar X_n Xˉn 越集中在期望附近,满足大数定律,平均结果随 n n n 增大越来越稳定,波动消失,这就是我此前论证的,流越多,所需的 buffer \text{buffer} buffer 越少,参见 为什么流越多,所需 buffer 越少,主宰 TCP AIMD 的中心极限定理。
OK,我已经展示了 C a → 1 C_a\to 1 Ca→1 的泊松极限,以及 buffer → 0 \text{buffer}\to 0 buffer→0 的大数定律,它们的承接关系在于,泊松极限确定了由 ρ \rho ρ 度量的吞吐和平均时延的固定关系,即 C a = 1 C_a=1 Ca=1 下的 W q W_q Wq 表达式,保证了资源的利用率和基础性能,而大数定律则以 BDP \text{BDP} BDP 约束了 W q W_q Wq 的界限,确保了网络的可用性。
一个直观的表示,泊松极限固定了网络最佳效用(\\dfrac{吞吐}{时延} )时的波动,而大数定律消除了整体的波动,让统计变得确定,可观测。
若撤销泊松极限和 BDP \text{BDP} BDP 大数定律的约束,最后看中心极限定理的规模效应。
设每条子流自身均值,方差固定,与 n n n 无关:
E X i = μ , V a r ( X i ) = σ 0 2 , σ X i = σ 0 \text{E}X_i=\mu,\ \mathrm{Var}(X_i)=\sigma_0^2,\quad\sigma_{X_i}=\sigma_0 EXi=μ, Var(Xi)=σ02,σXi=σ0
n n n 条流叠加,总负载随流数线性增大, n → ∞ n\to\infty n→∞ 时 S n S_n Sn 依分布收敛为正态分布。叠加总和 S n S_n Sn:
E S n = n μ , V a r ( S n ) = n σ 0 2 , σ S n = σ 0 n \text{E}S_n = n\mu ,\quad \mathrm{Var}(S_n) = n\sigma_0^2,\quad \sigma_{S_n} = \sigma_0\sqrt{n} ESn=nμ,Var(Sn)=nσ02,σSn=σ0n
σ S n \sigma_{S_n} σSn 的 n \sqrt{n} n 增长意味着规模效应,将抖动作为成本,则边际成本递减,这便是多路统计复用网络的第一个基础,它决定了网络的可扩展性,资源的扩展能撑得住负载的扩展,同时负载也能吃得下资源的扩展。
而加上泊松极限和大数定律的约束后,这便是一个归一化操作,在中心极限定理下,等效单流 X ˉ n = S n n \displaystyle \bar X_n=\frac{S_n}{n} Xˉn=nSn,则:
E X ˉ n = μ , V a r ( X ˉ n ) = σ 0 2 n , σ X ˉ n = σ 0 n \text{E}\\bar X_n=\mu,\quad \mathrm{Var}(\bar X_n)=\dfrac{\sigma_0^2}{n},\quad \sigma_{\bar X_n}=\dfrac{\sigma_0}{\sqrt{n}} EXˉn=μ,Var(Xˉn)=nσ02,σXˉn=n σ0
这与大数定律的结论同归,分摊到单流的抖动随 1 n \dfrac{1}{\sqrt{n}} n 1 减小。
以上这三大统计律勾勒了所有统计复用网络的基本轮廓,该轮廓下包括几乎所有的单独的网络架构和技术,GPON 广播选收,基站,骨干网,切片,flowlet,固定速率业务,... 以及剩下的让网络变复杂的技术。我们从来没有见过 buffer = 0 \text{buffer}=0 buffer=0 的配置,这是为什么。
所以说,它们三个是分组交换网络统计复用的基石,覆盖了流量叠加,突发平滑, buffer \text{buffer} buffer 的核心。在这三大统计律起作用的理想的,平衡的范围内,运行着并不遵守模型假设的实际流量,正是它们决定着上述提到的让网络变复杂的技术:
- 网络流量符合随机游走模型;
- 网络流量呈现重尾分布特征;
- 网络流量的时间尺度自相似;
首先看随机游走模型描述的网络队列,定义关键统计量,漂移量:
δ = E 单时隙净增量 = E 到达数 − E 服务数 \delta = \text{E}\\text{单时隙净增量} = \mathrm{E}\\text{到达数}-\mathrm {E}\\text{服务数} δ=E单时隙净增量=E到达数−E服务数
由于拥塞控制(叠加 AQM Policing)会确保 ρ = 平均到达率 平均服务率 < 1 → δ < 0 \rho=\dfrac{平均到达率}{平均服务率}\lt1\to\delta\lt0 ρ=平均服务率平均到达率<1→δ<0,队列长度是常返状态,高队列只是临时现象,不会无限堆积,拥塞只是暂时的,这和交通拥堵模型一致,可以经常堵,但不会一直堵,这意味着网络是持续可用的。
瞬时突发可以把队列打高,但只要 ρ < 1 \rho<1 ρ<1,大数定律会把队列拉回,收敛回归。
再看重尾分布,帕累托分布是其最经典模型,这与取值越大,概率指数级快速衰减的理想建模的指数分布,泊松分布非常不同。
设随机变量 X X X 描述流长度等特征,标准帕累托重尾分布由两个参数决定:
- 形状参数 α > 0 \alpha\gt0 α>0,Pareto 指数,控制尾部厚度;
- 尺度参数 x m > 0 x_m\gt0 xm>0,随机变量的最小取值;
其概率密度函数和累积分布函数分别为:
f ( x ; α , x m ) = α x m α x α + 1 , x ≥ x m f(x;\alpha,x_m)=\dfrac{αx_m^{\alpha}}{x^{\alpha+1}},\quad x\ge x_m f(x;α,xm)=xα+1αxmα,x≥xm
F ( x ) = 1 − ( x m x ) α , x ≥ x m F(x)=1−\left(\dfrac{x_m}{x}\right)^{\alpha},\quad x\ge x_m F(x)=1−(xxm)α,x≥xm
右尾概率为:
P ( X ≥ x ) = ( x m x ) α P(X\ge x)=\left(\dfrac{x_m}{x}\right)^\alpha P(X≥x)=(xxm)α
这就是重尾,右尾衰减慢,其特征在于幂律衰减和尺度不变性,若 X ∼ Pareto ( α , x m ) X\sim\text{Pareto}(\alpha,x_m) X∼Pareto(α,xm),则对任意 c > 0 c\gt0 c>0, c X ∼ Pareto ( α , c x m ) cX\sim\text{Pareto}(\alpha,cx_m) cX∼Pareto(α,cxm),即改变度量单位不改变分布的形状,双对数坐标下 log f ( x ) \logf(x) logf(x) 与 log x \logx logx 呈斜率为 − ( α + 1 ) −(\alpha+1) −(α+1) 的线性关系。
直观理解,虽然大流量,长流是小概率事件,但概率衰减很慢,极端大值频繁现身。
均值有限,但方差极大,极端突发频发,这似乎违背了理想建模的泊松极限,正如现实中根本见不到理想瘦网一样,现实中的重尾分布极大促进了 CDN,AQM,流量工程的发展演化,网络加入了智能而非理想化的裸哑,此乃原因。
重尾意味着少数热点对象被频繁访问,这就是 CDN 缓存的依据,但尾部对象极多,缓存命中率有上限,这又是 L1/L2 分级缓存的依据,CDN 成了一个复杂的技术。
理想模型下单一简单的 FIFO 将不再适合重尾流量,RED,ECN,CoDel 被设计出来主动管理相对频发的小概率重尾流量,网络转发节点因此变得复杂,不再裸哑。
由于重尾的存在,优先级队列需要更加灵活,可以 hash,识别并隔离频发的小概率重尾流量,以保证公平性,容量规划势必要做得更多,以适应实际均峰比很大的网络。
接下来看流量的自相似性叠加重尾。
理想泊松流量,小时间尺度的波动大于大时间尺度,泊松极限,大数定律让波动变得平滑,但发起流量的是长相关,自相似世界,则流量自相似,在 m s , s , m , h , d ms,s,m,h,d ms,s,m,h,d 等所有时间尺度上,流量的突发,波动基本一致。
Hurst 指数 H H H 用于判断时间序列是随机游走还是具有长期记忆性,它量化了自相似程度,其核心关系为:
R ( n ) S ( n ) ∼ c ⋅ n H \dfrac{R(n)}{S(n)}\sim c\cdot n^H S(n)R(n)∼c⋅nH
其中 R ( n ) R(n) R(n) 为极差, S ( n ) S(n) S(n) 为标准差, n n n 为观测值个数, c c c 为常数。
H = 0.5 H=0.5 H=0.5 时,时间序列为无记忆随机游走,对应泊松流的独立增量假设, 0.5 < H < 1 0.5\lt H\lt1 0.5<H<1 时,存在长期正相关性,即过去的增量倾向于影响未来的增量方向,高峰之后更可能还是高峰,低谷之后更可能还是低谷。这正是网络流量自相似性的数学刻画。
网络流量分析实测的 H H H 值通常在 0.7 ~ 0.94 0.7~0.94 0.7~0.94,远大于 0.5 0.5 0.5,说明流量具有显著的长程依赖,即突发不会在短时间尺度上被平滑掉,而是在多个时间尺度持续。
这直接解释了为什么泊松极限和大数定律在实际网络中失效,它们的前提假设是独立增量,而 H > 0.5 H\gt0.5 H>0.5 意味着独立性假设被违背。波动在所有时间尺度都抹不平,拥塞易持续,扩散,流量建模,容量规划难度上升,为适配理想与实际的不一致,网络 buffer \text{buffer} buffer 不得不变大,预留更大的突发余量。
为什么理论上的统计复用网络很确定,但现实里依然有卡顿,抖动,拥塞,这一切都源自于人和社会本身,没人能控制这些,也没有算法能,正如没人能控制人和社会本身一样,其根源就是统计不确定性,而在统计复用网络中,你又必须把确定性交给统计。
浙江温州皮鞋湿,下雨进水不会胖。