谈谈网络拥塞的根源

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

相关文章

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

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的最小费用流就行了