四层负载均衡分析:GitHub GLB

💡 原文中文,约3600字,阅读约需9分钟。
📝

内容提要

GitHub的四层负载均衡(LB)设计被称为GLB,与Cloudflare Unimog类似。GLB的连接保持技术创新性强,不需要同步信息。GLB根据TCP连接五元组hash进行转发决策,不保存状态。GLB的转发表生成满足多个条件,使用Rendezvous hashing实现。GLB使用DSR转发架构,封装使用GUE。GLB基于DPDK实现,支持TCP和ICMP,不支持UDP。非数据面流量可通过Flow Bifurcation分流。GLB运行健康检查程序,失败时交换主备RS。RS上的二次转发使用Netfilter和IPtables实现。

🎯

关键要点

  • GitHub的四层负载均衡设计称为GLB,类似于Cloudflare Unimog。

  • GLB的连接保持技术创新性强,不需要同步信息。

  • GLB根据TCP连接五元组hash进行转发决策,不保存状态。

  • 转发表生成满足多个条件,使用Rendezvous hashing实现。

  • GLB使用DSR转发架构,封装使用GUE。

  • GLB基于DPDK实现,支持TCP和ICMP,不支持UDP。

  • 非数据面流量可通过Flow Bifurcation分流。

  • GLB运行健康检查程序,失败时交换主备RS。

  • RS上的二次转发使用Netfilter和IPtables实现。

延伸问答

GitHub的四层负载均衡GLB有什么创新之处?

GLB的连接保持技术创新性强,不需要同步信息,且不保存状态,基于TCP连接五元组hash进行转发决策。

GLB是如何生成转发表的?

转发表生成依赖于Rendezvous hashing,确保每一行的两个RS不同,且所有RS出现次数大致相同。

GLB支持哪些协议?

GLB支持TCP和ICMP,但不支持UDP。

GLB如何处理非数据面流量?

GLB使用Flow Bifurcation将物理网卡虚拟成多个虚拟网卡,以区分Kernel协议栈和DPDK流量。

GLB的健康检查机制是怎样的?

GLB运行健康检查程序,若发现不健康的RS,会交换主备RS,以确保新连接转发到健康的RS。

GLB与Google Maglev的连接保持方案有什么不同?

GLB不保存状态,转发时SYN包和其他包使用相同逻辑,而Maglev需要保存连接状态,可能导致连接中断。

🏷️

标签

➡️

继续阅读