SLB高性能与高可用技术实践全解析

简介: 云栖社区2017在线技术峰会上,阿里云刺背分享了双十一以及红包期间SLB关于高性能、高可用性方面做的一些技术改进。他详细介绍了软件负载均衡SLB及其部署,从系统架构方面介绍了高性能的负载均衡技术,从后端服务器、可用区内、可用区间三个方面介绍了高可用的负载均衡技术。

从支付宝官方公布的数据来看,在除夕当天大约有2亿人参加红包活动。今年的SLB和往年是不一样的,SLB进行了平台重构,为业务提供了跨可用区的方案。以下内容根据直播视频整理而成。

直播回顾:点击进入

pdf下载:点击进入

全集团的流量入口

409c18e58530525a3f11b94c0f9bccfbe1d1328e

SLB成了公有云、云产品服务、电商平台、交易平台的流量入口。

负载均衡简介

负载均衡即分担负载、提供服务,具体的说是当访问请求进入到SLB后,SLB会做后端服务器的选择,通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。最大的好处是后端的服务器可以动态扩容。

软件负载均衡

fb4a8aba2cedd58558a04fb275f0790a36b7096e

整个集团的负载均衡都是基于软件实现的,SLB(sever load balancer)是基于开源的LVS(Linux Virtual Server)实现的。SLB的优点包括:自主、可控,由于是代码是开源的,代码是可以自主修改的,而新的功能也可以自主加入;可伸缩性,整个SLB是集群部署的,通过BGP发布VIP、local adress路由等,实现集群负载通过路由ecmp将流量引到不同的服务器上;高可靠性,SLB通过多个维度提供了高可用性的保障;易于部署,SLB跑在普通的X86服务器上。

SLB

ec8775175d1d39070976b966699ec2ff6a5a0ac8

整个软件SLB分为两部分:基于TCP的四层负载均衡和基于http/https的七层负载均衡。红包业务主要使用了四层负载均衡。

SLB集群部署

177d026acb29e81e5cfc1c722e8167a690e67d87

上图是以杭州Region为例的集群部署图。比如,在杭州选择了两个可用区(可用区A和可用区B,是不同的IDC机房)。四层负载均衡LVS和七层负载均衡Tengine都是集群化部署的。对于四层负载均衡,当访问流量从Internet进来之后首先会经过LVS集群,直接转发给后端的ECS。对于七层负载均衡,当访问流量从Internet进来之后首先会经过LVS集群,然后经过Tengine集群再转发给后端的ECS。七层负载均衡比四层负载均衡多了一次集群内的转发,虽然造成少量的性能开销, 但是给客户带来了一些feature和HTTPS卸载的支持。

高性能的负载均衡

新的SLB最大的不同是从内核转发模式改为用户态转发模式,从系统架构上解决性能问题;支持FULLNET的转发模式,摆脱部署时网络的限制;利用硬件特性,实现CPU完全并行化处理,性能大幅提升;利用NUMA 特性,给每个NUMA保存一份核心数据;利用CPU硬件指令Crc32使消耗降低8倍。

从系统架构解决性能问题

937af7db57c81ff825c134025ce3a127acb1d5b9

上图中,左边部分是整个系统的架构图。Control Plane为控制面,Data Plane为数据面,设计采用分离方式。控制面主要做两件事情:负责路由的发布,使用OSPF和BGP来发布VIP和local address路由;从控制系统中接收负载均衡的配置下发到数据面。数据面的每个CPU上都有一个数据转发的线程来处理数据,从业务网卡进来的数据包会直接被Data Plane的线程处理并发送出去。

该系统架构实现了:数据面轻量。从内核处理改为用户态处理,减少了原架构内核处理的中断,此外将Data Plane的线程从NUMA中隔离出来专门用于转发保证了CPU不会被抢占。每个CPU是并发处理数据的,没有数据的交互,因此也没有锁。充分发挥硬件。核心数据表是CPU cache对齐的。采用hugepage技术,减少TLB的miss,提升性能。利用了NUMA的特性,因为路由表和ARP表在服务器上一般是两路CPU的,每个NUMA上有一份数据,当CPU访问路由表或者ARP表的时候,就会就近取本NUMA上的数据。充分利用了网卡的checksum offload等功能。优化流程和算法。把内核中的管理结构由链表全都换为hash结构,去掉了很多冗余的流程。

SLB性能关键点

8b5d56a637e5a8da3c81eb36bc444204359fba55

当用户访问LVS后面服务器的时候,在LVS上做DNAT+SNAT,摆脱了传统DR模式和NAT模式对网络的依赖。通过实现FULLNET模式的转发,网络不再受限,机房可以很轻松部署在机房中,本机房服务器和跨机房服务器都可以作为后端服务器提供服务。

a40cc25bbc4de14a50cf9b5b3f0437ce1e0ee7ac

另外一个性能优化最关键的点在于CPU的并行化。从图中可以看出,物理网卡NIC上有多个CPU,这里也是采用了FULLNET的转发模式。当用户的访问到达SLB之后,源IP是client,目的IP是vip,系统会配置网卡的RSS策略,当收到数据包之后使用数据包的源IP和目的IP进行hash,使这些数据流均匀散落在CPU1到CPUN之间。这样的策略可以保证从client 发起的同一条流的数据包,通过RSS后都同时落在同一个CPU上。

性能提升

e9ec3db228a02fb713eb03e0344262b1d4ce50c3

性能的提升如上图所示,蓝色是LVS版本,红色是性能优化版本。

高可用的负载均衡

高可用的负载均衡体现为五个方面:后端服务器高可用,使用健康检查及时剔除异常RS;服务器高可用,四网口,双上联交换机,路由优先级;集群高可用,热升级无感知,单机故障无感知,交换机故障无感知;可用区间高可用,主备双SITE,秒级切换;安全防护,SynFlood防御。

后端服务器高可用

c9ba6e6d1408357b0b3d489b1feef92ebfd4fd54

后端服务器高可用主要体现在两个方面。比如,4台SLB机器独立向后端的RS做健康检查,当RS1出现错误情况变得不可用的时候,转发服务器会及时发现异常的服务器,从转发列表中剔除,后续的流量会转发给RS2。这样就保证到了当业务的服务器有一个服务器异常时会被自动的剔除。支持的健康检查方式也有两种:通过TCP端口探测;HTTP请求探测。

可用区内高可用

f383b59f17be802538a79a42cc3212ec24df837a

上图是网络拓扑图。最上方是两个路由器,接着两个交换机,转发服务器有4个口分别接在两个交换机上。路由器、交换机和服务器以及布线是全冗余的,任意一个路由器、交换机或者服务器接口挂掉之后,流量会从BACKUP的方向去提供服务。实现了双A的网络架构,这样在正常情况下,所有的路由器、交换机、服务器都是服务的、活跃的,没有冷备设备的。另外,在可用区内实现了实时会话同步功能,当用户的请求通过SLB去访问后台服务的时候,假如这个请求落在了转发服务器1上,那么在转发服务器1上会创建一个记录源IP、目的IP、转发后的local address等信息。这个session建立好之后,会把这个session通过组播包的方式发送给交换机,交换机收到这个包之后会把这个组播的请求发到其他服务器上,其他服务器会把请求拿出来在本地创建一个备份的session。假如服务器1挂掉了,网络会重新选择路由,假如这条流落在了服务器2上,可以根据之前的session转发信息进行数据包的转化,然后将数据包正常发送出去。这样的好处是当可用区内的任意一个设备出现问题时,业务是感觉不到的。

可用区间的高可用

13d7741c946b3ab593a79d296b5394acbb838276

如上节中讲到,如果可用区A内的所有路由器全都挂掉,此时可用区内的容灾就失效了。可用区间的容灾就是处理整个可用区A挂掉的情况,具体做法将流量切换到另外一个可用区B,由于存在主备关系,可用区B也有这些转发规则,业务的流量也是不受影响的,可以通过可用区B里的SLB提供服务。实现可用区间容灾最核心的技术是使用了大小路由,由于用户的连接都要全部断开,所以用户是能感觉到的,对业务是有影响的。

SLB可用性全景图

456930cc0336abfe695a8e083743aa2918b06b59

从下到上来看,最下面是多台服务器,往上是SLB集群部署,然后是可用区间的高可用性。此外,如果用户配合使用云解析(智能DNS)的话,可以做到跨区域的高可用。


36363ff0e390bdb1823c55db4cb702a5091bf86f

未来主要从硬件升级和高可用两方面入手。
相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
28天前
|
机器学习/深度学习 前端开发 Windows
【夯实技术基本功】「底层技术原理体系」全方位带你认识和透彻领悟正则表达式(Regular Expression)的开发手册(正则符号深入解析 )
【夯实技术基本功】「底层技术原理体系」全方位带你认识和透彻领悟正则表达式(Regular Expression)的开发手册(正则符号深入解析 )
32 0
|
1月前
|
安全 前端开发 数据安全/隐私保护
【教程】移动应用安全加固技术解析
【教程】移动应用安全加固技术解析
|
1月前
|
安全 Cloud Native Linux
CMake Install:深度解析与实践(二)
CMake Install:深度解析与实践
44 0
|
1月前
|
Unix 编译器 Linux
CMake Install:深度解析与实践(一)
CMake Install:深度解析与实践
59 0
|
1月前
|
存储 安全 编译器
【C++ 17 新功能 std::visit 】深入解析 C++17 中的 std::visit:从原理到实践
【C++ 17 新功能 std::visit 】深入解析 C++17 中的 std::visit:从原理到实践
70 0
|
15天前
|
存储 中间件 关系型数据库
数据库切片大对决:ShardingSphere与Mycat技术解析
数据库切片大对决:ShardingSphere与Mycat技术解析
24 0
|
28天前
|
存储 NoSQL 算法
【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)(二)
【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)
45 0
|
1天前
|
大数据 图形学 云计算
EDA设计:技术深度解析与实战代码应用
EDA设计:技术深度解析与实战代码应用
|
4天前
|
JavaScript 前端开发 UED
深入解析JavaScript原生操作DOM技术
【4月更文挑战第22天】本文深入探讨JavaScript原生DOM操作技术,包括使用`getElement*`方法和CSS选择器获取元素,借助`createElement`与`appendChild`动态创建及插入元素,修改元素内容、属性和样式,以及删除元素。通过掌握这些技术,开发者能实现页面动态交互,但应注意避免过度操作DOM以优化性能和用户体验。
|
5天前
|
存储 安全 网络安全
解析企业邮箱迁移:从技术到策略的完全指南
公司邮箱迁移是业务连续性和数据安全的关键步骤。涉及数据加密、安全存储和密钥管理,确保转移过程中的完整性与机密性。迁移应尽量减少对业务影响,通过IMAP/POP协议实现无缝转移。以Zoho Mail为例,需开启服务,获取授权码,设置转移,选择内容,填写原邮箱信息,最后验证数据。迁移前后注意备份和问题解决,确保顺利进行。
9 0

推荐镜像

更多