xDS 控制面实战 (四):Delta xDS 拯救网络带宽的终极魔法
xDS 控制面实战 (四):Delta xDS 拯救网络带宽的终极魔法
跟着专栏走到这里的你,想必已经对我们的“外卖员” (Envoy) 和“控制面板” (go-control-plane) 之间的互动逻辑有画面感了。
如果你还记得第二篇文章,当时我们讲 Simple Cache 的时候说到,它采用的是 SotW (State of the World) 模式——也就是说,无论世界发生了什么细微的改变,控制面都是直接发一个“全新完整的世界”塞给 Envoy。
今天,我们要来聊聊这个让网络工程师血压飙升的模式,以及它的救星:Delta xDS(增量发现服务)。
1. 前情提要:“一言不合就重发全套”的痛苦
试想一下,你在北京有 100 个经常去取餐的餐厅。控制面给了你一本厚达几十页的《北京热门餐厅指南1.0》。
第二天,只有 1 家 新餐厅开业了,另外 99 家都没有变化。 这时候 SotW 模式的做法是: 废纸篓里扔掉你手里的《1.0》,控制面重新印刷了一本包含 100 家老餐厅+ 1 家新餐厅的厚厚《2.0 指南》,花了老大的劲塞给了你。
你会想骂娘吗?会的。“明明只加了一家餐厅,你难道不能就递给我一张小贴纸,然后我把贴纸粘在书本最后一页不就可以了吗?何苦浪费这么大的网络带宽传那么大的文件给我!”
在超级集群里,哪怕一个节点掉线了导致 Endpoint 列表少了一项,服务器也会全量下发这几十兆的配置文件。当成千上万的 Envoy 都这样重发时,别说控制面 CPU 计算了,光是交换机的网络带宽都有被直接打满的危险。
2. 救星驾到:什么是 Delta xDS?
Delta xDS 就是那张神奇的“小贴纸”(或者叫修改声明)。
在 Delta 模式下,沟通的方式完全改变了:
- Envoy:“我已经有的,你别发了。” 外卖员打了个电话跟控制面说:“我这手头有 A、B、C 这几家餐厅的信息,都挺好的。”
- 控制面只算差异(Diff)。 控制面发现,“哎?现在外面应该是 A、B、C 再加一个 D 餐厅呀,而 A 餐厅倒闭了(移除了)”。
- 只穿送增量更新与指令。
控制面不再重发整套名录,它只传送两个极小的数据包:
- 增加请求:新增 D 餐厅信息。
- 删除请求:移除 A 餐厅。
这就是 Delta (增量) 的意思,网络请求里只有:更新的、新增的、移除的资源集合。
3. Delta xDS 的核心好处
毫无疑问,Delta xDS 的最大优势显而易见:
- 极度省带宽:从几十 MB 变成几十 KB 的传输,再也不怕集群里节点频繁上下线引发的网络风暴了。
- 让客户端非常轻松:Envoy 代理以前收到全量文件时,需要遍历这海量的数据项,去翻找并重构内部路由表,很费 CPU;有了 Delta, Envoy 拿到“一句话简报”,只做指定位置的替换就能轻松完成更新。
- 按需加载 (On-Demand):因为能够增量沟通了,Envoy 甚至不用一开始拉全量,可以实现真正用到哪个域名的解析,再找控制面仅仅拉那一条记录。这是 Istio 后来一直力推的终极瘦身绝招!
4. 为什么大家不一上来全用 Delta 呢?
既然这么棒,为什么有些小项目还要用全套下发呢? 其实是因为这东西太难写了! 写 Delta 控制面的逻辑极其折磨人,服务器必须精确地知道“每一个 Envoy 目前本地确切拥有哪些资源”,从而计算出正确无误的 Diff 补丁包。万一中间控制面和数据面状态不同步跑飞了(你以为他删了,他其实没删),就非常容易造成“脑裂”,也就是网络路由配置丢失的灾难。
因此,除非是采用刚才提到的 Linear Cache 这类有着原生时间戳支持,或者本身架构就经过严丝合缝设计的大厂核心控制器,对于初学开发者,一开始去写增量逻辑是非常容易摔跟头的。
结语
恭喜你!一连四篇,从核心组件到缓存模式,再到最终如何降低网络开销的增量黑科技,你这个新手算是把 Service Mesh 工程师整天挂在嘴里的 xDS 核心概念(Server,Cache,SotW,Delta)一口气彻底搞懂啦。
这就是我们系列专栏的开篇介绍部分,赶紧去你的项目里试试调用看看吧,如果有新的体会,咱们下个篇章,实战再见!
<hr />
<section>
<h2>xDS开发实战专栏</h2>
<p>当前进度:第 4 篇 / 共 4 篇</p>
<p><a href="/series/#series-xds-dev">查看本专栏目录</a></p>
<ul>
<li><a href="/network/xds/xds-go-control-plane/">第 1 篇:xDS 控制面实战 (一):新手也能看懂的 go-control-plane 架构</a></li>
<li><a href="/network/xds/xds-simple-cache/">第 2 篇:xDS 控制面实战 (二):Simple Cache 是如何“偷懒”又如何“爆掉”的?</a></li>
<li><a href="/network/xds/xds-linear-cache/">第 3 篇:xDS 控制面实战 (三):Linear Cache 大揭秘,如何省下 90% 的内存?</a></li>
<li><strong>第 4 篇(当前):xDS 控制面实战 (四):Delta xDS 拯救网络带宽的终极魔法</strong></li>
</ul>
<p>
上一篇:<a href="/network/xds/xds-linear-cache/">xDS 控制面实战 (三):Linear Cache 大揭秘,如何省下 90% 的内存?</a><br />
</p>
</section>