2018年5月,Facebook开源了可扩展的网络负载均衡软件 Katran,顺着这个回顾一下负载均衡的故事。
负载均衡(Load Balance,简称LB)是一种服务器或网络设备的集群技术。负载均衡将特定的业务(网络服务、网络流量等)分担给多个服务器或网络设备,从而提高了业务处理能力,保证了业务的高可用性。常用的负载均衡开源软件有nginx、lvs、haproxy,商业的硬件负载均衡设备F5、Netscale。
LVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器。这是一个由章文嵩博士发起的一个开源项目,它的官方网站是 http://www.linuxvirtualserver.org 现在 LVS 已经是 Linux 内核标准的一部分。使用 LVS 可以达到的技术目标是:通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的性能()。
LVS的原理可用下图表示:客户端通过网络向服务器发起请求,为了应对更多的访问需求和更好的性能需求,一个经济有效的方法是横向扩展,即多增加几台服务器应对需求,但是服务器对外的地址和端口一般只设为一个。为了解决这个矛盾,在客户端和服务器之间增设LoadBalancer,让LoadBanlancer和各个服务器具有相同的VIP(虚拟IP),当LB接收到客户端的申请时,通过一定的选择策略选择一个合适的服务器(如图中的RS1)并将请求转发给它,RS1接受到申请后进行处理并返回反馈,其反馈中带有其IP地址(实际上是设置的VIP),反馈先到达LB,LB不需要对其做任何操作(因为LB的VIP和RS1的VIP相同),将反馈直接发送给客户端。
Facebook使用的第一代负载均衡系统是基于OSS软件,采用了大量开源软件完成上述原理中的VIP通告功能、后端服务器选择功能、转发平面功能(转发任务的过程)、控制平面功能。
Katran完全重新设计的转发平面,比前一个版本有了显著改进。应用的技术是内核界的两种新技术:eXpress Data Path 和extended Berkeley Packet Filter,这使得其具有了几个优点:及早高效的数据包处理,成本低廉但更稳定的哈希,更有弹性的本地状态,对RSS友好的封装