专栏名称: Python开发者
人生苦短,我用 Python。伯乐在线旗下账号「Python开发者」分享 Python 相关的技术文章、工具资源、精选课程、热点资讯等。
目录
相关文章推荐
51好读  ›  专栏  ›  Python开发者

Google 是如何做负载均衡的?

Python开发者  · 公众号  · Python  · 2017-03-04 22:34

正文

请到「今天看啥」查看全文


如有好文章投稿,请点击 → 这里了解详情


Google 使用的技术一般都自带光环,吸引程序员的注意,基础设施方面的东西就更是如此,年初 Google 发布了篇论文介绍内部的负载均衡器的实现,让我们有机会一睹可能是全球最好的负载均衡器。


通常情况下的负载均衡要在灵活性和性能之间做权衡,用户态软件层面有 Haproxy 和 Nginx 这样的老牌负载均衡软件,他们一般配置和使用起来都比较容易,但是由于需要数据包从网卡到内核再到软件一层层向上处理,再一层层向下转发,堆栈比较深单机性能通常都比较一般。为了提高单机性能,减少堆栈层级就有了 Linux 里华人之光的 LVS,工作在内核层的负载均衡器,性能有着数量级的提高,然而配置起来相对也比较复杂而且对网络条件要求也有特殊要求。那 Google 有什么秘密的配方来达到高性能呢?


一般来说负载均衡器本身就是后端服务横向扩展的一个接入点,对于一般站点一个负载均衡器就够了,然而应对 Google 这种级别的流量,负载均衡器本身也要能横向扩展,还要处理负载均衡器的高可用,Google 又是如何做到的呢?


以我们访问 www.google.com 为例,第一步 DNS 服务器会根据请求的位置返回一个离请求地理位置最近的 VIP 地址,先在 DNS 这一层做一个横向扩展。接下来请求达到 VIP 对应的路由器,路由器通过 ECMP 协议,可以将请求平均分配到下面对等的多个负载均衡器上,这样在路由器这一层做了个负载均衡,让后面的负载均衡器也实现了横向扩展。再往下是一个类似于 LVS 中 DR 模式的分发,负载均衡器将请求包转发给服务器同时将源地址改为客户请求时的地址,服务器响应时将响应包的源地址改为 VIP 的地址直接打给路由器而不通过负载均衡器来降低负载均衡器压力。流程图如下







请到「今天看啥」查看全文