四层负载均衡分析:美团 MGW
内容提要
本文介绍了美团的MGW架构设计,采用了FullNAT转发模式,通过浮动路由解决连接保持和负载均衡问题。MGW基于DPDK实现,提高性能。文章还提到了减少上下文切换、运维优化和RS的优雅下线等优化措施。FullNAT牺牲了性能,但降低了技术和运维复杂度。
延伸解读
FullNAT 与 DSR 的权衡
文章对比了 FullNAT 和 DSR 两种四层负载均衡转发模式。FullNAT 需要与客户端和 RS 分别建立 TCP 连接,进出流量都经过负载均衡器,因此性能较差,但架构简单,对网络设施要求低。DSR 则回包不经过负载均衡器,性能高,但要求 RS 配置 VIP,且无法做端口转换。美团 MGW 选择 FullNAT,牺牲部分性能以降低技术和运维复杂度。
连接保持与浮动路由
在 FullNAT 模式下,MGW 需要解决 TCP 连接迁移问题。当 MGW 实例故障时,连接需迁移到其他实例,但五元组中的 MGW IP 和端口必须保持不变。MGW 通过为所有实例配置相同的 Local IP(LIP)并使用浮动路由,使每个 MGW 有一个主 LIP,RS 回包时路由器总是将包发给主 LIP 对应的 MGW。这样无需同步 session 状态,只有故障时才迁移主 LIP。
DPDK 与性能优化
MGW 基于 DPDK 实现,在用户态直接与网卡交互,跳过内核协议栈,以提高性能。由于四层负载均衡不需要完整的 TCP 栈,DPDK 非常适合。此外,MGW 采用忙轮询方式,分配专用 CPU 持续轮询网卡,提升吞吐和降低延迟。为减少 session 锁竞争,MGW 为每个 CPU 绑定一个 Local IP,通过网卡 flow director 将数据包定向到对应 CPU,避免共享数据访问。
运维优化与优雅下线
MGW 实现了健康检查,当程序异常时直接给网卡断电,使路由器快速感知并切换流量。新实例上线时,先增量同步 session table 再接收流量。对于 RS 下线,MGW 保持旧连接直到结束,新连接不再发送。此外,MGW 支持基于客户端 IP 的哈希将相同客户端请求发送到相同 RS,并借鉴 Google Maglev 一致性哈希避免 RS 变化时大量重新哈希。
Q&A
美团的MGW架构设计采用了什么转发模式?
美团的MGW架构设计采用了FullNAT转发模式。
FullNAT转发模式的优缺点是什么?
FullNAT的优点包括端口转换和地址转换,但缺点是性能较差,并且RS无法看到客户端真实IP。
MGW如何解决TCP连接的迁移问题?
MGW通过浮动路由解决TCP连接的迁移问题,确保连接的稳定性和一致性。
MGW是如何提高性能的?
MGW基于DPDK实现,跳过内核协议栈,从而提高性能。
MGW的健康检查机制有什么作用?
MGW的健康检查机制可以快速切换到其他MGW实例,确保系统的可靠性。
使用FullNAT对技术和运维复杂度有什么影响?
使用FullNAT降低了技术和运维复杂度,但牺牲了一部分性能。