BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

GitHub新负载均衡系统的设计历程

| 作者 Sergio De Simone 关注 6 他的粉丝 ,译者 周元昊 关注 0 他的粉丝 发布于 2016年10月9日. 估计阅读时间: 3 分钟 | QCon北京2018全面起航:开启与Netflix、微软、ThoughtWorks等公司的技术创新之路!

亲爱的读者:我们最近添加了一些个人消息定制功能,您只需选择感兴趣的技术主题,即可获取重要资讯的邮件和网页通知

在过去的一年中,GitHub一直在开发一个新的负载均衡系统——GitHub Load Balancer(GLB)。这个系统想要通过扩展使用普通的硬件来应对每天数十亿的连接。GitHub工程师Joe Williams和Theo Julienne讲解了GLB的设计历程。

GitHub根本的设计目标之一是希望能“扩展”IP,即,将单个公网IP的数据流量通过多个等价的连接分发到不同的目标机器。这通常是通过等价多路径路由(ECMP)来实现的,从而扩大带宽。然而,ECMP在各个ECMP节点发生变化,比如在节点失效或因维护需求而被移除时,表现不是很好。对GitHub来说这是使用ECMP最大的缺陷。

因此,GitHub工程师考虑使用L4/L7分离策略,将负载均衡节点分为两层,L4和L7,OSI层据此来提供各个节点分发请求时需要的信息。L4使用来源及目标IP地址和TCP端口号进行路由,而L7使用应用层信息来路由,这通常使用HTTP协议。在L4/L7分离的设计中,L4节点通过ECMP拆分流量到L7节点,我们称前者为“director”节点,后者为“proxy”节点。Williams和Julienne解释到,通常ipvs/LVS被应用于L4节点,而L7节点使用haproxy或类似工具。

L4/L7分离带来最大的好处是,只要简单地将L7节点从服务连接的节点池中移除,并服务到节点上现有连接全部结束,就可以在不影响正常运行的情况下移除一个L7节点。但另一方面,在L4节点失效或被移除时会导致访问中断。由于git无法进行重试或恢复已断开的连接,解决这个问题对GitHub来说尤为关键。

GitHub通过使用Rendezvous哈希算法解决了这个最终问题,这个算法使director节点间协定应该由哪个proxy节点来处理某个请求。GLB结合使用Rendezvous哈希算法与服务器直接返回模式,后者使返回报文直接从proxy节点返回给客户端,从而绕过了原来分配请求到proxy的director节点。在GLB中,使用Rendezvous哈希的基本思想是要将请求转发表在各个director节点间共享并保持同步。这大体上能保证即使一个director节点失效或被移除,其他director节点可以代替并将现存连接分配到正确的proxy节点。

最后Williams和Julienne谈到他们计划如何平滑地发布这个新负载均衡系统,并预计在近期开源该项目。

查看英文原文:How GitHub Designed its New Load Balancer


感谢宋秉金对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT