AICon 深圳站 Keynote 嘉宾官宣!共探AI价值转化的实践路径 了解详情
写点什么

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:006150
用户头像

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

关注

评论

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

不确定的海浪中,更需要数字化转型的定海神针

脑极体

如何完成日千万级别以上的订单对账(二)

谙忆

低代码之所以能火,离不开这些原因!

优秀

低代码

缓存系统设计精要

比伯

Java 互联网 面试 程序人生 技术宅

《中寰卫星导航项目管理部负责人卜钢:智能网联行业的问题与前景》(采访提纲):

谙忆

Scrum Patterns:小团队(译)

Bruce Talk

敏捷开发 译文 Agile Scrum Patterns

如何完成日千万级别以上的订单对账(一)

谙忆

魔晶面膜

飞亚科技

颠覆微服务认知:深入思考微服务的七个主流观点

xcbeyond

微服务 4月日更

重读《重构2》- 内联函数

顿晓

重构 4月日更

从程序员角度看湖南电信网络全崩,如何防范服务器被攻击以及解决方案

北游学Java

Java 网络安全 网络 服务器

干货 | Redis进阶笔记

ninetyhe

redis 缓存 原理分析

混战的低代码江湖,如何区分「李逵」和「李鬼」?

ToB行业头条

活久见,58同城居然也有这么牛的Java内部教程

Java架构师迁哥

颜色值JavaScript换算(HSV、RGB、十六进制颜色码)

空城机

JavaScript 大前端 颜色值换算

你看起来很美味?独家揭露视频推荐系统AI秘方

脑极体

感谢Github帮我斩获了8家大厂Offer

Java架构师迁哥

聪明人的训练(十三)

Changing Lin

4月日更

完美的,从不空口说白话,140个案例带你深入理解微服务

Java架构师迁哥

用吃解决生活问题

石云升

读书笔记 好好吃饭 28天写作 4月日更

java基础集合之HashMap

false℃

阿里P9纯手打的JDK文档太吊了,微软都开始学习了!

Java架构师迁哥

一文搞懂MySQL体系架构!!

冰河

MySQL 数据库 程序员 系统架构 数据存储

cat监控http请求-CatFilter

Java个体户

监控 cat

Spark测试用例生成apache iceberg结果

聚变

大数据 iceberg

MOOM集团模式

飞亚科技

大数据文件浏览器

聚变

yyds!用飞桨玩明日方舟

百度大脑

百度 飞桨

一个可递归遍历的Vue树型组件

空城机

JavaScript vue.js 大前端 4月日更

微信被单删或拉黑?这两个免打扰检测方法你要知道。

彭宏豪95

微信 工具 社交 数据备份 4月日更

Java编辑器

ベ布小禅

4月日更

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