提升网络传输性能的误区

客机坠毁始终是种灾难,理论上至少存在 100 种不让客机坠毁的方案,其中之一是携带一个巨大的降落伞(合计展开面积 6000 平米),该方案涉及包括材料学,力学等,用最轻的材料做展开面积最大的降落伞,当客机要坠毁时,展开此降落伞,考虑到展开效率,降落伞还可以设计成分层冗余式。

这类方案始终没有实施的原因也不难理解,从成本收益考虑,空难概率低,万一发生,保险赔付遇难者及其名牌西装皮鞋等贵重行李的成本远低于每架飞机都携带一个巨型降落伞的成本。

问题是,空难概率高到什么程度才能让这类方案变得可行呢?假设空难概率提高 4 倍,再兜售这类方案会不会有市场呢?

答案是,如果空难概率提高 4 倍,工程师们会花大精力寻找空难如此容易发生的根因,并改进飞机的安全性能,让空难概率降低到保险赔付可以容忍的程度。换句话说,类似超大降落伞这类超酷的的方案在任何情况下都不会有市场。

让灾难尽量不发生,而不是引入复杂机制减灭灾难的影响。

在工程上,每引入一种新机制自然要考虑这种机制失效后怎么办的兜底,这是个递归的过程,系统的复杂度会指数级上升,而复杂度和故障率正相关。因此,要把到复杂度简化并用在 “正常路径” 而不是为 “异常路径” 增加复杂度,要控制进入异常路径的概率,使其低到一定程度。当异常路径占比超过一定比例时,它们的开销将导致系统是不划算的。

tcp/ip 在 1980 年代遭遇网络拥塞崩溃时,仅仅引入 aimd 就解决了问题。aimd 的核心不是性能,更不是对丢包的善后,而是能让网络收敛到一个可用且稳定的状态,这典型地在处理 “正常路径” 。loss-based cc 仅将丢包作为触发行为的信号,而重传则是 tcp 的语义,更与 aimd 无关。而 gbn,sack,pfc 都是 “异常路径”。

后面的事花开两朵,各表一枝,aimd 引领的拥塞控制以及重传等算法在广域网和数据中心都被玩开了花,结果也是被爆菊,散落一地,可谓菊花残,满地伤,花落人断肠。

广域网的事是彻底端到端的,他们将 aiad,miad 和 fec 重传说成优化,把拥塞控制的目的误解为性能,能偷偷多发一个报文就多发一个。没人说得清 bbr 到底哪里有问题却都能改上一改。

有趣的是,广域网的手段在数据中心反而行不通,因为业务 a 的人这么做了,业务 b,业务 c 的人会一起屌他。广域网是黑暗森林,数据中心玩的是均势。

但数据中心玩的更花,因为他们能动网卡和交换机。网卡实现 sack 太复杂,交换机 pfc 自然接力,但为什么看不上 gbn,因为 gbn 重传效率太低。看到了吧,他们把丢包当成了司空见惯,自然要花大力气去做丢包重传咯。丢包重传是典型 “异常路径”,如果丢包很少发生,gbn 当然就足够,简单才性能高。sack,pfc,int-based cc 这些就是客机上的降落伞,而 gbn 是保险公司。

你不去思考如何减少丢包,偏偏要在丢包了如何感知和重传上炫技。

顺着 “正常路径” 继续思考丢包怎么减少。丢包无非两类,误码丢包,溢出丢包(如 td,red),减少误码就提高硬件可靠性,减少溢出就控制突发。是不是很合理,但这里很容易进入另一个犄角旮旯,提高硬件可靠性就要保证 100% 可靠,减少溢出就要严禁溢出,于是大量的复杂机制被引入以保证不丢包,pfc 就合理了,看,绕了一圈又回到了 pfc,瞧, pfc 就是万金油。 其实这是从一个死胡同倒回,经过了出口却错过,进入另一个死胡同。

“提高” 和 “减少” 这些词暗含一个 “阈值”,即提高和减少到什么程度就刚刚够,再多做就拐回去了。比方说把溢出丢包的概率减少了 0.0005 以下就够了,为此之下的小概率事件做任何事都不划算,但它要真发生了,“保险公司赔钱” 就是了。引入复杂机制做小概率事件和引入复杂机制做 “异常路径” 都没意识到少就是多,过犹不及。

按正确思路,如何 “提高” 和 “减少” 到阈值简直显而易见。简单点说,用更贵的名牌设备,拉专线就 ok 了。这一点上无论广域网还是数据中心的方案就殊途同归了。

如果摩尔定律依然如故,核心带宽依然可不断翻番,就要不断扩展带宽。在带宽一定的约束下,最直接简单的优化方案是将网络划为一条条物理的或虚拟的通道,每类业务流量进入特定通道。

网络切片,infiniband virtual lane 都属此类,但以太网交换机的包分类和 qos 队列不是。前文说过,将数据包映射进通道,基于通道做控制,而不是分类每个数据包,对数据包做控制,显然前者更简单,ib 报头上就有 vl 号,交换机看一眼就好,以太头,ip 头上有啥(目前 roce 也在引入 ib 的良好特性,这一次以太网有希望再次依靠其生态取胜),还指着元组 hash 吗,一个协议头加个字段看一眼就能搞定的事,拿 hash 算法炫技。

至于如何控制突发,pacing 是摩尔定律进展的大势所趋,前面的系列文章已经说过,不再赘述。 sender 测一下 delivery rate 简单算个 pacing,交换机 buffer 能省很多,加上同质流量映射到独立控制的通道,交换机复杂度也降低。更简单了,性能才能更高。

这几天跟一些朋友聊这个话题,大家普遍 concern 的点是 “将数据包映射进通道还是要包分类”,“业务自己又不知道自己是什么流量类型”。再次,参考高速公路的例子,自己是个行人还是自行车,轿车,卡车,自己不清楚吗,只要开进去了,还要分什么类。

为此,一种简单粗暴的方案是在业务部署上线前就确定通道类型,网络侧基于该业务流量类型(比如突发型,短 rpc,大象流)定制通道 qos,开发的时候把通道号硬编码到报文。但显然这很不技术,程序员普遍认可用算法来自适应,而不是靠需求和沟通。这个问题不多说了。

虽然数据中心不是互联网,但它们在性能提升的手段上殊途同归,我说数据中心更像主板的扩展,看一下 pcie 就有好处,看看 pcie 如何做消息交换的,再看看 pcie 的通道如何划分怎么使用的。

要全局看问题,要了解一点历史。否则很容易拿着锤子找钉子。

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

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

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

相关文章

Vscode连接WSL2当中的jupyter

主要解决办法参考自这篇博客 1. 在WSL当中安装jupyter 这个随便找一篇博客即可,比如这篇,也可以根据现有的环境参考其它博客内容 2. 使用jupyter创建一个虚拟环境 首先激活想要添加的虚拟环境后,输入命令安装库: pip install ipykernel …

企业级开源路由系统VyOS-构建和使用

介绍 VyOS是一个基于Linux的企业级路由器操作系统,被许多公司和个人用来驱动物理网络设备,如路由器和防火墙。它有一个统一的命令行界面来管理其所有的网络相关功能(和Juniper Junos操作很像)。VyOS使用Debian GNU/Linux作为其基…

每天学习一个Linux命令之nc

每天学习一个Linux命令之nc 简介 nc(netcat)是一种用于TCP/IP和UDP协议的通信工具。在Linux系统下,nc命令提供了丰富的选项,使其具备了很多强大的功能。本文将详细介绍nc命令的各种选项及其使用方法。 命令选项 以下是nc命令的…

HTTP 常见的状态码以及其适用场景

是什么 HTTP状态码(英语:HTTP Status Code),用以表示网页服务器超文本传输协议响应状态的3位数字代码 它由 RFC 2616规范定义的,并得到 RFC 2518、RFC 2817、RFC 2295、RFC 2774与 RFC 4918等规范扩展 简单来讲&#…

文件输入/输出流(I/O)

文章目录 前言一、文件输入\输出流是什么?二、使用方法 1.FileInputStream与FileOutputStream类2.FileReader与FileWriter类总结 前言 对于文章I/O(输入/输出流的概述),有了下文。这篇文章将具体详细展述如何向磁盘文件中输入数据,或者读取磁…

全面解析十七种数据分析方法,具象数据分析思维

一、介绍 在当今数据驱动的商业环境中,数据分析已经成为了企业获取竞争优势的关键工具。无论是为了优化运营效率,提高客户满意度,还是推动产品创新,企业都需要通过分析大量数据来做出明智的决策。数据分析方法多种多样&#xff0c…

【云开发笔记No.20】中台架构的分类

中台现在成了一个到处都在说的词了,甚至在组织架构中,弄几个万金油,也说有了一个中台支撑部门。一方面是滥用,另一个方面,也说明确实有它的作用和意义。 在云计算和数字化转型日益盛行的今天,中台架构已成…

软件无线电系列——CIC滤波器

本节目录 一、CIC滤波器 1、积分器 2、梳状滤波器 3、CIC滤波器的特性 二、单级CIC和多级CIC滤波器本节内容 一、CIC滤波器 CIC滤波器,英文名称为Cascade Integrator Comb,中文全称为级联积分梳状滤波器,从字面来看就是将积分器与梳状滤波器…

《云原生安全攻防》-- 云原生应用风险分析

为了满足每位朋友的学习需求,并且支持课程的持续更新,本系列课程提供了免费版和付费视频版两种方式来提供课程内容。我们会持续更新课程内容,以确保内容的度和实用性。 在本节课程中,我们将一起探讨云原生应用在新的架构模式下可能…

怎么保证缓存与数据库的最终一致性?

目录 零.读数据的标准操作 一.Cache aside Patten--旁路模式 二.Read/Write Through Pattern--读写穿透 三.Write Back Pattern--写回 四.运用canal监听mysql的binlog实现缓存同步 零.读数据的标准操作 这里想说的是不管哪种模式读操作都是一样的,这是一种统一…

自动化分享----pywinauto

在遇到一些特殊的情况的时候,selenium框架已经无法满足我们的需求了,比如:网站做了自动化屏蔽的时候,会检测到selenium并对操作者进行屏蔽。 经过测试发现pywinauto属于电脑的模拟,当然还有其他的库,不过我…

蓝桥杯刷题-09-三国游戏-贪心⭐⭐⭐

蓝桥杯2023年第十四届省赛真题-三国游戏 小蓝正在玩一款游戏。游戏中魏蜀吴三个国家各自拥有一定数量的士兵X, Y, Z (一开始可以认为都为 0 )。游戏有 n 个可能会发生的事件,每个事件之间相互独立且最多只会发生一次,当第 i 个事件发生时会分别让 X, Y,…

drawio画图编辑图形颜色

drawio画图编辑图形颜色 团队的安全第一图表。将您的存储空间带到我们的在线工具中,或使用桌面应用程序进行本地保存。 1.安装准备 1.1安装平台 多平台 1.2在线使用 浏览器打开网页使用 1.3软件下载 drawio官网github仓库下载 2.在浏览器的网页中使用drawio…

git开源平台测评报告如何编写

编写Git开源平台测评报告时,可以按照以下步骤和结构进行: 一、引言 在引言部分,简要介绍Git开源平台的基本情况和本次测评的目的。可以提及Git在版本控制领域的广泛应用和重要性,以及本次测评旨在评估Git平台的性能、易用性、安…

Mac 每次重启终端都要重新配置mysql环境变量解决办法

1、问题 Mac 每次关闭终端后,mysql环境配置就失效了,需要重新配置mysql环境变量 2、解决方法 在 " ~/.zshrc "文件添加" source ~/.bash_profile "即可 vim ~/.zshrc source ~/.bash_profile 3、验证 退出终端后重新打开终端 mys…

提取COCO数据集中特定的类—vehicle 4类

提取COCO数据集中特定的类—vehicle 4类 1 安装pycocotools2 下载COCO数据集3 提取特定的类别4 多类标签合并 1 安装pycocotools pycocotools github地址 pip install githttps://github.com/philferriere/cocoapi.git#subdirectoryPythonAPI2 下载COCO数据集 COCO官网下载2…

QT C++(QT对象树与内存泄漏管理,QT中文乱码问题)

文章目录 1. QT对象树与内存泄漏2. QT中文乱码 1. QT对象树与内存泄漏 #include "widget.h" #include "ui_widget.h" #include <QLabel>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//通过代码构…

MongoDB聚合运算符:$minN(用于数组)

文章目录 语法使用举例 $minN聚合运算符返回数组中最小的n个值。 语法 { $minN: { n: <expression>, input: <expression> } }参数说明&#xff1a; n&#xff1a;正整数表达式&#xff0c;用于指定返回数组元素的数量。input&#xff1a;可以解析为数组的表达式…

Apache-Pulsar安装操作说明

说明 Pulsar 是一种用于服务器到服务器消息传递的多租户高性能解决方案。 Pulsar 的主要特性如下&#xff1a; 对 Pulsar 实例中的多个集群的本机支持&#xff0c;并跨集群无缝地复制消息。 极低的发布和端到端延迟。 无缝可扩展至超过一百万个主题。 一个简单的客户端 API&…

解决前端精度丢失问题:后端Long类型到前端的处理策略

在Web开发中&#xff0c;我们经常遇到前后端数据类型不匹配的问题&#xff0c;特别是当后端使用大数据类型如Long时&#xff0c;前端由于JavaScript的数字精度限制&#xff0c;可能导致精度丢失。本文将深入探讨这个问题&#xff0c;并提供两种有效的解决方法。 一、问题背景 …