写点什么

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

  • 2016-10-08
  • 本文字数:1014 字

    阅读完需:约 3 分钟

在过去的一年中,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 )关注我们。

2016-10-08 19:006004
用户头像

发布了 41 篇内容, 共 14.7 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

通过 Kasten K10 by Veeam 与 SUSE Rancher 实现云原生应用灾备迁移

Java-fenn

Java

SelectDB 创始人兼 CEO 连林江荣获 OSCAR 开源产业大会「尖峰开源人物 」奖项

SelectDB

数据库 大数据 数据仓库 企业号九月金秋榜 尖峰开源

数据湖系列之二 | 打造无限扩展的云存储系统,元数据存储底座的设计和实践

Baidu AICLOUD

数据湖 元数据

最全Java面试攻略,吃透25个技术栈Offer拿到手软

Java-fenn

Java 编程 程序员 java面试 Java面试题

2021年中国自然语言处理软件及服务市场规模超200亿,市场保持高速增长,竞争格局远未稳定

易观分析

自然语言处理 市场

Kong重构了其事件通知机制

八苦-瞿昙

Event Gateway API Gateway

CAT 认证敏捷团队教练工作坊 (Coaching Agile Teams) | 2023年1月 7 日开课

ShineScrum

敏捷教练 专业教练

MyBatis批量插入几千条数据慎用foreach

Java-fenn

Java

测试驱动开发 (TDD) 在线练功房 | 12 月 17 日开课

ShineScrum

安利一个比Gitbook更好用的国内帮助文档制作平台

Baklib

疫情时代下,线上协同办公成时下热点

Baklib

远程办公 企业 协同办公 在线设计

Chrome操作指南——入门篇(十二)color picker(颜色选择器)

Augus

Chrome开发者工具 9月月更

华为云GaussDB——打造金融行业坚实数据底座,共创数字金融新未来

Java-fenn

Java

《软件开发的201个原则》思考:6. 低可靠性比低效率更糟糕

非晓为骁

个人成长 软件工程能力 高质量

Chrome操作指南——入门篇(十三)element小技巧

Augus

Chrome开发者工具 9月月更

电商黄牛,你被小红书盯上了

小红书技术REDtech

算法 电商风控 黄牛治理

WorkPlus移动办公系统:打造安全专属、统一业务与运营的企业门户

BeeWorks

Baklib|怎样编写内嵌式的帮助文档?

Baklib

产品 产品经理 企业 帮助文档 在线设计

牛客网趋势最热Java八股文,速度赶紧马上打包带走!

Java-fenn

Java 编程 程序员 java面试 Java面试题

Github最新Java面试1658核心讲,助力百人入大厂!

Java-fenn

Java 编程 程序员 java面试 Java面试题

Chrome操作指南——入门篇(十一)network

Augus

Chrome开发者工具 9月月更

J神出品!让 Compose 从此摆脱 ViewModel

Java-fenn

Java java;

TiDB Hackathon 2022丨总奖金池超 35 万!邀你唤醒代码世界的更多可能性!

PingCAP

#TiDB

金九银十必备!这份java面经让你轻松拿下45kOffer

Java-fenn

Java 程序员 面试 java面试 Java面试题

优化帮助中心需要做到以下几点

Baklib

产品 帮助中心 在线设计

我所知道的webpack5那些不太一样的改变

Java-fenn

Java

【9.16-9.23】写作社区精彩技术博文回顾

InfoQ写作社区官方

优质创作周报

当你 git push 时,极狐GitLab上发生了什么?

极狐GitLab

DevOps gitlab SSH gitops 极狐GitLab

前端必读3.0:如何在 Angular 中使用SpreadJS实现导入和导出 Excel 文件

葡萄城技术团队

2022年震荡与加速中前行的新消费

易观分析

疫情 消费

企业选择局域网即时通讯软件的必要性是什么?

BeeWorks

GitHub新负载均衡系统的设计历程_GitHub_Sergio De Simone_InfoQ精选文章