四层负载均衡分析:GitHub GLB
内容提要
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需要保存连接状态,可能导致连接中断。