高性能负载均衡实现的过程

来源:程序思维浏览:1781次
负载均衡是云计算的基本组成部分,也是网络流量的切入点。它的重要性是不言而喻的。

高性能负载均衡实现的过程

什么是负载均衡?用户输入的流量由负载均衡器根据一定的负载均衡算法均匀分布在后端的多个服务器上,接收请求的服务器可以独立响应请求,达到负载分担的目的。从应用场景来看,通用负载均衡模型具有全局负载均衡和集群内负载均衡。从产品形式的角度来看,它可以分为硬件负载均衡和软件负载均衡。

全局负载均衡通常通过DNS实现。通过将域名解析为不同的VIP,实现了不同的区域调度能力。硬件负载均衡器通常与F5、A10、Array一起使用。它们的优缺点是显而易见的。优点是强大的。专业的售后服务团队,性能更好,缺点是缺乏定制灵活性,维护成本高;现在互联网更多的想法是通过软件负载均衡来实现的,它可以满足各种定制需求,通用软件负载均衡是LVS、Nginx、Haproxy。

我们的高性能负载均衡使用LVS和Tengine来区分区域内的不同机房。每个房间都有一个LVS集群和一个Tengine集群。对于用户配置的四层监控,LCS将直接挂载用户ECS和七层用户。监控ECS安装在Tengine上。四层的流量由LVS直接转发到ECS,第七层监控的流量通过LVS到达Tenigine到达用户ECS。每个区域都有多个可用区,以实现主要和备份灾难恢复。每个群集都有多个设备。第一个是提高性能,第二个是基于灾难恢复的考虑因素。

上图是高性能负载均衡控制管理汇总图。 SLB产品也有SDN概念。转发和控制是分开的。用户的所有配置首先通过控制台进入控制器,用户配置通过集中控制器转换推送到不同的设备。每个设备都具有代理接收控制器的要求,该控制器被转换为可由LVS和Tengine识别的配置。此过程支持热配置,不影响用户转发,也不需要重新加载以使新配置生效。

LVS

1、LVS支持三种模式

早期LVS支持三种模式,DR模式、TUN模式和NAT模式。在DR模式通过LVS之后,LVS将MAC地址更改为、以封装MAC头。内部IP数据包不移动。在通过LVS负载均衡搜索分组之后,源MAC报头被改变为它自己的。目标MAC地址更改为RS。地址,MAC寻址位于第2层网络中,这对网络部署有一定的限制。在大规模分布式集群部署中,该模型的灵活性无法满足需求;

在TUN模式在LVS中之后,LVS封装原始数据包上的IP报头。在后端RS之后,RS需要解包IP数据包以获得原始数据包,无论是DR模式还是TUN模式。 RS可以看到真实的客户端源IP,目的IP是自己的VIP,需要在RS设备上配置VIP。这可以绕过LVS并将其返回给用户。 TUN模式问题是需要在后端ECS上配置解封装模块。 Linux上已经支持此模块,但Windows上不支持,因此用户系统映像选择会受到限制。

NAT模式用户访问VIP。搜索到LVS后,目标IP将转换为DNAT,并且将选择RS地址。由于客户端的IP未更改,因此返回数据包时,公共客户端的IP地址将直接路由到公共网络。约束是因为LVS进行DNAT转换,因此数据包需要转到LVS并将数据包头转换回来。由于ECS看到客户端的真实源地址,我们需要在用户ECS上配置路由,这将是ECS的默认路由。该路由指向LVS,这也限制了用户场景。

2、LVS基于Netfilter框架

Netfilter是Linux提供的网络开放平台。它可以基于该平台开发自己的业务功能模块。许多早期安全厂商已经实施了一些基于Netfilter的商业模式。此模型更灵活,但兼容性模型更兼容。路径很长;并且无法在通用模型中播放多核功能。目前,CPU的开发更加横向扩展。我们经常看到多个服务器,有多少核心在路上,早期的通用模型对于多核支持并不特殊。友好,多核设计存在一些缺点,这导致我们在通用模型上进行一些应用程序开发时具有有限的可伸缩性。随着核心数量的增加,性能不会增加和减少。

3、LVS改进

早期模式的各种限制限制了我们的发展,所以我们首先做了FullNAT。与原始NAT方法相比,FullNAT具有更多SNAT属性并转换客户端的原始IP地址。其次,我们对并行化进行了处理,充分利用了多核实现性能的线性改进;

然后是快速路径。当我们进行网络转发模型时,很容易想到设计快速路径和慢速路径。慢速路径更能解决第一个数据包如何通过设备的问题。可能需要检查ACL或路由。它需要判断许多相关的策略。某些东西,所有后续消息都可以通过快速路径转发;

还有一些与指令相关的优化,使用英特尔的特殊指令来提高性能;

此外,对于多核架构,NUMA多节点内存访问可以通过访问本地节点内存来实现更好的延迟性能。

客户端首先通过IP访问LVS的VIP。原始IP是客户端,目标IP是LVS的VIP。在FullNAT转换之后,原始IP成为LVS的本地地址,目标地址是LVS选择的RS地址,因此RS在RS中。返回数据包更容易。只要路由可达,数据包就会被传送到LVS。您无需在RS上进行特殊配置。右侧是DNAT + SNAT转换,数据包可以通过LVS转发回客户端。此方法主要为应用程序部署灵活性带来灵活性

通过并行化实现LVS性能的提高,性能无法线性提高。因为每条路径都需要访问全局资源,所以不可避免地会引入开箱即用的锁,此外,同一链路上的消息可能会分散在不同的核心上,当你去访问全局资源时,也会导致丢失缓存。

因此,我们使用RSS技术将相同的五源组消息丢弃到同一个CPU,以确保入站方向上同一连接上的所有数据包都可以切换到同一个CPU。每个核心在转发时使用当前电流。 CPU上的本地地址由一些fdir规则设置。当数据包返回时,后端RS访问的目标地址是相应CPU上的本地地址,可以将其发送到指定的CPU进行处理。交给相同的CPU进行处理,将流与不同的CPU分开。

此外,我们在每个CPU上复制所有配置资源,包括动态缓存资源,并本地化资源。这允许从LVS访问整个流到转发和访问的资源。本地资源固定在一个核心上。性能提高,线性度提高。

经过我们的改进,LVS的具体表现如下:

由于考虑了灾难恢复和性能改进,我们已经完成了集群部署。每个地区都有不同的设备室。每个计算机房都有多个调度单元,每个单元都有多个LVS设备。每个LVS都经过优化,以实现更高的性能,更大的容量,单个LVS可以达到4000W PPS,600W CPS、单组可以达到1亿个并发;

支持区域、IDC、集群和应用程序级别的高可用性;

七层反向代理具有更长的路径和更复杂的处理,因此其性能远低于LVS。我们更注重单机和集群的性能。堆设备可以解决集群的性能问题。如果单台机器没有改进,成本将始终增加。从性能的角度来看,有以下优化思路和方向:

基于内核开发,例如优化协议栈;

基于Aliscoket的优化,Alisocket是Ali开发的高性能TCP协议栈平台。底层是DPDK,它定位资源并分发不同的消息核心处理。表现非常出色。

HTTPS服务越来越多,流量也在逐渐增加。我们使用硬件加速卡来进行加密和解密以及HTTPS会话多路复用的性能改进。

基于Web传输层的性能优化。

例如,从灵活性的角度来看,一些公司的应用程序与用户热点有关。当社交网络热点出现时,访问量将大大增加。我们固有的基于物理机器的负载均衡模型在弹性扩展方面受到限制。在这方面,我们可以使用VM来做,在VM上运行反向代理功能,我们将监控实例负载情况,并根据实时需求进行弹性扩展和收缩。
收藏
扫一扫关注我们