当前位置: 首页 > news >正文

网络的正则拓扑与自然生长

技术是自上而下的指导,自然是自下而上的涌现,前者只是技术,后者不仅仅是技术。

先看一个经典三层胖树拓扑:
在这里插入图片描述

再看一个典型的二层 Spine-Leaf 拓扑:
在这里插入图片描述

无论再怎么比较它们的优缺点和代差,它们都是被 “设计” 和 “规划” 出来的,而不是 “自然生长” 出来的狭义网络。这就是为什么我总强调设计规划出来的系统面临的都只是技术问题,而自然的系统则更多表现为一种复杂系统,面临博弈论,社会学,涌现,统计,商务,送礼等问题,技术反而退而其次再其次。

典型的数据中心网络就是上述图示中规则的正则拓扑,非常类似主板,唯一和主板不同的是它满足 CAP 定理,满足分区容错,而主板则不允许一半系统工作。正则拓扑网络问题均可通过技术手段解决,这也是工程师,程序员们的厚爱,但不能跨界。

广域网则长这样:
在这里插入图片描述

起初,在 1970 年代,教授们只是随意互联,然后,在 1980 年代,教授们希望构建一个分层的正则拓扑网络,再往后,运营商实现了一个松散的分层正则网络,网络开始自然野蛮生长,最后,CDN 厂商的经理们彻底破坏了网络的正则性。那些连通性换句话说可能就是给经理送礼送出来的。

它非常像我们的行政区划交通拓扑,low 到爆的安阳可直飞一线城市广州,牛逼轰轰的深圳却不能直飞纽约,而小城市新乡却有到大城市杭州的火车,比一个县城还小的上海嘉定区新成路街道一个小区门口却有直达虹桥枢纽中间不停站全程高架的直达公交,这就是生长本身的结果。

下面是我昨天发的朋友圈:

虹桥枢纽,HongQiao Hub,路口都是 Route,Hub 标识,仿佛进入了一台路由器内部,而事实上,虹桥 Hub 本身就能分层直连(而不仅仅是可达)世界各地(飞机),全国各地(高铁),全上海各地(地铁公交网约车),全虹桥各地(公交),这本身就是一个路由器。
注意图二,图三,路由表项部署在路口 inbound 处,而不是在集中式指示牌或公交站牌处,这就极大分散了核心压力,这种机制可以第一时间分层分发流量,到最后一个路口时再按方向最终分发,路由表不经常变动时,这是最高效的方式,各类核心路由器也纷纷采用这个方式,将转发表从路由表中分离出来,直接部署在接口处。
在这里插入图片描述

核心点有两个,虹桥枢纽(就是 Hub)可以在任意层次和任意对等位置直连,但又不是全部 full-mesh,比如嘉定新成路街道到虹桥枢纽的嘉虹一线就取消了很多班次,而嘉虹五线则刚刚开通,节点互联显然是在 overlay 层面而不是物理层面,这种灵活性取决于物理层面早就打通了。

第二个核心是分流,既然是枢纽,流量肯定大,为了避免所有人集中在一个地方看指示牌,虹桥枢纽将路由表分布在各处,特别是路口,并遵循先模糊后精确的原则分层分流。从地下连廊就开始了:
在这里插入图片描述

当设计拥塞控制算法时,一定要考虑实际而不是理论分析,因为没有万金油,在自然生长出来的系统中,不存在最理想的算法,这解释了为什么 BBR 有时还劣化了性能。

在一个自然生长出来的网络中,所有的路由都需要实时计算,而不是仅仅遵循最短路径优先,但最短路径优先最简单容易实现,且实时加权计算度量被喷容易颠簸,这成了一个人们(特别是程序员)拥护 SPF 十足的理由,但在事实上将事情变糟糕。

自然生长的广域网受社会工程学和统计,博弈驱动,完全不是技术所能覆盖,路由千万条,哪个最优就不是一个算法能解决的了。

考虑另一方面,数据中心的 CLOS 为什么不能人为拉线构建枢纽,因为数据中心网络本身就不是一个去中心化系统,换句话说数据中心网络多数是一个经理说了算的,即使最大的数据中心网络,也是少数相互认识的经理共同开会决定的,康威定律在起作用,组织架构反应在产出上。只要网络的规模被少数几个经理覆盖,它就一定是被设计规划出来的正则网络,如果 A 往 E 拉一根线,J 和 X 的经理会抗议。

广域网的运营商经理成千上万,这些经理们互不相识,他们本身就构建成了一个去中心化的分布式网络,这是自然生长的基础,否则,协商的结果一定是个对称的结构。

这给了我们启示,虽然 SD-WAN 归一个经理管,但该经理可以假装构建一个去中心 overlay 网络,该网络携带枢纽节点,且 overlay 节点和这些枢纽的连通性以及枢纽本身可通过经理控制中心的计算度量来通断,从而体现 JD(Jingli-Defined)。

这并不意味着数据中心不能仅靠技术优化性能,相反,数据中心只能尽量靠技术,我也从没把数据中心网络看作狭义上的网络,它只是一个综合布线系统,即便在这种系统,也还是会有人情世故。当需要解决多打一(incast)问题时,引入一些个社会手段,看看能不能缓解,虽然早就知道编程的人根本看不上这些。

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

相关文章:

  • Java爬虫获取淘宝商品详情数据的完整指南
  • 基于SpringBoot的餐厅点餐管理系统设计与实现(源码+SQL脚本+LW+部署讲解等)
  • C++:入门详解(关于C与C++基本差别)
  • Lua怎么学?Lua编程实战:从基础语法到高级特性
  • mysql,docker一键创建以及链接报错:Public Key Retrieval is not allowed
  • 2025-03-09 学习记录--C/C++-PTA 练习11-4 字符定位(最后一次找到的字符)
  • 前端 | CORS 跨域问题解决
  • Linux上位机开发实战(开篇)
  • 认识vue2脚手架
  • LangChain4j开发RAG入门示例
  • Unity Dots从入门到精通之 Prefab引用 转 实体引用
  • QT:TCP示例
  • linux查看定时任务与设置定时任务
  • C#的判断语句总结
  • C++面试题:C++怎么避免头文件循环引用?
  • 游戏引擎学习第146天
  • 学习小程序开发--Day1
  • 学习网络安全需要哪些基础?
  • C++单例进化论
  • P8686 [蓝桥杯 2019 省 A] 修改数组--并查集 or Set--lower_bound()的解法!!!
  • 服装网站建设开题报告/互联网舆情监控系统
  • 网站备案密码是什么样的/西安seo主管
  • 做本地网站应该选什么内容/中国营销策划第一人
  • 常州网站建设公司机构/站长工具怎么关掉
  • 常州免费企业网站建设/网络营销在哪里学比较靠谱
  • 网站页面模板/网址浏览大全