1 前言

腾讯云负载均衡(Cloud LoadBalancer),简称CLB, 负载均衡通过设置虚拟服务地址(VIP)将来自客户端的请求按照指定方式分发到其关联的多台后端云服务器,服务器将请求的响应返回给负载均衡器,负载均衡再将响应发送到用户,这样就向互联网用户隐藏了内网结构,阻止了用户直接访问后端云服务器,使得服务器更加安全,可以阻止对核心网络栈和运行在其它端口服务的攻击。

通过其作用可以看出负载均衡作为整个服务的网关入口,那么保证其服务在高性能的前提下既稳定又可靠显得至关重要。本文为大家介绍一下腾讯云公网负载均衡高可靠,高性能的背后做了哪些事。

2 腾讯云负载均衡基础架构

2.1 多级容灾的架构,实现高可靠

首先对负载均衡对流量转发有个大致的认识,如图1客户端发起请求来访问负载均衡提供的公网VIP,CLB再根据指定的方式通过内网转发给后端的服务器。

图1

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

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

图2

从架构上实现了高可靠。

2.1 数据流转发方式,满足多种网络结构

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

图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能力,给规则设定一个配额,然后根据令牌桶算法进行配额限速,将整理的数据保持在安全范围之内,直到整体数据趋于安全。

图4

3.2 抗DDoS大规模攻击,强力保护后端安全

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

图5

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

图6

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行对齐,预取数据,多元数据批量操作

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

图7

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

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

图8

4 总结

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

强大核心功能矩阵,详解腾讯云负载均衡CLB高可靠高性能背后架构的更多相关文章

  1. 腾讯云负载均衡CLB的那些“独门利器”

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:李想 腾讯人做产品一直是很贴近用户的需求的,腾讯云也不例外.负载均衡器作为公有云上的最基础的网络服务,几乎每家云厂商都会提供,虽然负载均衡 ...

  2. 腾讯云负载均衡CLB

    负载均衡 使用场景: ①购买一个负载均衡LB实例 ②一级.二级域名都解析到VIP上 ③创建HTTP/HTTPS监听器 ④绑定云主机 在nginx中只需要配置好伪静态和相关设置就ok了

  3. 性能超前,详解腾讯云新一代Redis缓存数据库

    背景 当前内存数据库发展迅速,用户对于存储系统的要求也越来越高,为了满足各类业务场景的需要,腾讯云设计了新一代的内存数据库,不但保留了原来系统的高性能,高可用等特性,同时还兼容了当前流行的Redis原 ...

  4. nginx详解反向代理、负载均衡、LNMP架构上线动态网站(week4_day1_part1)-技术流ken

    nginx介绍 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理 ...

  5. nginx详解反向代理、负载均衡、LNMP架构上线动态网站

    简介 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.N ...

  6. haproxy 配置文件详解 之 ACL 智能负载均衡

    由于HAProxy 可以工作在七层模型下, 因此,要实现 HAProxy 的强大功能,一定要使用强大灵活的ACL 规则,通过ACL 规则可以实现基于HAProxy 的智能负载均衡系统. HAProxy ...

  7. 腾讯云--腾讯云sdk-实现脚本修改腾讯云负载均衡权重

    一.请确认你的当前python环境为python 2.x 获取 python 版本的方法 (linux shell) # python -v python 2.7.11 二.CLB SDK下载与配置 ...

  8. 云计算:Linux运维核心管理命令详解

    云计算:Linux运维核心管理命令详解 想做好运维工作,人先要学会勤快: 居安而思危,勤记而补拙,方可不断提高: 别人资料不论你用着再如何爽那也是别人的: 自己总结东西是你自身特有的一种思想与理念的展 ...

  9. iOS:核心动画的详解介绍:CAAnimation(抽象类)及其子类

    核心动画的详解介绍:CAAnimation(抽象类)   1.核心动画基本概念 Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍! 使用它 ...

随机推荐

  1. Enable multi-tenancy on ironic

    Multi-tenancy 是openstack ironic从Ocata版本开始支持的新特性,通过network-generic-switch插件控制交换机,Ironic可以实现在不同租户间机网络隔 ...

  2. 在Hadoop2.2基础上安装Spark(伪分布式)

    没想到,在我的hadoop2.2.0小集群上上安装传说中的Spark竟然如此顺利,可能是因为和搭建Hadoop时比较像,更多需要学习的地方还是scala编程和RDD机制吧 总之,开个好头 原来的集群: ...

  3. ubuntu 下命令行播放器mplayer 使用详解

    ubuntu 下命令行播放器mplayer 使用详解 2011-01-02 21:00:42|  分类: Linux/Unix |  标签: |字号大中小 订阅 使用 MPlayer 播放媒体文件最简 ...

  4. mysql常用基础操作语法(三)~~对数据的增删改操作【命令行模式】

    1.插入单条数据:insert into tablename(字段名1,字段名2,...) values(值1,值2,...); 从图中可以看出,插入时不需要每个字段都有值(在没有相关的约束前提下), ...

  5. directX播放程序

    enum PLAYSTATE {Stopped, Paused, Running, Init};PLAYSTATE g_Current=Init;HWND      ghApp;HINSTANCE g ...

  6. OpenStack_I版 2.keystone部署

    生成keystone默认证书,指定用户 修改keystone主配置文件 第625行,修改数据库连接方式   修改完成同步数据库 同步完成可以查看数据库是否有表生成 为了以后调试keystone方便,现 ...

  7. winfrom如何在listview中添加控件

    private Button btn = new Button(); private void Form1_Load(object sender, EventArgs e) { ListViewIte ...

  8. json省市县数据源

    {cityData,"Code":""},{"Name":"牡丹江市",","Code": ...

  9. WRT 版本说明

    std_generic 标准通用版nokaid 是不带XBOX支持的(Kai代表连接游戏平台到网络上.)virtual** 表示支持虚拟专用网络的版本VOIP 带VOIP表示支持网络电话的版本.meg ...

  10. JAVA简便解析json文件

    JAVA简便解析json文件 首先放上我要解析的json文件: { "resultcode":"200", "reason":"S ...