强大核心功能矩阵,详解腾讯云负载均衡 CLB 高可靠高性能背后架构

文章正文
发布时间:2024-12-20 09:43

1 前言腾讯云负载均衡(Cloud LoadBalancer),简称 CLB, 负载均衡通过设置虚拟服务地址(VIP)将来自客户端的请求按照指定方式分发到其关联的多台后端云服务器,服务器将请求的响应返回给负载均衡器,负载均衡再将响应发送到用户,这样就向互联网用户隐藏了内网结构,阻止了用户直接访问后端云服务器,使得服务器更加安全,可以阻止对核心网络栈和运行在其它端口服务的攻击。通过其作用可以看出负载均衡作为整个服务的网关入口,那么保证其服务在高性能的前提下既稳定又可靠显得至关重要。本文为大家介绍一下腾讯云公网负载均衡高可靠,高性能的背后做了哪些事。

2 腾讯云负载均衡基础架构 2.1 多级容灾的架构,实现高可靠首先对负载均衡对流量转发有个大致的认识,如图 1 客户端发起请求来访问负载均衡提供的公网 VIP,CLB 再根据指定的方式通过内网转发给后端的服务器。

在 CLB 的技术架构图出来前,大家可以想象一下,对于转发设备最关键的要有交换机和路由器,以及真正的转发机器,那么交换机和路由器如何部署才能有更高的可靠性呢,转发机器以怎样的结构组合才能带来高性能呢,简单的串行网络架构必然存在单点故障,其作为关键路径在出现故障时,对整个服务来讲是致命的,所以多交换机部署,转发机器集群方式部署势在必行。如图 2 左所示,在单机房得交换机和转发机器的部署情况如下,其中 LD 为转发机器,以下 4 台机器为一个集群,从图中可以看到,当某个设备发生故障,通过 OSPF 路由协议来快速侦测故障设备,进而秒级剔除相关设备,一个集群中多个 LD 对长连接进行同步,当其中 LD 挂了之后,请求落在另外一台 LD 上,对于用户来讲请求还是无损。从架构上也可以看出交换机层面的容灾,而不同的交换机部署在不同的机架位,实现了机架层面的容灾,当 LD 发生故障时,快速剔除故障转发机器,并能够自动添加备用的机器,快速的补齐性能损耗。

从单机房的介绍来看,还未有多机房的容灾能力,该能力对于云厂商来讲也是必不可少的,IDC A 和 IDC B 会配置相同的 VIP 等相关信息,BGP A 和 BGP B 出口通过配置不同的 COST 值来确定主备,当某个 IDC 出现了故障,那么自动调整 COST 值进行切换,可以在秒级实现不同 IDC 间容灾能力。以上即为多级容灾的架构。

从架构上实现了高可靠。

2.1 数据流转发方式,满足多种网络结构公网负载均衡当前支持的协议主要有 TCP、UDP、HTTP、HTTPS,对于四层和七层的协议,转发的方式和结构不一样,腾讯云的云主机从之前的基础网络逐步向私有网络过渡,为了满足多种网络结构,CLB 的数据转发方式如图 3 所示:

对于 HTTP、HTTPS 协议的支持情况,四层集群下面还会有一层七层集群,基于 NGINX 开源项目来做的七层转发,具体与后端 CVM 的通信方式一致,对于物理网络的机器,转发到母机的数据包格式是 IPIP 包,经母机上的 KO 进行解包,并将解封的 IP 包转给后端的 CVM,对于私有网络的 CVM,封包格式为 GRE 包,对应的母机上依赖于 VPC.KO 来解包,从 CVM 上可以观察到收到的 IP 包的中 SourceIP 段无论是四层还是七层都是真实的来源 IP,其实就是在封包的时候,将真实的客户端 IP 封装到了 IPIP 包或者 GRE 包中,从而满足用户获取真实来源 IP 的诉求。

3 五大关键功能 3.1 强大过载保护功能,保证数据整体安全当前集群本身的性能在未引入 DPDK 版本之前,单机的可以达到 160 万 PPS,连接数 1.2 个亿,入带宽可以到达 10Gbps,当真实数据超过最大能力之后,为了不发生雪崩故障,集群的自我保护能力就显得极为重要,最小程度上减小对客户带来的影响。如图,内核中的管理模块 tvsadm 会周期的去拉取统计数据,当全局统计数据接近了警戒高水位 (后台配置例如不能超过最大性能的 70%),那么此时就会开启 QOS 能力,给规则设定一个配额,然后根据令牌桶算法进行配额限速,将整理的数据保持在安全范围之内,直到整体数据趋于安全。

3.2 抗 DDoS 大规模攻击,强力保护后端安全当有大量 synflood 攻击时,由于后端母机的连接池资源有限制,而且后端 CVM 本身的性能也不固定,所以在有大量 DDoS 攻击时不能直接透传给后端服务器,此时 CLB 会暂时代理 TCP 连接,知道三次握手真正完成客户端发来数据后,才与后端 CVM 进行真正的交互。

而 CLB 本身资源也是有限制的,此时就不能全部代理半连接的握手,具体方式即通过 LRU 淘汰机制来实现半连接队列的维护。可能有一个疑问,当有更大量的 DDoS 攻击来了之后,将如何应对呢?这个时候公司级抗 DDoS 攻击平台此时就会大显身手了,大禹系统,对 DDoS 攻击进行识别清洗,当过大对平台造成影响时会封堵该 VIP。维护半连接队列的算法流程如下图所示:

3.3 高性能的 HTTPS,提升活动运营及防攻击能力 HTTPS 为什么访问比较慢为什么消耗 CPU 呢?因为它很重,HTTPS 的重,体现在如下几方面:

1. 大量的计算。SSL 的每一个字节都涉及到较为复杂的计算。

2. TLS 协议的封装和解析。HTTPS 所有数据都是按照 TLS record 格式进行封装的。所有的数据都需要经过如下步骤才能发送和读取:

3. 协议的网络交互。从 TLS 的握手过程可以看出,即使这个过程不需要进行任何计算,TLS 的握手也需要至少 1 个以上的网络交互。

HTTPS 在计算方面的影响,包括计算原理和计算性能的优化。总体来说,HTTPS 主要有如下计算环节:a. 非对称密钥交换。比如 RSA, Diffie-Hellman, ECDHE. 这类算法的主要作用就是根据客户端和服务端不对称的信息,经过高强度的密钥生成算法,生成对称密钥,用于加解密后续应用消息。  b. 对称加解密。服务端使用密钥 A 对响应内容进行加密,客户端使用密钥 A 对该加密内容进行解密。反之亦然。c. 消息一致性验证。每一段加密的内容都会附加一个 MAC 消息,即消息认证码。简单地说就是对内容进行的安全哈希计算。接收方需要校验 MAC 码。d. 证书签名校验。这个阶段主要发生在客户端校验服务端证书身份时。

HTTPS 协议中最消耗 CPU 计算资源的就是密钥交换过程中的 RSA 计算。也是我们优化的最主要对象。具体方式 a. 算法分离。将最消耗 CPU 计算的过程分离出来,不使用本地 CPU 来计算。b. 并行计算。使用 SSL 硬件加速卡或者空闲 CPU 并行计算,提升计算效率。c. 异步代理。算法分离和计算的过程是异步的,不需要同步等待 SSL 加速计算的结果返回。

通过异步代理完成 RSA 的私钥计算。ssl 完全握手性能由 18000qps 提升到了 63000qps, 提升了~3.5 倍。节省了接入机器成本,提升了业务的活动运营及防攻击能力。

3.4 DPDK 版本优化,负载均衡整体性能飞跃 DPDK 全称为 Date plane development kit,是一个用来进行包数据处理加速的软件库。与传统的数据包处理相比,DPDK 具有以下特点:

1) 轮询:在包处理时避免中断上下文切换的开销,

2) 用户态驱动:规避不必要的内存拷贝和系统调用,便于快速迭代优化

3) 亲和性与独占:特定任务可以被指定只在某个核上工作,避免线程在不同核间频繁切换,保证更多的 cache 命中

4) 降低访存开销:利用内存大页 HUGEPAGE 降低 TLB miss,利用内存多通道交错访问提高内存访问有效带宽

5) 软件调优:cache 行对齐,预取数据,多元数据批量操作

经过这样的优化后负载均衡整体的性能参数有了质的飞跃,如下图

3.5与腾讯天御合作,实现百万级黑名单功能

某公司接入腾讯云,其中一个需求是防恶意刷票,对恶意用户的请求进行屏蔽,其业务架构如图:请求从 cdn 节点到负载均衡后,真实的客户端 IP 会在 HTTP 协议的头部中携带,此时负载均衡从七层协议的头部中获取真实客户端 IP,进而实施拦截。对于一个规则来讲,负载均衡的设置黑名单的数量级在百万级别,通过与腾讯天御系统合作,后端 CVM 拿到真实客户端 IP 后,转给天御,天御系统进行模型训练,判断 ip 是否是恶意请求,进而将黑名单写入负载均衡,从而实现百万级黑名单的功能。

4 总结本文介绍了腾讯云负载均衡的高可靠、高性能的背后一些技术细节,在满足用户需求的基础上提供更加让用户满意的负载均衡是团队一直不变的信念。后续提供更多的技术细节与大家分享。

首页
评论
分享
Top