好消息!GitHub发布开源负载均衡组件GLB

 

GitHub的HTTP,Git和SSH等服务每天要负担数十亿个连接请求。为此,该公司开发了自己的解决方案 -...



GitHub的HTTP,Git和SSH等服务每天要负担数十亿个连接请求。为此,该公司开发了自己的解决方案 - GitHub Load Balancer(GLB),它的开源版本也于近日发布。



GLB是在GitHub内部开发的负载均衡器,可在裸机上运行并获得更好的性能。最初,服务管理员使用垂直缩放,使用的HAProxy软件来做生产机的负载均衡器,但是这需要特殊的设备,提供故障转移的专用千兆网络。随着时间的推移,他们需要创建一个可以在典型数据中心上运行的负载均衡器。所以去年出现了GitHub Load Balancer。

其工作算法的核心是散列Rendezvous(也称为最高随机权重,HRW)。允许人们尽可能地从负载均衡器中平滑增加和移除控制器和代理节点,而不会中断用户服务。 GLB解决了许多工程师在使用GitHub时面临的负载挑战,不仅包括横向可扩展性,高可用性,并支持高压力连接,而且还推出了在任何级别的常规软件测试性,抗击典型DDoS攻击的可能性。

1、GLB: GitHub’s open source load balancer | GitHub Engineering

https://githubengineering.com/glb-director-open-source-load-balancer/

2、GitHub looses load-balancing open-source code on netops world • The Register

https://www.theregister.co.uk/2018/08/09/github_load_balancing_director/

“负载平衡器”是一种将服务器请求分发到多个服务器的机制。在YouTube等许多服务中,正在运行具有相同功能的多个服务器。这是,负载接入的增加和覆盖由单个服务器增加所提供的服务,或者系统反映已经下降,正常反应还是已经挂掉,有可能已经不能够维持用户流畅的服务。另外,光增加物理服务器,因为没有做平衡的访问,无法做到负载均衡。因此,需要具有均匀分配流量负载的负载平衡器。

例如,如下所示的图像中,使用的标准网络路由器作为负载平衡器,以及分散负载两个代理服务器。在这里,当即将添加代理服务器(右一)到负载平衡目标的第三辆车,并设置路由器。



立即将第三台服务器添加到负载平衡目标。 一旦路由器可以与新服务器通信,它就会识别出“服务器处于激活状态”。 因此,即使第三台代理服务器还不是准备好服务的状态,路由器也会将通信分配给第三设备并进行一些访问(这里是两次通信),这将会导致无法访问等错误。



因此,路由器是无法很好地处理应用级负载平衡的。 因此,人们开始用类似LVS(Linus Virtual Server)这样的虚拟负载均衡器。 在下文中,三个LVS直接放置在路由器下面,路由器下面的三个LVS已经设置正确,LVS其下的三个代理服务器是负载平衡的。 GitHub的LVS可以检查后端服务器的服务状态(服务器负载平衡),这样一样就意味着“在许多情况下它将正常工作”。 在下列图示情况下,即使三个LVS和代理服务器集群右端的第三个LVS和代理服务器失败并停机,此时也不会出现问题,因为服务可由两个LVS和代理服务器处理。



这里,假设第三个LVS和代理服务器在响应灾难恢复时被激活。 通常,LVS在分配通信之前检查后端服务器的状态。 但是,如果第三个LVS在故障发生之前没有被干净地处理,则它可能重启后恢复发生故障之前的状态。 此时,即使第三代理服务器正在运行且无法维修,恢复后的第三个LVS也可以从“服务器在故障之前运行的事实”中分配通信。 这会存在一些问题,即对某些用户的访问将是错误的响应。



为了解决这个问题,GitHub开发的GLB Director采用了“为每个通信分配主要和辅助后端服务器”的方法。 这里,即使出现与上述相同的问题,也立即将通信传送到设置为辅助的服务器,从而避免连接错误。



GLB Director目前已经可以从Github下载。

GitHub - github/glb-director: GitHub Load Balancer Director and supporting tooling.

GLB开源地址:https://github.com/github/glb-director




编译:21CTO社区



    关注 21CTO


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册