最近上班路上新开了两条新路,我本已变态的通勤时间又增加了 5 分钟。
新路开通的理由是新建了小区,无可厚非,但如果根本没有新需求,只是增加路,那就是不对。布雷斯悖论网上一堆解释,不赘述,我写点自己的理解,也包括 TCP/IP 网络,都是一个道理。
新增道路本质上就是新增节点,在任何统计复用网络上,节点都是一个排队系统,换句话说,徒增时延:
- 若不改变路径,则新增节点的排队引入新统计时延(总要等新红灯);
- 若走新路径,则在流量达到阈值后,贝雷斯悖论引入新时延;
不要幻想在流量低的时候新路径会有什么作用,因为这个时候旧路径也孬不到哪去。
先做一个简单建模,看个表象。
设 F(t) 为网络实施流量,P(t) 为布雷斯悖论触发概率,T0T_0T0 为布雷斯悖论触发时的流量阈值,c 为负反馈强度系数,k 是流量自然增长系数。
所有统计复用网络的流量拥塞行为由博弈均衡引导,而博弈由路由控制,可简单假设:
- 流量越大,布雷斯悖论触发概率越高,流量突破阈值 T0T_0T0,布雷斯悖论激活,全网拥塞;
- 拥塞状态可自动抑制流量回落,不管是拥塞控制还是限流;
- 流量回落,拥塞缓解,流量再次自然增长,形成自激负反馈震荡;
用 S 饱和函数模拟布雷斯悖论触发函数:
P(F)=F(t)2T02+F(t)2P(F) = \dfrac{F(t)^2}{T_0^2 + F(t)^2}P(F)=T02+F(t)2F(t)2
简单解释:
- F≪T0F\ll T_0F≪T0 时,P≈0P\approx 0P≈0,几乎不触发悖论;
- F=T0F=T_0F=T0 时,P=12P=\dfrac12P=21,临界中点,拥塞前期;
- F≫T0F\gg T_0F≫T0 时,P→1P\to 1P→1,必然触发悖论;
即 P = 1 时,大家都走这条路径,P = 0 时,该路径无人问津或被关闭,介于 0,1 间随行。
流量动力学就是一个简单的负反馈:
dFdt=k⋅F−c⋅P(t)⋅(F−T0)\dfrac{\text{d}F}{\text{d}t} = k\cdot F -c\cdot P(t)\cdot (F-T_0)dtdF=k⋅F−c⋅P(t)⋅(F−T0)
简单解释:
- k⋅Fk\cdot Fk⋅F 是流量自然增长;
- −c⋅P(t)⋅(F−T0)-c\cdot P(t)\cdot (F-T_0)−c⋅P(t)⋅(F−T0) 是拥塞抑制项,F<T0F<T_0F<T0,抑制项为正,流量增长,F>T0F>T_0F>T0,抑制项为负,流量被拉回阈值下方;
来看模型的行为。
当流量很低 F<T0,P≈0F<T_0,P\approx0F<T0,P≈0,方程退化为 dFdt≈kF>0\dfrac{\text{d}F}{\text{d}t}\approx kF>0dtdF≈kF>0,车流平稳上涨,无拥塞;当流量临近阈值 F→T0F\to T_0F→T0,P 快速升高,网络开始出现拥塞,不治将恐深;若流量突破阈值 F>T0F>T_0F>T0,负反馈项主导,dFdt<0\dfrac{dF}{dt}<0dtdF<0,流量被强行下拉。
系统最终会在 T0T_0T0 附近做自持震荡,而 T0T_0T0 由资源,需求,经验共同决定,不能乱搞。但大部分系统都是拍脑袋乱搞。
在现实中,往往会加入应急调控机制,比如人为限流,限速,关闭节点,重路由等,设新增调控项 u(t),经理发现拥塞无法缓解,可直接实施:
dFdt=k⋅F−c⋅P⋅(F−T0)−u(t)⋅F\dfrac{\text{d}F}{\text{d}t} = k\cdot F -c\cdot P\cdot (F-T_0)-u(t)\cdot FdtdF=k⋅F−c⋅P⋅(F−T0)−u(t)⋅F
u(t)>0u(t)>0u(t)>0 相当于人工加强负反馈,让震荡更快收敛,拥塞爆炸半径大幅缩小。
这个模型说明了一个宏观的现象,大概和我们在路上和网络上看到的差不多,其背后正是个体自以为是的理性往往导致集体的非理性。
下面是一个更加完善的基于平均场的系统动力学模型,它包含三个核心变量,形成一个闭环负反馈系统。
变量依旧如上述模型,增加 C(t) 表示拥塞状态。模型如下:
{dFdt=α⋅(Fmax−F)−β⋅C⋅FdCdt=γ⋅F⋅(1+δ⋅P)−μ⋅CdPdt=ρ⋅F⋅(1−P)−λ⋅C⋅P−η⋅(P−Pbase)\left\{\begin{aligned}\dfrac{\text{d}F}{\text{d}t}&=\alpha\cdot(F_{max}-F)-\beta\cdot C\cdot F\\\dfrac{\text{d}C}{\text{d}t}&=\gamma\cdot F\cdot(1+\delta\cdot P)-\mu\cdot C\\\dfrac{\text{d}P}{\text{d}t}&=\rho\cdot F\cdot(1-P)-\lambda\cdot C\cdot P-\eta\cdot(P-P_{base})\end{aligned}\right.⎩ ⎨ ⎧dtdFdtdCdtdP=α⋅(Fmax−F)−β⋅C⋅F=γ⋅F⋅(1+δ⋅P)−μ⋅C=ρ⋅F⋅(1−P)−λ⋅C⋅P−η⋅(P−Pbase)
其中,FmaxF_{max}Fmax 为最大需求,PbaseP_{base}Pbase 为基础平衡概率,如果关闭一个节点,则其 Pbase=0P_{base}=0Pbase=0.
剥离出 C 后,该模型更加易于被分析,因为负反馈可视化了,可将 η\etaη 设置为一个干预强度函数 u(t),就和上述模型一样了。
这模型只是解释,若要建议优化,就必须抽出 max{F(t)C(t)}\text{max}\{\dfrac{F(t)}{C(t)}\}max{C(t)F(t)} 作为目标:
- δ\deltaδ 作为布雷斯悖论系数,对拓扑规则提供建议;
- η\etaη 作为干预控制系数,为主动拥塞控制提供建议;
剩下的就是调参了,而这最难的。
额外的话不多说,在一个统计复用网络中,几乎肯定是自私路由,在全局看来,作为网络的设计者,做减法往往比做加法更能实现系统调优。
但另一方面,如果为模型再加入一个变量 R(t) 表示路径资源的总量,它就能反过来影响 P(t) 了,但由于 R 往往属于一次性基础投资,变化周期太长,所以就不再引入,作为一个例子,参考香港,上海黄浦区等街区密而短的羊肠小道,反倒没有宽阔但少的大道更容易拥堵。
浙江温州皮鞋湿,下雨进水不会胖。