自反馈与流量震荡:从 TCP/IP 路由到交通导航

为什么不能基于流量或时延做路由度量,而不仅仅基于跳数。原因在于这里存在一个自反馈:

  • 路由决策导致流量变化;
  • 时延由流量变化而变化;
  • 流量时延影响路由决策。

当某条链路流量减少时,路由协议会将其度量调低,这便吸引更多流量,导致该链路再次拥塞,从而引发持续震荡。特别是:

  • 如果感知和更新的时间尺度短于流量变化的时间尺度,路由协议会对短暂的流量波动做出过度反应,加剧震荡;
  • 如果感知和更新的时间尺度大于流量变化的时间尺度,路由协议将使用过期信息做路由决策,导致路由与实际状态不一致,影响路由稳定性。

因此,一般而言路由决策都会选择相对稳定和独立的度量,比如跳数,然后辅助以流量工程(MPLS-TE,SR-TE,SDN 等)来保证服务质量。这里的核心是,流量引导必须独立于路由协议本身,这是摆脱自反馈的唯一途径,从而有效避免流量颠簸。

以上的道理在做计算机网络的圈子里是人皆知,但延伸到交通网络却不能举一反三了。

河南穷游(关于去程,参考 https://blog.csdn.net/dog250/article/details/145357711),从洛阳出发返回上海,经停亳州,导航给出了最佳路径,走宁洛高速,为了避开南京,我手工切换到了盐洛高速,然而大约上午 10 点,导航 “发现了更好路径,节省 20 分钟”,询问是否切换。总之,导航死活都要让我走宁洛,但我死活坚持走盐洛。果不其然,盐洛一路畅通,到了下午时,宁洛南京附近开始由黄色变声深红。

宁洛,路径最短,大众常选,盐洛,稍远,如何决策。上午 10 点钟,宁洛南京附近持续绿色畅通,如此相比盐洛而言肯定快 20 分钟左右,但这只是 “此时” 的状态,当我下午到达南京附近时,这个 “此时状态” 显然是一个滞后好几个小时的 “过时” 信息,过时信息怎么能做路由决策呢?

如果按照长程依赖的统计特征做流量工程,这个导航决策就非常容易了。如果根据长期信息做统计,识别到 “南京附近逢下午必堵” 这个模式,导航就不会建议我切换到宁洛了,因为它显然根据历史信息 “预测” 到了未来的拥堵。

但这个根据统计信息的预测功能几乎没人做,不光导航产品没有,TCP/IP 拥塞控制领域也没人做。原因可能跟理工背景从业者受到的训练方式有关,执着于实时和精确,而不是偏好历史和统计,难以接受概率和随机。

总有人赞同不合理的设计,因为只有不合理的设计时,大家就习惯了不合理。我老婆争论说她很喜欢这个建议更好路径的功能,觉得很有用。我认为大多数人离了导航回不了家并非夸大其辞,大多数人是看不懂地图的,这意味着他们没有能力独立于流量做路由决策,只能看别人怎么走自己跟随,他们没有能力决策,因此需要某种指示,这是社会分工的自然结果,没什么不好,但这显然对提供指示的导航提出了更好的要求。

导航的问题在于,它没有摆脱自反馈,因此它制造了拥堵(它把相同的状态反馈给所有客户端,进而造成流量聚集)。我问我老婆,如果现在只有一个机会切换到宁洛,后面切不回来了,如何,前面拐还是不拐,相信实时的导航还是相信没事就看地图看路况的我。到了宿州段,看到长三角牌的车纷纷右上匝道拐入 G3 京台高速,我就暗笑,这波流量正是造成下午南京附近拥堵的流量,昨天这样,今天如此,明后天依旧。

但 KPI,绩效考核难崩,稳定好用的导航一定是简单的,几乎所有玩花活儿的功能都是为了做而做,把事情弄巧成拙后再用另一个类似的花活儿来修正,于是就是两个功能,加之对实时和精确的执着以及对统计复用和长程依赖的偏见,总之,系统和产品永远难以稳定。

我曾经建议用每天特定时间段改一套参数或切一个算法替换修改拥塞控制算法代码的建议被否决,经理的理由是 “状态需要实时计算”,“历史信息是过时的”,照这么说,所有信息都是历史信息,根本就不存在实时信息,然而事实是,人们的行为并非完全随机的,在长时间尺度看,完全是可预测的,正如每个人的生活都很规律一样,所有人行为的合集也很规律,流量也是,不管是交通流量,还是 TCP/IP 网络流量。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/69828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jtti:centos主机如何搭建lnmp环境

在 CentOS 主机上搭建 LNMP(Linux Nginx MySQL/MariaDB PHP)环境是构建高性能 Web 服务器的常见选择。以下是搭建 LNMP 环境的详细步骤: 步骤 1: 更新系统 首先,更新系统的包列表和安装的包,以确保你的系统是最新的: sudo y…

如果需要保护多个域名怎么办?

随着企业和个人在网上的存在越来越重要,管理和保护多个域名变得尤为关键,那么如果需要保护这些域名,应该采取什么样的措施呢? 许多企业会选择注册与其品牌相关的不同后缀,或者与其产品、服务相关的域名。这不仅可以防…

从Sora到有言:3D视频生成技术的突破与应用

近年来,AIGC领域飞速发展,这个词也越来越高频地出现在了大家的生活中。AIGC 能完成的任务也越来越多,大模型的能力飞速增长 —— 从Deepseek生成文字,到StableDiffusion生成图像,再到Sora可以生成视频。 而现在&#x…

Apollo 9.0 控制算法 -- lon based pid controller

文章目录 1. 纵向控制算法1.1 算法结构1.1.1 外环:位置环1.1.2 内环:速度环 1.2 参数整定 2. 代码解析2.1 控制器初始化 LonController::Init()2.1.1 PID控制参数和标定表参数加载2.1.2 PID控制器初始化2.1.3 超前/滞后控制器初始化2.1.4 俯仰角滤波器初…

【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter12-BOM

十二、BOM 虽然 ECMAScript 把浏览器对象模型(BOM,Browser Object Model)描述为 JavaScript 的核心,但实际上 BOM 是使用 JavaScript 开发 Web 应用程序的核心。BOM 提供了与网页无关的浏览器功能对象。 HTML5 规范中有一部分涵盖…

Qt信号槽调用出错:Qt: Dead lock detected while activating a BlockingQueuedConnection

目录 1.现象和原因分析 2. 总结 1.现象和原因分析 就在最近的开发过程中,程序一运行在控制台就打印: Qt: Dead lock detected while activating a BlockingQueuedConnection: 咋一看,怎么出现死锁了呢?仔细看下…

Jenkins项目CICD流程

Jenkins项目流程:1.配置git环境 git config --...2.把前后端的目录初始化位本地工作目录 #git init3.提交到本地git #git add ./ git commit -m "" git tag v14.然后提交到远程git(通过,用户,群组,项目,管理项目)git remote add origin http://...git push -…

Springboot_实战

项目开发 lombok使用 自动为实体类提供get、set、toString方法 引入依赖 实体类上添加注解 统一响应结果 注意要写get、set方法;下面是错误的,因此要加上Data注解 一个注册的接口的示例 Controller层 Service层 Mapper层 参数校验 但是同样存在一…

C++自研游戏引擎-碰撞检测组件-八叉树AABB检测算法实现

八叉树碰撞检测是一种在三维空间中高效处理物体碰撞检测的算法,其原理可以类比为一个管理三维空间物体的智能系统。这个示例包含两个部分:八叉树部分用于宏观检测,AABB用于微观检测。AABB可以更换为均值或节点检测来提高检测精度。 八叉树的…

Spring框架中都用到了哪些设计模式?

大家好,我是锋哥。今天分享关于【Spring框架中都用到了哪些设计模式?】面试题。希望对大家有帮助; Spring框架中都用到了哪些设计模式? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring框架中使用了大量的设计模…

Day1 25/2/14 FRI

【一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解(马士兵)】https://www.bilibili.com/video/BV13g41157hK?p3&v…

软考高级《系统架构设计师》知识点(一)

计算机硬件 校验码 码距:就单个编码A:00而言,其码距为1,因为其只需要改变一位就变成另一个编码。在两个编码中,从A码到B码转换所需要改变的位数称为码距,如A:00要转换为B:11,码距为2。一般来说,…

DeepSeek免费部署到WPS或Office

部署到WPS - 通过OfficeAI插件接入: - 准备工作:安装最新版本的WPS Office软件;访问DeepSeek官网,点击右上角的“API开放平台”,登录账号(若无账号需先注册),登录成功后,…

基于vue3实现的课堂点名程序

设计思路 采用vue3实现的课堂点名程序&#xff0c;模拟课堂座位布局&#xff0c;点击开始点名按钮后&#xff0c;一朵鲜花在座位间传递&#xff0c;直到点击结束点名按钮&#xff0c;鲜花停留的座位被点名。 课堂点名 座位组件 seat.vue <script setup>//组合式APIimpo…

C语言的物联网

C语言在物联网中的应用 物联网&#xff08;Internet of Things&#xff0c;IoT&#xff09;是一个通过网络将各种物理设备连接起来的系统&#xff0c;使其能够收集和交换数据。随着技术的进步&#xff0c;物联网已经走入了我们的日常生活&#xff0c;并在智能家居、智能城市、…

数论补充 之 前后缀分解问题

文章目录 [0,i-1] 和 [i1,n-1] 共同作用3334,数组的最大因子得分238.除自身以外数组的乘积 对于前缀分解问题&#xff0c;我愿把它分为几个大问题&#xff1a;[0,i] 或 [i,n-1] 或 [l,r],或 [0,i-1] 和 [i1,n-1] 共同作用的问题 一般都是求解区间的和&#xff0c;乘积&#xff…

Winform禁止高分辨下缩放布局成功方法

Windows自动缩放布局会导致窗体上的按钮和文本挤在一起根本看不清楚。 那么该如何解决呢&#xff1f; 具体操作步骤如下&#xff1a; 1、在项目属性上切换到【安全性】菜单&#xff0c;勾选【启用ClickOnce安全设置】&#xff0c;然后立刻取消勾选&#xff1b; 为了生成app.…

matlab齿轮传动

实现齿轮啮合分析&#xff0c;齿轮传动非线性分析&#xff0c;对扭转振动方程组进行求解&#xff0c;可得到齿轮扭转角随时间变化相关参数 列表 齿轮传动非线性分析&#xff0c;对扭转振动方程组进行求解&#xff0c;可得到齿轮扭转角随时间变化相关参数/niu_gou_yuan_Rg.m , …

分享 UniApp 中超好看的卡片阴影样式

在 UniApp 开发中&#xff0c;页面的视觉效果对于提升用户体验至关重要。一个设计精美的卡片样式往往能让页面更加美观和吸引人&#xff0c;而阴影效果则是为卡片增添立体感和层次感的关键元素。今天&#xff0c;我就来和大家分享一个在 UniApp 中实现的卡片阴影样式&#xff0…

教程 | 从零部署到业务融合:DeepSeek R1 私有化部署实战指南

文章目录 1. 什么是 DeepSeek R1&#xff1f;a. 主要介绍a. 版本区别 2. 部署资源要求a. 硬件资源要求 3. 本地安装DeepSeek-R1a. 为什么选择本地部署&#xff1f;b. 部署工具对比c. 演示环境配置d. Ollama安装流程 4. 可视化工具a. 工具对比b. Open-WebUI部署 5. AI API应用a.…