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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
网络型负载均衡 NLB,每月750个小时 15LCU
全局流量管理 GTM,标准版 1个月
简介: 云栖社区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

未来主要从硬件升级和高可用两方面入手。
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
3天前
|
存储 缓存 安全
Java内存模型深度解析:从理论到实践####
【10月更文挑战第21天】 本文深入探讨了Java内存模型(JMM)的核心概念与底层机制,通过剖析其设计原理、内存可见性问题及其解决方案,结合具体代码示例,帮助读者构建对JMM的全面理解。不同于传统的摘要概述,我们将直接以故事化手法引入,让读者在轻松的情境中领略JMM的精髓。 ####
20 6
|
12天前
|
负载均衡 算法 安全
slb高性能
【11月更文挑战第4天】
22 3
|
12天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
46 3
|
12天前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
37 2
|
1天前
|
存储 供应链 算法
深入解析区块链技术的核心原理与应用前景
深入解析区块链技术的核心原理与应用前景
12 0
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
探索深度学习与自然语言处理的前沿技术:Transformer模型的深度解析
探索深度学习与自然语言处理的前沿技术:Transformer模型的深度解析
17 0
|
11天前
|
存储 供应链 物联网
深入解析区块链技术的核心原理与应用前景
深入解析区块链技术的核心原理与应用前景
|
11天前
|
存储 供应链 安全
深度解析区块链技术的核心原理与应用前景
深度解析区块链技术的核心原理与应用前景
20 0
|
11天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
39 2
|
1月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
70 0

推荐镜像

更多
下一篇
无影云桌面