GitHub将开源内部负载均衡软件
开发 GLB 的初衷是满足 GitHub 的这一要求:每天处理数十亿的 HTTP 连接、Git 连接和 SSH 连接。而如今,这家公司将通过开源来发布 GLB 的组件,到时会透露设计方面的细节。
GitHub 负载均衡系统最初是为了处理 Git 的数十亿日常连接而开发的。GitHub 将发布开源版的 GitHub 负载均衡软件(GLB),这是内部开发的负载均衡系统。
开发 GLB 的初衷是满足 GitHub 的这一要求:每天处理数十亿的 HTTP 连接、Git 连接和 SSH 连接。而如今,这家公司将通过开源来发布 GLB 的组件,到时会透露设计方面的细节。
GitHub 的高级基础设施工程师乔·威廉斯(Joe Williams)和 GitHub 的基础设施工程经理西奥·朱利恩(Theo Julienne)在一篇共同撰写的公告中说:“在过去,我们的负载均衡层一向是比较复杂的组件之一。传统上,我们纵向扩展这个部分,运行一小批运行 haproxy 的超大型机器,并使用非常特定的硬件配置,以便实现专门的 10G 链路故障切换机制。”
但是这个负载均衡平台遇到瓶颈后,该公司开始着手开发自己的解决方案。这个新平台要满足某些目标,包括横向扩展、高可用性、支持连接清空 (connection draining),并且能应对分布式拒绝服务(DDoS)攻击。“为了实现这些目标,我们需要重新考虑 IP 地址与主机之间的关系、我们的负载均衡层包括的各个层,以及连接是如何路由、控制和终结的。”
GitHub 在设计负载均衡平台时,为流量引导器(traffic director)这层竭力改进常见模式。该公司最后选用了一种支持多个查询的聚集哈希(rendezvous hashing)。每个代理主机存储起来,并被分配一个状态,然后处理连接清空。固定大小的转发表生成后,使用聚集哈希的排序组件,每一行都填满了代理服 务器的地址。表和代理主机状态被发送到引导器服务器,并保持同步。
TCP 数据包一发送到引导器,源端 IP 就经过哈希处理,生成指向转发表的一致性索引。数据包在注定发送到代理服务器内部 IP 的另一个 IP 数据包里面加以封装,并通过网络发送出去。代理服务器收到经过封装的数据包后,拆开数据包,在本地处理原始数据包。出站数据包使用服务器直接返回 (Direct Server Return)模式,那样发送到客户端的数据包就直接发送到客户端、绕过引导器这一层。
这两位工程师说:“我们着手设计一种新的引导器层,它具有无状态性,让引导器和代理节点都可以从容地退出轮转,在任何可能的情况下,对用户没有 干扰。一些用户生活在互联网连接不尽如人意的国家,所以合理大小的代码库的长时间运行副本不会在合理时间的计划维护期间出现故障,对我们来说很重要。”
相关文章:
- Copilot不让「白嫖」了?开源组织SFC号召开发者退出GitHub!
- 有人悄悄尝试在开源软件内植入挖矿程序
- Python正式迁移到GitHub
- 重磅!腾讯大数据宣布开源第三代高性能计算平台 Angel
- GitHub花钱太大方,已经亏损近5千万
- AlphaGo代码开源了,很快你也可以挑战它了
- 腾讯毫秒服务引擎msec开源:2小时搭建后台
- GitHub 上最具影响力的组织/机构
- 基于 Android 6.0 的 小米 MIUI 8 已开源
- 微软宣布PowerShell开源并支持Linux(及macOS)
- 阿里云宣布开放开源AliSQL数据库
- 谷歌BigQuery现在允许查询所有GitHub开源项目了
- 中国向 GitHub 发出删除通知
- Linux 已成为计算机史上最大的软件开发项目
- 开源反间碟战






















发表回复