高速公路和 TCP/IP 的负载均衡和拥塞

长假小长假返程堵车问题非常有趣,很多人都在抱怨,新闻也在各种报道,但这么多年几乎没人想办法绕开拥堵,明知道那个时间那条路会堵,却依然在那个时间涌入那条路。

​这件事其实很容易解释,人们内心对这种拥堵是容忍的,是可预期的,也就是说人们在假期里专门安排了几十个小时的拥堵时间,比如他们提前 52 个小时返程,这 52 个小时里已经包含了堵车的 50 个小时。这是一种消极的对抗。

​如果仔细看路况地图,以长三角上海嘉定城区(一定要具体到街道才能显示自己牛逼)为中心辐射,仍然可以找到负载很低的要么不知名,要么稍微绕路的高速公路,但 G60,G2 却是万年拥堵。比如从杭州到嘉定城区,导航一定会推荐 G60,由于当代开车的离开导航几乎看不懂地图,甚至找不到家,拥堵问题很大程度可以归结为导航的问题,如果从杭州往嘉定城区走,走环杭州湾环路往浦东机场方向就会快很多,但由于 “浦东机场不在嘉定”,这条路几乎没人走,此外从苏州阳澄湖回嘉定,沪宜也比京沪高尚,但如何绕开 G15 进嘉定那段,需要一定技巧。不如不听导航的,故意走错,让它重新规划,避开让你掉头返回的,至少能避开从众,此外也有一种 “逐跳路由” 的思想。

​但没人为了回个家这么折腾,靠导航就完了,省事,输入目的地即可,剩下的交给时间。我把这个问题归为负载均衡问题,而不是拥塞成因问题,拥塞问题成因更有趣,最后再说。

​在 TCP/IP 网络上这个负载均衡问题早就存在了,那时中国的高速公路网还很稀疏,大部分家庭根本没车,更别提万恶的导航 app 了。TCP/IP 的负载不均衡问题归结为 IP 路由(ecmp是后来的派池,不解决根本问题),但和高速公路导航不同的是,IP 路由是逐跳路由,具体的负载均衡情况取决于路由算法的精度,你把 RTT 加入权重,路由度量自然也就绕开了拥塞段。

最后说说高速公路拥塞成因,车辆间距太小是根因。

可以将两车之间的间距看做 buffer ,假设这个 buffer 足够大,如果前车由于喝口水,点根烟这种杂事轻轻踩了一下刹车随后又加速,后车可以无视前车这个动作,保持匀速,但如果 buffer 太小,后车就不得不也踩刹车,但后车并不知道前车只是稍微抖动一下,反应时间肯定比前车自主刹车加速的间隔大,以此往后推,形成一列波长越来越长的刹车波(红移?有道理),这直接影响了道路上车流的平均速度,这就是堵车的根源,所以保持足够的安全车距不光安全,还能缓解堵车,但这需要大量车一致行动,这才是难点,每辆车的司机都是自私的,只要你跟前车保持了足够的距离,就一定会有车插进去,如果距离还足够,就会再插入一辆,SB 行为。

在 TCP/IP 网络上,rate–based pacing 可以解决这个问题,但和高速公路一样,大多数连接还是 AIMD 以 burst 方式突发,只要你pacing 肯定会有 aimd 就加塞,挤占 buffer ,从而挤压 pacing 流的吞吐。几乎所有搞传输优化的和路上开车的人一样,不懂得松弛,比如对于弱网丢包吞吐低的优化问题,绝对不是激进发送能突破的,反而把它识别出来,退回到 reno 更有效。

TCP/IP 网络传输滥用,误用,透支了 buffer,高速公路开车的人也滥用, 误用,透支了 buffer,所以我一直最讨厌的就是那些搞传输优化的人,就跟我讨厌开车的人一样,前几天去阳澄湖,碰到一个人肉占车位的,就是不让位,也不说话,低头看手机,没办法,临走前喊了一句"傻逼!",一切不高尚的根源,在于滥用,透支资源。

皮鞋没有蹬上,露着白袜子。

浙江温州皮鞋湿,下雨进水不会胖。

你可能感兴趣的:(tcp/ip,负载均衡,网络协议)