GitHub新负载均衡系统的设计历程

简介:

在过去的一年中,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谈到他们计划如何平滑地发布这个新负载均衡系统,并预计在近期开源该项目。

本文转自d1net(转载)

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
1月前
|
负载均衡 监控 算法
实现负载均衡策略:优化系统性能与可用性
实现负载均衡策略:优化系统性能与可用性
|
6月前
|
负载均衡 算法 应用服务中间件
百度搜索:蓝易云【Linux系统如何使用 HAProxy、Nginx 和 Keepalived 进行负载均衡?】
通过上述步骤,你可以在Linux系统中使用HAProxy、Nginx和Keepalived来实现负载均衡。这些工具可以帮助你将流量分配到多个后端服务器上,提高系统的性能、可靠性和可扩展性。
87 0
|
6月前
|
存储 Kubernetes 负载均衡
【Kubernetes系统原理、核心资源、Pod原理与创建及生命周期管理、Job、Cronjob、Statefulset、Service负载均衡Ingress】
【Kubernetes系统原理、核心资源、Pod原理与创建及生命周期管理、Job、Cronjob、Statefulset、Service负载均衡Ingress】
355 2
|
7月前
|
缓存 Java 程序员
面试进阶齐飞!Github一天万赞的阿里Java系统性能优化有多牛?
前两天在知乎上看到一个问答,说的是: 一个Java程序员具备什么样的素质和能力才可以称得上高级工程师? 这个问题也引发了我的一些思考,可能很多人会说,“作为高级工程师,基础得过硬、得熟练掌握一门编程语言、至少看过一个优秀开源项目的源代码、有过高并发/性能优化的工作经验、沟通能力强等等”。
56 0
|
7月前
|
消息中间件 缓存 Java
GitHub下载热榜,阿里技术官限时开源三份百亿级架构系统手册
在如今是属于高流量的时代,不知道各位了解高并发吗?今天给大家带来的是出自阿里大牛手写三份绝密手册,《百亿级并发系统设计》+《微服实战 +亿级流量网站架构核心技术》
240 0
|
3月前
|
负载均衡 应用服务中间件 nginx
Nginx四层负载均衡在秒杀系统中的应用
Nginx四层负载均衡在秒杀系统中的应用
26 0
|
3月前
|
负载均衡 应用服务中间件 nginx
Nginx负载均衡选择在秒杀系统中的应用
Nginx负载均衡选择在秒杀系统中的应用
44 0
|
5月前
|
缓存 Ubuntu 网络协议
百度搜索:蓝易云【ubuntu 系统解决GitHub无法访问问题】
如果上述步骤仍然无法解决GitHub无法访问的问题,可能是由于其他网络配置或设置问题引起的。您可以尝试咨询网络管理员或检查其他网络设置来进一步排除问题。
102 0
|
5月前
|
SQL JavaScript 前端开发
GitHub标星11.9k兼职项目!基于SpringBoot + VUE电商-分销商城系统
商城系统支持商家入驻,后端基于SpringBoot 研发,前端使用 Vue、uniapp开发, 系统全端全部代码开源 前后端分离,支持分布式部署,支持Docker,各个API独立,并且有独立的消费者。
|
7月前
|
消息中间件 前端开发 Java
GitHub标星30k!基于Spring MVC Mybatis分布式开发系统-zheng项目
zheng项目不仅仅是一个开发架构,而是努力打造一套从 前端模板 - 基础框架 - 分布式架构 - 开源项目 - 持续集成 - 自动化部署 - 系统监测 - 无缝升级 的全方位J2EE企业级开发解决方案。