写点什么

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

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

关注

评论

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

跨平台应用开发进阶(一) :走近 uni-app

No Silver Bullet

uni-app 跨平台 实战 2月月更

服务网格在联通的落地实践

百度开发者中心

恒源云(GpuShare)_AIphaCode是否能取代程序员?

恒源云

深度学习 AI transformers

使用Perf和FlameGraph进行系统性能分析

wong

flamegraph perf

Spring Boot Serverless 实战系列 | 性能调优

阿里巴巴云原生

spring 阿里云 Serverless 云原生 框架

会声会影剪辑视频教程讲解

懒得勤快

JAVA 那些事 - 聊聊那些易混淆的概念:JVM/JRE/JDK,openJDK/oracleJDK,JAVA SE/JAVA EE/Jakarta EE

明哥的IT随笔

jdk Openjdk Java EE

Web Components 系列(八)—— 自定义组件的样式设置

编程三昧

前端 组件化 2月月更 WebComponent

独家交付秘籍之招式拆解(第一回)

阿里巴巴云原生

阿里云 云原生 应用交付

Ti-Click:通过浏览器快速搭建 TiDB 在线实验室 | Ti-可立刻团队访谈

PingCAP

网络安全kali渗透学习 web渗透入门 DDOS的原理和防护

学神来啦

数据分析实际案例之:pandas在泰坦尼特号乘客数据中的使用

程序那些事

Python 数据分析 pandas 程序那些事 2月月更

技术人聊开源:这并不只是用爱发电

SOFAStack

开源

EdgeDB 架构简析

CRMEB

车联网平台搭建从入门到精通 01|车联网场景中的 MQTT 协议

EMQ映云科技

车联网 物联网 通信 mqtt 平台搭建

FinClip 的 2021 与 2022

FinClip

产品设计与思考

火山引擎 MARS-APMPlus X 美篇 | 形成应用性能全面监控,大幅提升APP稳定性

字节跳动终端技术

字节跳动 APM 性能监控 应用性能监控产品 火山引擎MARS

边缘计算加速视频直播场景:更清晰、流畅、实时

火山引擎边缘云

边缘计算 视频直播 异构算力

解构流存储 — Pravega,与 Flink 构建端到端的大数据流水处理线

Apache Flink

大数据 flink 开源 编程 实时计算

GPU在Kubernetes中的使用与管理 | 社区征文

大菠萝

新春征文

《新程序员》杂志|李鹏辉谈开源云原生消息流系统

Apache Pulsar

开源 架构 云原生 中间件 Apache Pulsar

云效Flow如何实现阿里云ECS多环境发布

阿里云云效

阿里云 运维 云原生 软件开发 研发

[建造者模式实战]如何用JAVA实现一个基于POI的复杂表格导出工具类?

山河已无恙

Java 2月月更

焱融科技加入中国通信工业协会人工智能专业委员会,共创数智新未来

焱融科技

人工智能 云计算 分布式 高性能 文件存储

平安科技从 Oracle 迁移到 UbiSQL 的实践

PingCAP

11种绕过CDN查找真实IP方法

喀拉峻

网络安全

K8s Ingress Provider 为什么选择 MSE 云原生网关?

阿里巴巴云原生

阿里云 Kubernetes 容器 微服务网关 云原生网关

Go 语言入门很简单:基准测试

宇宙之一粟

Go 语言 2月月更

当 TiDB 遇上 Flink:TiDB 高效入湖“新玩法” | TiLaker 团队访谈

PingCAP

数智时代,谁都做平台,谁都做生态!这行吗?

海比研究院

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