写点什么

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

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

关注

评论

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

JDK15正式发布,划时代的ZGC同时宣布转正

YourBatman

ZGC JDK15

Copy攻城狮辛酸史:含泪“一分钟”跑通MindSpore的LeNet模型

华为云开发者联盟

学习 程序员 mindspore

同城快递订单系统架构设计方案

周冬辉

跨专业学习6个月,成功上岸阿里|滴滴,分享学习路线供大家参考

小Q

Java 学习 架构 面试 基础

正则表达式

菜鸟小sailor 🐕

爬虫

食堂就餐卡系统设计 UML 练习

escray

学习 极客大学架构师训练营 UML

入行架构师之前,这7项技能你要先了解一下

华为云开发者联盟

架构 架构设计 架构师

学习笔记丨浮点数探究

Liuchengz.

C语言 基本数据类型

GrowingIO 智能运营产品微前端实践

GrowingIO技术专栏

大前端 智能运营

Apache Pulsar 社区周报|09-05 ~ 09-11

Apache Pulsar

开源 云原生 Apache Pulsar 消息中间件

架构师训练营第一期-第一周课后 - 作业二

OBS鉴权实现的宝典秘籍,速拿!

华为云开发者联盟

OBS 签名

AWS在线技术峰会2020探班回顾,四大看点不容错过

有只小耳朵

云计算 AI 云原生 金融 医疗

实战案例丨GaussDB for DWS如何识别坏味道的SQL

华为云开发者联盟

数据库 sql 算子

我擦~字符串转字节切片后,切片的容量竟然千奇百怪

Gopher指北

后端 Go 语言

分布式系统:数据一致性解决方案

马迪奥

分布式事务 一致性

Java基础知识面试题(2020最新版)

Java架构师迁哥

百度大脑助力旅游场景智能解决方案落地

百度大脑

百度大脑事件图谱:洞察复杂世界中的事件知识

百度大脑

第一周作业,UML图

等燕归

卧槽!牛逼了!40K+Star!Mall电商实战项目开源回忆录!附源码、教程合集

学习 程序员 架构师 计算机

当代开发者的好帮手,浅析.NET敏捷开发框架的优势与特点

Philips

敏捷开发 软件开发 .net core 开发工具

Code Like Sync, Works Like Async

滴滴普惠出行

智能门禁的音视频技术应用

anyRTC开发者

音视频 WebRTC 直播 RTC

餐卡系统设计文档

龙卷风

架构师训练营第一期-第一周课后-作业一

git的几种实用操作(合并代码与暂存复原代码)

良知犹存

git

HTTP必知必会

陈靓-哲露

Rust闭包的虫洞穿梭

袁承兴

rust 函数式编程 闭包

面试官:哪些场景会产生OOM?怎么解决?

艾小仙

Java 架构 面试 编程语言 JVM

2020年6月最新iOS面试题总结

iOSer

ios 2020 面试 经验总结

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