刚刚,Google再次出手针对数据中心的传输协议进行了大幅优化,为linux TCP协议提交了补丁和相关的模块。在linux 6.2 开始支持基于TCP 预均衡负载机制PLB。关于数据中心的TCP传输,big TCP,homa等讨论很多。笔者前几天发的一篇关于TCP是否被替代的新闻,homa作为数据中心的的传输协议的可选方案,已经做了很多的测试,结果也比较乐观。今天,google的PLB不仅仅对Google的云服务,也可能对很多其他云服务商是一个福音。

Homa还是TCP-Web3.0时代数据中心部署中传输协议面临的新挑战简单分享

我们知道,传输机制中的主要问题基本上都是集中于针对网络拥塞的处理方面。无论是TCP或者Homa,都是考虑在发送方和接收方方面进行如何优化。但是,Google却另辟蹊径,发布了一种更聪明的传输处理机制支持DCTCP(RFC8257)。具体的算法如下(RFC8257-3):

3. DCTCP Algorithm There are three components involved in the DCTCP algorithm: o The switches (or other intermediate devices in the network) detect congestion and set the Congestion Encountered (CE) codepoint in the IP header. o The receiver echoes the congestion information back to the sender, using the ECN-Echo (ECE) flag in the TCP header. o The sender computes a congestion estimate and reacts by reducing the TCP congestion window (cwnd) accordingly.

一般来说,均衡负载大部分都是基于应用层的负载处理,处理难度相对比较低,目前市场上也有非常多的成熟的产品和解决方案。另外,如果路由器或者其他网元传输设备检测到拥塞的话,路由器则可能将拥塞的数据直接丢弃,然后让发送端再重新传输。现在,Google对TCP传输做了一个小手术,也算是非常底层的优化。对于Google的新算法,它是一种具有拥塞感知的机制,使用了TCP的显式拥塞通知 (ECN)。如果发送数据时发生数据传输的拥塞,PLB机制检测到了拥塞,ECN返回后。

一般情况下,如果我们获知传输路径有拥塞的话,我们不可能修改地址或者端口,因为那样会导致传输连接断开。在PLB的机制中,PLB机制则会触发了IPv6网络的flow label field(流标签)-RFC3697,flow label field会触发switch支持的ECMP/WCMP路由来修改发送数据包路由路径。这样可以预测出传输路径堵塞,然后检测出堵塞以后,修改传输路径,最终降低传输时的丢包,时延等问题,也就是所谓的TCP PLB处理方式。linux-6.2 内核默认不支持开启tcp_plb_enabled。用户可以使用sysctl 命令开启。

Mubashir Adnan Qureshi 和其他研究人员发表了关于此技术的研究成果,建议大家阅读大神的关于PLB的论文:

PLB: Congestion Signals are Simple and Effective for Network Load Balancing

Mubashir Adnan Qureshi 也同时提交了关于TCP PLB的补丁文件,linux-6.2 将已将此部分代码合并。

google 跨平台上网工具(Google大杀器TCPProtectiveLoad)(1)

根据此论文的研究成果,开启PLB和关闭PLB的情况下,其丢包率和时延等指标参数都有一定的优化和提示。关于其他的传输指标的测试结果,建议读者参考链接资源做进一步学习。

google 跨平台上网工具(Google大杀器TCPProtectiveLoad)(2)

google 跨平台上网工具(Google大杀器TCPProtectiveLoad)(3)

这一技术不仅仅对Google有用,也对其他的云服务提供商有很大的帮助。目前仅支持IPv6, 还不支持IPv4。不过如果用户要测试其功能的话,用户可以使用Google 的云平台或者自己搭建测试平台来验证。虽然目前IPv6部署不是非常普及,可能将来使用IPv6普及以后,PLB在数据中心的TCP传输中的使用可能更加普遍。

参考资料:

https://www.rfc-editor.org/rfc/rfc3697

https://dl.acm.org/doi/pdf/10.1145/3544216.3544226

https://www.rfc-editor.org/rfc/rfc8257

https://www.tetcos.com/pdf/v13/Experiments/Understand-the-working-of-TCP-BIC.pdf

https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/?id=957ed5e7129f2ce85dd76e4cdce749388295467d

https://www.kernel.org/doc/html/latest/networking/dctcp.html

https://dl.acm.org/doi/10.1145/1851275.1851192

Mubashir Adnan Qureshi, Yuchung Cheng等:PLB: Congestion Signals are Simple and Effective for Network Load Balancing

,