谈谈网络拥塞的根源

2024-02-10 13:04
文章标签 网络 谈谈 拥塞 根源

本文主要是介绍谈谈网络拥塞的根源,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前天发了一则朋友圈:

拥塞的本质原因在于信息差的消除,景点排队,买票排队,餐馆排队,高速公路排队,正是因为更多的人知道了容量有限的服务,动辄百万千万并发的线上系统控制几十上百容量的线下系统,不堵才怪。
延吉,哈尔滨一个菜市场,以前除了本地附近的人正常买菜,没人知道,它的运作很正常,媒体报道消除信息差后全国都知道了,菜市场瞬间沦陷,同理,导航造成了高速拥堵,12306造成了买票难,抖音小红书造成了景点拥堵,迪杰斯特拉算法造成了互联网拥塞,当然,如果拥塞的服务是一个依赖流量的网红,这就意味着源源不断的入账。
互联网之前,布雷斯悖论早就说明了这个问题,开一条新路,你别让所有人都知道,拥塞问题就会缓解,所有人都知道了,反而会更拥塞。
统计复用系统的风险就是你要为拥塞和资源闲置双向买单,并且整体看来某处越拥塞就意味着某处越闲置,所以成本是指数上升的。
我为什么总能避开拥堵,因为我知道越拥塞就越闲置这个道理,全局最优解是有聚合效应的,大家只选第一而鄙视第二,鉴于还有小一半人不在乎被鄙视,选第三就避开拥塞了,综合效用肯定最佳,很简单的道理,只是大多数并不明白。
如今数据中心网络,cdn 网络都卷成什么逼样了,我作为退出这行当的人还得忠告几句,别天天盯着你那一亩三分地瞎卷,你们连整个情况都整不明白就天天自研一上线就挂的所谓算法,能有用吗,如果只为还贷和虚荣,当我没说就是了。
火车站出站,一群人乌央乌央堵在那最近的几个闸机处,旁边闸机空无一人,我老婆发现了去试试,一刷身份证就出去了,这不就是个例子么。教育只教你怎么卷,没教你怎么避开卷。
卷,意思就是拥塞。

有必要再引申一下。主要谈三个点对拥塞的作用以及它们之间相互的作用,一个是网络中达成共识的速度,一个是枢纽节点,一个是选路。

拥塞的根源在于一个非常快的系统在相对数量级差异的时间内让一个相对慢的网络系统达成了共识。

再以哈尔滨旅游为例,媒体是一个很快的信息推送系统,全国人几乎可以同时收到媒体的渲染信息,而飞机,高铁也是相对快速的系统,数万数十万人在小时级时差内几乎一起到达,也就人满为患了。

如果用一个极端的慢速系统做同样的渲染推送,比如媒体派人从一个地方出发步行向全国各地进发,渲染旅游信息,大家也是步行前往哈尔滨旅行,大家到达以及游玩的时间就会被距离散列开,就不会拥堵了。

这就是为什么越到了信息化时代,飞机,高铁等快速交通工具越发达,拥堵的地方越多的原因,曾经的书信,步行,自行车时代,反而哪里都不堵,而人口相比此前并没有量级的增量。

我曾经建议数据中心把光纤剪成参差不齐的长度,大概就能缓解 incast,就是这个道理,让数据到达交换机的时间被距离散列开,但这一招在广域网就不好使,因为几米的距离相对信号传输速率而言,太短了。

再来看一下枢纽对于拥塞的影响。

曾经的超级巨无霸,郑州铁路局在 2010 年代被拆分,武汉铁路局,西安铁路局脱离郑州局而独立,这事在河南看来多少有失颜面,但事后看,这次拆分正是为接下来的高铁时代做铺垫,高铁时代的超级枢纽反而影响效率。

坐过普速火车的都知道,四位数字的绿皮慢车,K 开头的快车,T 开头的特快,Z 开头的直快,全部跑在同一个路网上,慢车经常停在荒山野岭的调度站给快车让道,一停就是好久,跨局火车局间交接还要换火车头,武汉开往哈尔滨的火车开始由 “郑局武段” 车头牵引,进了哈尔滨局的地界就换成了 “哈局三(三棵树站)段” 的车头。

最开始的动车组也跑在这种普速铁路,但它不用换车头,车头是个普通车厢,还坐着人呢,没法换,其它车给动车组让车,让其它车更慢,所以动车组根本跑不起来。

所以所谓的高铁真的在说火车吗?说的是路啊。

高铁时代重建了新的路网,连火车站都是新建的,各种 “xx 东,xx 南,xx 西,xx 北” 都是新建的高铁站。曾经郑州,武汉,西安都在争到底哪里才是枢纽,结果高铁时代它们都不是枢纽,高铁路网的趋势是点对点拓扑,这才能最大化通行效率,但凡有大型枢纽,就必然要引入复杂的调度算法,想高效就要直达。所谓高铁,更大意义上是高速铁路网。

航空运输网也类似。飞机性能的提升让远距离点对点运输成了可能,于是就取消了波音 747 和 A380 这种枢纽到枢纽飞机的必要性,和铁路枢纽需要复杂算法类似,这种大飞机对机场要求极高,还影响其它小飞机起降,其实综合效率并不高。

核心就是,对效率而言,能点对点就点对点,full mesh 最优,所有枢纽节点的引入都来自于节省,而不是效率。

最后看看选路。

不管是 tcp/ip 互联网还是公路网,最为统计复用系统,在选路方面,看上去遵循 “选择最短路径” 就是最优,其实不然。以往没有导航的时代,司机用一种看地图凭记忆的方式选路,肉眼根本量不出几条路之间的细微差别:
在这里插入图片描述

这就是越导航越堵的原因。因为导航让大家产生了最短路径的共识。布雷斯悖论的根源也在这种共识,如果有一半人不知道新修了一条更短的路,整个网络的综合效率就会高很多。

这也是我一直反对严格最短路径优先的原因,反而松散的 ecmp 更有效率,系统应该在所有可达的路径上分发流量,路径度量顶多作为一个不那么重要的权重。最短路径优先算法就是一个精确的钟摆,当网络共识把大家引导到同一条路径时,这条路径就成了最劣路径。最短路径优先算法让网络工作在 active-standby 模式,而不是 active-active 负载均衡模式。那么多路径简直就是在最短路径上的路由器坏了重收敛时用的。

这就引入了允不允许乱序的问题,应该是 tcp 给网络惯的毛病,要向大自然学习,婚礼车队都不是完全不能乱序。

综合一下本文的三个点之间的互相影响,最短路径优先算法让网络在极短的时间内产生了共识,而该共识把流量引入所谓枢纽节点,于是在枢纽节点产生拥塞。

让共识达成的慢一点,或干脆不要有共识,就解除了拥塞的根源。

但随着最短路径优先的互联网感染了社会生活的几乎每个方面,它的病也感染了生活的每个方面,无论是旅游还是导航,可以说互联网是现实生活中各种拥塞的主因,主因的背后还是最短路径优先算法。

你家门口就能买到好吃的猪头肉,若不是你在网络上查到距离你 10 公里开外的一家老字号名店,你也不会去买,信息是共享的,共识让所有人都知道了这家店,于是店家过载,开始排队,即使开分店,也还是在分店间排序评分,最高分那家还是会排队。

哈尔滨热度也一样,如果你也相信 “最短路径优先” 不靠谱,相信退而求其次,去趟长春你会发现同样好玩,就算在长春,也没必要非要去冰雪新天地和净月潭,冰雪项目,南湖公园就够了,接地气。

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

这篇关于谈谈网络拥塞的根源的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/697176

相关文章

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

poj 2112 网络流+二分

题意: k台挤奶机,c头牛,每台挤奶机可以挤m头牛。 现在给出每只牛到挤奶机的距离矩阵,求最小化牛的最大路程。 解析: 最大值最小化,最小值最大化,用二分来做。 先求出两点之间的最短距离。 然后二分匹配牛到挤奶机的最大路程,匹配中的判断是在这个最大路程下,是否牛的数量达到c只。 如何求牛的数量呢,用网络流来做。 从源点到牛引一条容量为1的边,然后挤奶机到汇点引一条容量为m的边

配置InfiniBand (IB) 和 RDMA over Converged Ethernet (RoCE) 网络

配置InfiniBand (IB) 和 RDMA over Converged Ethernet (RoCE) 网络 服务器端配置 在服务器端,你需要确保安装了必要的驱动程序和软件包,并且正确配置了网络接口。 安装 OFED 首先,安装 Open Fabrics Enterprise Distribution (OFED),它包含了 InfiniBand 所需的驱动程序和库。 sudo

【机器学习】高斯网络的基本概念和应用领域

引言 高斯网络(Gaussian Network)通常指的是一个概率图模型,其中所有的随机变量(或节点)都遵循高斯分布 文章目录 引言一、高斯网络(Gaussian Network)1.1 高斯过程(Gaussian Process)1.2 高斯混合模型(Gaussian Mixture Model)1.3 应用1.4 总结 二、高斯网络的应用2.1 机器学习2.2 统计学2.3

网络学习-eNSP配置NAT

NAT实现内网和外网互通 #给路由器接口设置IP地址模拟实验环境<Huawei>system-viewEnter system view, return user view with Ctrl+Z.[Huawei]undo info-center enableInfo: Information center is disabled.[Huawei]interface gigabit

Golang 网络爬虫框架gocolly/colly(五)

gcocolly+goquery可以非常好地抓取HTML页面中的数据,但碰到页面是由Javascript动态生成时,用goquery就显得捉襟见肘了。解决方法有很多种: 一,最笨拙但有效的方法是字符串处理,go语言string底层对应字节数组,复制任何长度的字符串的开销都很低廉,搜索性能比较高; 二,利用正则表达式,要提取的数据往往有明显的特征,所以正则表达式写起来比较简单,不必非常严谨; 三,使

Golang网络爬虫框架gocolly/colly(四)

爬虫靠演技,表演得越像浏览器,抓取数据越容易,这是我多年爬虫经验的感悟。回顾下个人的爬虫经历,共分三个阶段:第一阶段,09年左右开始接触爬虫,那时由于项目需要,要访问各大国际社交网站,Facebook,myspace,filcker,youtube等等,国际上叫得上名字的社交网站都爬过,大部分网站提供restful api,有些功能没有api,就只能用http抓包工具分析协议,自己爬;国内的优酷、