NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

关注

评论

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

万亿级对象存储的元数据系统架构设计和实践

百度开发者中心

对象存储 文件存储 百度沧海

假如问:你是怎样优化Vue项目的,该怎么回答

bb_xiaxia1998

Vue

React源码解读之任务调度

flyzz177

React

【FAQ】集成分析服务的常见问题及解决方案

HMS Core

HMS Core

LR性能测试常见问题及处理方法(一)

性能测试 问题排查 LoadRunner

LR性能测试常见问题及处理方法(二)

性能测试 问题排查 LoadRunner

写过vue自定义指令吗,原理是什么?.m

bb_xiaxia1998

Vue

可视化分析能力MAX,瓴羊Quick BI带来全新数据分析体验

对不起该用户已成仙‖

建设 TiDB 自动化平台:转转 DBA 团队实践

PingCAP

数据库 自动化 TiDB

React源码分析2-深入理解fiber

goClient1992

React

Led透明显示屏的发展超乎你想象

Dylan

LED 显示器 LED显示屏

目前兰州市等保测评机构有几家?有新增的吗?

行云管家

等保 等级保护 等保测评 兰州

谈谈Linux内核的噪声

统信软件

Linux 内核

Golang 编程“珠玑”

MatrixOrigin

golang 分布式数据库 编程语言 MatrixOrigin MatrixOne

解读Teradata结束中国直营背后的原因!国产数据库能填补空缺吗?

雨果

数据库管理工具 国产数据库 teradata SQL工具

React源码分析4-深度理解diff算法

goClient1992

React

Unittest接口测试生成报告和日志方法

日志 单元测试 自动化测试 unittest 测试报告

堡垒机行业标杆产品是哪家呢?有哪些功能?

行云管家

网络安全 信息安全 等保 堡垒机

构建云边端一体的分布式云架构,软硬结合驱动边缘计算创新场景

百度开发者中心

云原生 边缘计算 #百度智能云#

unittest中使用ddt后生成的测试报告名称如何修改?(如test_api_0修改成test_api_0_titile)

单元测试 自动化测试 unittest 参数化 ddt

前端手写面试题总结

helloworld1024fd

JavaScript

vivo x TiDB丨解决云服务海量数据挑战

PingCAP

TiDB

百度前端必会react面试题总结

beifeng1996

React

12大团队任务分配管理软件盘点

PingCode

项目软件管理 项目软件

腾讯前端一面经典手写面试题合集

helloworld1024fd

JavaScript

React源码分析3-render阶段(穿插scheduler和reconciler)

goClient1992

React

react hook 源码完全解读

flyzz177

React

React源码解读之更新的创建

flyzz177

React

SQL工具性能实测:居然比Navicat还快,数百万行数据导出仅51秒

雨果

sql 数据库管理工具 Web SQL sql studio

美团前端必会vue面试题合集

bb_xiaxia1998

Vue

自己手写一个redux

helloworld1024fd

JavaScript

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