漫画 | 打死我也不搞负载均衡了!

Posted 码农翻身

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了漫画 | 打死我也不搞负载均衡了!相关的知识,希望对你有一定的参考价值。

这是1998年一个普通的上午, 张大胖刚上班就被老板叫去训话。




张大胖有个亲戚在卖IBM的服务器,经常吹嘘说性能有多好,张大胖就想花钱把现在的‘老破小’服务器给替换掉。


漫画 | 打死我也不搞负载均衡了!


老板不管过程,只要结果。


大胖悻悻地去找Bill, 将老板的指示声情并茂地做了传达。


漫画 | 打死我也不搞负载均衡了!


张大胖思索了一会儿,想出了用DNS做中间层的办法。


让网站的域名映射到多个服务器的IP!


用户面对系统的域名,查询IP的时候用轮询的方式。


漫画 | 打死我也不搞负载均衡了!


这DNS系统也真是太不智能了, 张大胖没招了。


Bill决定另辟蹊径,开发一个自己的负载均衡软件。


漫画 | 打死我也不搞负载均衡了!


Load Balancer 简称LB , 有两个IP,一个对外(115.39.19.22),一个对内(192.168.0.100)。


用户看到的是那个对外的IP。后面的真正提供服务的服务器有三个,称为RS1, RS2,RS3, 他们的网关都指向LB。


漫画 | 打死我也不搞负载均衡了!


但是这个数据包一看就是发给Load Balancer的, 怎么发给后面的某个服务器呢?

漫画 | 打死我也不搞负载均衡了!


等到RS1处理完了,要返回首页的html, 会把数据包发给网关LB, LB再次施展同样的手段,把IP和端口都修改成自己的, 再发给客户就行了。


漫画 | 打死我也不搞负载均衡了!



Bill 吩咐张大胖组织人力把这个负载均衡软件给开发出来。


漫画 | 打死我也不搞负载均衡了!


三个月后,Load Balancer的第一版开发出来了,这是运行在Linux上的一个软件, 公司试用了一下,感觉还真是不错,仅仅用几台便宜的服务器就可以实现负载均衡了。


漫画 | 打死我也不搞负载均衡了!


可是好景不长,张大胖发现这个Load Balancer存在这瓶颈。


所有的数据包都要通过它,不管是客户端发来的,还是要发给客户端的。


漫画 | 打死我也不搞负载均衡了!


Bill 给出了一个新的方案:把请求和响应分开处理。


漫画 | 打死我也不搞负载均衡了!


Bill展示了一张更加复杂的图:


漫画 | 打死我也不搞负载均衡了!


张大胖通过第一版Load Balancer的开发,积累了丰富的经验。


所有服务器都有一个IP:115.39.19.22, 简称VIP。


每个实际的服务器的loopback都绑定到了这个VIP上。


但是,一个巨大的问题出现了:


漫画 | 打死我也不搞负载均衡了!

漫画 | 打死我也不搞负载均衡了!


RS1(192.168.0.10)这个服务器收到了数据包,拆开一看,目的地IP是115.39.19.22,是自己的IP, 那就可以处理了。



漫画 | 打死我也不搞负载均衡了!

张大胖决定把这种方式叫做Direct Server(DR)模式。


几个月以后,DR模式也开发成功,并且部署到了生产环境上。

后记: 本文所描述的,其实就是著名开源软件LVS的原理,上面讲的两种负载均衡的方式,就是LVS的NAT和DR。LVS是章文嵩博士在1998年5月成立的自由软件项目,现在已经是Linux内核的一部分。


最后再留个小疑问给大家:对于用户的一个请求来说,可能会被分成多个数据包来发送, 如果这些数据包被我们的Load Balancer发到了不同的机器上,那就完全乱套了啊!这该怎么办?

以上是关于漫画 | 打死我也不搞负载均衡了!的主要内容,如果未能解决你的问题,请参考以下文章

漫画:从渣男角度了解负载均衡

Dubbo剖析-负载均衡

漫画 | 程序员如何给女朋友解释什么是负载均衡

漫画 | 打死我也不学编译了!

分布式 | 不可不知的负载均衡

MySQL高可用负载均衡