干货分享高性能负载均衡介绍

Posted 苏研大云人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了干货分享高性能负载均衡介绍相关的知识,希望对你有一定的参考价值。

【干货分享】高性能负载均衡介绍

 一 

高性能负载均衡出现的背景

1.1 移动需要高性能负载均衡的场景

      流量会出现短暂爆发式增长的场景:如运营商月底或年底集中在一个时间段去拉取话费统计,消费清单、新品发布,活动,秒杀等;流量需求一直很高的场景:如基于Docker平台的服务、软件自定义数据中心(SDDC)、日志中心、数据库仓储中心,内容服务平台如视频,下载,SDN等。以上两个场景,对带宽,延迟的要求非常高,高性能负载均衡就显得非常必要。

       1.2 开源负载均衡面临的问题

      现有的开源软件并不会把周边生态完全开源。配置,运维,部署,监控等,无界面,无web端。复杂场景配置管理,完全靠手动。而且现有的都是基于特定场景开发配置,不能完全符合场景需求。代码不可控,依赖社区,反馈慢,bug跟进不及时。增加或修改功能的时候,需求无人响应。

1.3 苏研的高性能负载均衡软件

      基于DPDK,网卡性能被充分的压榨,可以接近网卡线速的转发处理能力。支持DR、NAT、FNAT、TUNL等主流模式之外还支持ECMP/OSPF协议,可以集群化部署,N+1冗余。有专人维护,研究如何集群化,多种模式部署。基于开源的代码二次开发,增加配置,监控,告警,等功能。Bug和特性有人反馈跟踪,需求积极响应。基于DPDK的负载均衡配置比较繁琐,在解决问题的同时,也可以储备相关的知识和人才。在和LVS对比测试中,包转发性能达到了前者的3~4倍。而且随着CPU核心的增加,处理报文的能力线性增加。

【干货分享】高性能负载均衡介绍

1.4 负载均衡各阶段的方案

      7层或者4层负载,面向的业务场景不同。没有一成不变的负载方案,需要根据企业流量和主机的拓扑,主机的数量等等,灵活的做出选择和更改。

早期阶段

【干货分享】高性能负载均衡介绍

第一阶段:利用nginx或Haproxy进行单点的负载均衡,这一阶段服务器规模刚脱离开单服务器、单数据库的模式,需要一定的负载均衡,但是仍然规模较小没有专业的维护团队来进行维护,也没有需要进行大规模的网站部署。这样利用Nginx或Haproxy就是第一选择,此时这些东西上手快, 配置容易,在七层之上利用HTTP协议就可以。

中期阶段

【干货分享】高性能负载均衡介绍

第二阶段:随着网络服务进一步扩大,这时Nginx已经不能满足,这时使用LVS或者商用F5就是首要选择,Nginx此时就作为LVS或者F5的节点来使用,具体LVS或F5的是选择是根据公司规模和预算来选择,一般来说这阶段相关人才跟不上业务的提升,所以购买商用的F5做负载均衡已经成为了必经之路。

后期阶段

【干货分享】高性能负载均衡介绍

第三阶段:这时网络服务已经成为主流产品,此时随着公司知名度也进一步扩展,相关人才的能力以及数量也随之提升,随着公司流量的暴涨,需要在性能方面下功夫。这时定制基于DPDK等零拷贝技术的高性能负载均衡作为首选。

【干货分享】高性能负载均衡介绍

高性能负载均衡介绍

2.1 简介

2.1.1 网络拓扑

【干货分享】高性能负载均衡介绍

2.1.2 技术架构图:

【干货分享】高性能负载均衡介绍

高性能负载均衡是基于DPDK的4层负载均衡器。基于阿里巴巴/ LVS衍生而来。使用了DPDK的核绑定,无锁队列,自定义轻量级IP协议栈等技术,所有报文都在用户态处理。绕过了内核协议栈复杂繁琐的处理流程。报文不需要从用户态到内核态的频繁拷贝,直接使用UIO驱动。

2.1.3 报文处理流程

硬件中断-->放弃中断流程-->用户层通过设备映射取包(UIO)-->进入用户层协议栈-->逻辑层-->业务层

2.2 功能模块

【干货分享】高性能负载均衡介绍

2.3 高性能负载均衡各种主要模式介绍

高性能负载均衡原生继承了LVS的三大模式(DR,NAT,TUN),但是因为DPDK接管了网卡,没有协议栈,在配置和管理方面会有很大的不同,下面会一一介绍。

2.3.1 DR模

【干货分享】高性能负载均衡介绍

(1) DR模式的工作过程

  • l  Client 发送request包到LB服务器的VIP上

  • 被选择的RS把应答包直接传给Client

(2)使用DR模式的特点

  • 负载均衡服务器首先需要LAN IP。 (单臂模式下,必须与VIP不同)。

  • RS和负载均衡服务器必须位于同一子网(on-link)中。

  • 在RS:必须将VIP添加到其lo接口。

  • 在RS上:arp_ignore必须设置为lo接口。

2.3.2 Tunnel隧道模式

【干货分享】高性能负载均衡介绍

隧道模式要求RS支持IP隧道。应配置VIP并在RS上设置arp_ignore。

(1) 隧道模式的工作过程:

  • Client 发送request包到LB服务器的VIP上

  • VIP按照算法选择后端的一个RS,并将记录一条消息到hash表中,然后将Client的request包封装到一个新的IP包里,新IP包的目的IP是RS的IP,然后转发给RS

(2) 隧道模式的特点:

  • 负载均衡服务器不需要和RS在一个网段

  • 因为需要封包解包,需要RS支持IP 隧道协议

2.3.3 NAT模式

【干货分享】高性能负载均衡介绍

(1) NAT模式的工作过程

  • RS收到request包后,发现目的IP是自己的IP,于是处理请求,然后发送reply给LB

  • l  从Client来的属于本次连接的包,查hash表,然后发给对应的RS

     (2) NAT模式的特点

2.3.4 Full-NAT模式

【干货分享】高性能负载均衡介绍

(1) Full-NAT模式的工作过程:

  • RS收到request包后,发现目的IP是自己的IP,于是处理请求,然后发送reply给LB

  • 从Client来的属于本次连接的包,查hash表,然后发给对应的RS因为后端只能看到LB的DIP,如果后端RS服务器需要获取Client IP port,需要安装TOA模块。

(2) Full-NAT模式的特点

  • 外部和内部IP互相隔离,抗攻击,可以跨网段,VLAN部署。

  • 不同于NAT和DR要求LB和RS位于一个子网,FULLNAT对于组网没有要求。只需要保证Client和LB、LB和RS之间网络互通即可。

  • l  相比NAT模式等,多了一次Source IP更新,性能会有所下降。

2.3.5 Full-NAT和NAT区别

Full-NAT模式Packet IN 时,除了做 DNAT,还做 SNAT(用户 IP->内网 IP),从而实现LVS-RS 间可以跨 VLAN通讯, RS只需要连接到内网

(1) NAT模式

【干货分享】高性能负载均衡介绍

NAT模式下报文变化

发送   接收

cIP ---> vIP

cIP ---> rIP ( DNAT )

rIP ---> cIP

vIP ---> cIP ( SNAT )

(2) Full-NAT模式

【干货分享】高性能负载均衡介绍

Full-NAT模式下报文变化:

发送   接收

cIP ---> vIP

dIP ---> rIP ( SNAT + DNAT )

rIP ---> dIP

vIP ---> cIP ( SNAT + DNAT )

(3) Full-NAT的问题:

  • 相对于NAT多了DIP的来回转换,性能比NAT损失10%

  • l  RS无法获得用户IP,但是可以解决

为了解决这个问题我们提出了TOA的概念,主要原理是:将Client Address放到了TCP Option里面带给后端RS,RS上通过TOA内核模块hack了getname函数,给用户态返回TCP Option中的Client IP。

2.4 高性能负载均衡总结

2.4.1 优点

  • DPDK加成,可以充分利用网卡性能

  • l  摈弃纷繁复杂的内核协议栈,带宽和处理延迟有很大提升

  • 协议栈可控,功能和业务逻辑完全掌握在自己手中

  • l  对比测试,无论在哪种模式,和原生的LVS对比,性能都有很大的提高

2.4.2 缺点

  • 没有完整的协议栈,DPDK接管之后,没有内核协议栈的网卡,虽然可以用KNI弥补,但是KNI达不到DPDK的性能,对性能要求高的协议,用原生协议栈或者自己实现,需要抉择。

  • 因为报文都在用户态处理,自然所有的流程都跑在用户态代码里,需要主程序自己实现业务逻辑,相比于内核完整的生态和强大的代码,出错的概率增大,对代码质量要求大大提高。

  • l  相比于原生网络的配置,DPDK相关的运维会比较复杂。可能对于某些协议的支持不完全,就会有很多的麻烦。对运维的要求比较高。

  • DPDK需要绑定CPU核心,基于轮询的机制,不管报文多少,都是100%CPU使用率。如果带宽不高,会浪费CPU核心资源,耗费电量。

【干货分享】高性能负载均衡介绍
【干货分享】高性能负载均衡介绍

END


往期精选

1. 【干货分享】

2. 

3. 

以上是关于干货分享高性能负载均衡介绍的主要内容,如果未能解决你的问题,请参考以下文章

LVS负载均衡集群(干货来袭)

每日一问051期-负载均衡简要介绍

干货 | Nginx负载均衡原理及配置实例

干货|什么是负载均衡?负载均衡原理详解

干货|关于Java架构中分布式系统的负载均衡

干货分享Nginx/LVS/HAProxy 负载均衡软件的优缺点详解