1. 低延迟网络概述
大家好,我是你们这门课的老朋友。今天咱们聊聊低延迟网络到底是个什么东西。
说实话,我入行那会儿,大家对网络延迟还没那么敏感。那时候跑个网页,等个两三秒,大家觉得挺正常。但现在不一样了。你想想看,自动驾驶的车子,一毫秒的延迟可能就是生与死的区别。高频交易里,谁的网络快谁就能赚钱,慢一毫秒可能就亏几百万。云游戏也是,你操作一下,画面半天才动,这游戏还怎么玩?
所以,低延迟网络,说白了就是让数据从A点到B点的时间尽可能短。嗯,就这么简单。但实现起来,可没那么容易。
1.1 什么是低延迟网络?
低延迟网络,不是指带宽有多大,而是指数据包从发送到接收的时间有多短。我见过不少刚入行的朋友,一上来就盯着带宽看,觉得带宽越大网络越快。其实这是个误区。
举个例子。你开车从北京到天津,高速公路很宽(带宽大),但路上堵车(延迟高),你照样到得慢。低延迟网络追求的是路况通畅,而不是路有多宽。
我个人习惯把低延迟网络比作快递服务。带宽是卡车的载货量,延迟是快递员从发货到收货的时间。你想想看,你寄个重要文件,是希望卡车装得多,还是希望快递员跑得快?
核心要点:低延迟网络关注的是数据包的单程传输时间,而不是单位时间内能传多少数据。这是很多初学者容易搞混的地方。
1.2 关键指标
衡量低延迟网络,主要看三个指标:RTT、抖动、吞吐量。这三个指标,我一个个说。
1.2.1 RTT(往返时间)
RTT,全称Round-Trip Time,就是数据包从发送端到接收端再返回发送端的总时间。这是最直观的延迟指标。
我在项目中遇到过一件事。有一次做金融交易系统优化,客户说他们的交易延迟太高。我一看,RTT是50毫秒。当时我就说,这不行,高频交易里RTT超过10微秒都算慢的。后来我们通过硬件加速,把RTT降到了5微秒以内。客户直接惊呆了。
RTT的组成包括:
- 传播延迟:光在光纤里跑的时间,这个物理定律没法改
- 处理延迟:路由器、交换机处理数据包的时间
- 排队延迟:数据包在缓冲区排队的时间
- 传输延迟:把数据包放到链路上的时间
避坑指南:我曾经以为RTT越低越好,后来发现不是这么回事。有些场景下,RTT稳定比RTT低更重要。比如自动驾驶,你宁愿延迟稳定在10毫秒,也不希望它有时候1毫秒有时候100毫秒。这一点,后面讲抖动的时候会细说。
1.2.2 抖动(Jitter)
抖动,就是延迟的变化量。说白了,就是RTT的方差。
为什么抖动重要?你想想看,你在玩云游戏,如果网络延迟一直稳定在20毫秒,你操作起来感觉还行。但如果延迟一会儿10毫秒,一会儿100毫秒,画面就会一卡一卡的,游戏体验极差。
我做过一个自动驾驶的项目,当时发现车辆的控制指令有时候会延迟到达。排查了半天,发现是网络抖动导致的。车辆的控制系统需要稳定的数据流,抖动一大,控制算法就乱了。后来我们用了专门的抖动消除技术,才把问题解决。
抖动的来源主要有:
- 网络拥塞:数据包排队时间变化
- 路由变化:数据包走的路径不一样
- 硬件处理时间变化:不同数据包的处理时间不同
1.2.3 吞吐量
吞吐量,就是单位时间内能传输的数据量。这个指标大家比较熟悉,但我要提醒一点:在低延迟网络中,吞吐量和延迟往往是矛盾的。
为什么?因为要提高吞吐量,通常需要更大的缓冲区,让数据包排队。但排队就会增加延迟。所以,低延迟网络的设计,很多时候是在吞吐量和延迟之间做权衡。
我记得有一次做数据中心网络优化,客户要求同时满足高吞吐和低延迟。这其实很难。我们最后采用了专门的硬件加速方案,用FPGA做数据包处理,才勉强达到要求。
| 指标 | 定义 | 典型值 | 优化方向 |
|---|---|---|---|
| RTT | 数据包往返时间 | 1-100毫秒(互联网) 1-10微秒(数据中心) |
减少传播距离、优化处理流程 |
| 抖动 | 延迟的变化量 | 小于RTT的10% | 减少排队、固定路由路径 |
| 吞吐量 | 单位时间传输的数据量 | 1-100 Gbps(数据中心) | 增加带宽、优化协议 |
1.3 应用场景
低延迟网络不是万能的,但在某些场景下,它就是命根子。我挑三个典型的说说。
1.3.1 高频交易
高频交易,说白了就是比谁快。谁的网络延迟低,谁就能先拿到市场数据,先下单,先赚钱。
我有个朋友在华尔街做高频交易。他们公司为了把延迟降低1微秒,愿意花几百万美元。你想想看,1微秒是什么概念?就是百万分之一秒。他们甚至把服务器放在交易所的机房里,用光纤直连,就是为了省那几米的距离。
高频交易对网络的要求:
- RTT:小于10微秒
- 抖动:小于1微秒
- 吞吐量:不需要特别高,但数据包要小、要快
注意:高频交易对时间同步要求极高。我曾经见过一个案例,因为时间不同步,导致交易数据顺序错乱,直接亏了几百万。所以,PTP(精确时间协议)在高频交易中是标配。
1.3.2 自动驾驶
自动驾驶的车子,需要实时感知周围环境,做出决策,然后控制车辆。这整个过程,延迟必须控制在毫秒级。
我记得有一次测试自动驾驶系统,发现车辆在高速行驶时,刹车指令延迟了50毫秒。结果车子多跑了1米多,差点撞上前车。从那以后,我对自动驾驶的网络延迟要求就特别严格。
自动驾驶对网络的要求:
- RTT:小于10毫秒
- 抖动:小于2毫秒
- 可靠性:99.999%以上
1.3.3 云游戏
云游戏,就是把游戏渲染放在云端,玩家通过网络操作。这要求网络延迟足够低,否则玩家操作起来会有明显的卡顿感。
我做过一个云游戏的项目,当时发现玩家在玩射击游戏时,开火到画面显示命中,中间有100多毫秒的延迟。玩家反馈说,感觉枪不听使唤。后来我们优化了网络,把延迟降到了30毫秒以内,玩家体验才好了很多。
云游戏对网络的要求:
- RTT:小于30毫秒
- 抖动:小于5毫秒
- 吞吐量:根据画质不同,10-50 Mbps
1.4 知识体系总览
说了这么多,我画个图帮你理一理思路。这张图展示了低延迟网络的核心知识体系。
这张图把低延迟网络的核心内容串起来了。中心是低延迟网络,三个关键指标是RTT、抖动、吞吐量,每个指标下面又有具体的子项。最下面是三个典型的应用场景。你把这个图记在脑子里,后面学起来就轻松多了。
我的建议:刚开始学低延迟网络,不要急着看具体技术。先把这三个指标搞明白,知道它们是什么、怎么测、怎么优化。后面讲硬件加速的时候,你会发现很多技术都是在优化这三个指标。
好了,这一章就到这里。低延迟网络的概念、指标、应用场景,我都讲清楚了。下一章,我们会深入聊聊网络延迟的测量方法,包括怎么用软件和硬件来精确测量RTT和抖动。到时候我会分享一些我在项目中踩过的坑,保证让你少走弯路。
公众号:蓝海资料掘金营,微信deep3321