面向C10M时代的MiddleBox之 - 高性能四层负载均衡设备AGW

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 面对需求的不断提高,几年前我们还在为解决C10K 问题而努力,现在已经开始面临C10M 问题的挑战。

近年来,随着互联网在全球的快速发展和普及,网民数量的不断增加,生活中各方面对互联网依赖的增强,带来互联网访问量的爆炸性增加,催升了诸如google,facebook等巨型站点,国内也有BAT 等几家公司旗下的站点访问量跻身世界前十。

面对需求的不断提高,几年前我们还在为解决C10K 问题而努力,现在已经开始面临C10M 问题的挑战。

C10M意味着什么,一个比较流行的解释如下:

  • 承载10million个并发连接
  • 传输10million packets/秒
  • 新建1million connections/秒
  • 10 gigabits/秒

虽然对于某些具体数据,比如10G带宽传输数据是否太少,10M并发连接中有多少活跃连接等,还有待商榷,但是C10M 问题从数量上给我们描绘了一幅前景。

image.png

MiddleBox(acomputer networking device that transforms, inspects, filters, or otherwisemanipulates traffic for purposes,参见http://en.wikipedia.org/wiki/Middlebox)作为网络的边界和入口,是流量汇聚和集中的关键位置,会首先面临C10M 问题的考验。MiddleBox在阿里巴巴集团中广泛使用,主要包括4/7层负载均衡设备,4层代理网关等,本文主要分享一些在4层负载均衡设备方面的一些工作和思考。

1、无锁实现:数据平面的无锁化,是通过上述的多队列功能实现了,每个core维护自己的session表,网卡将I/O流分给多个CPU内核做并行处理,无需争用锁。控制平面的无锁化,因为对vip表修改等控制操作在整个周期中占比很小,我们没有必要因为管控命令而对数据平面的操作加锁,我们使用定期poll的方式执行控制命令,这样可以实现控制平面的无锁化。第2点和第3点,解决了C10M多核可扩展性问题。

2、Hugepage:因为网关设备的专用性,我们利用HugePage功能,为AGW分配很多1GB的大页面专门使用,这样可以减少TLBMiss情况,并减少处理TLBMiss所需的内存操作,同时对于频繁分配的数据结构,采用mempool机制。

3、核心数据支持NUMA:现今服务器体系大都是numa架构,处理器能快速的访问在同一个numa单元的内存。在AGW系统设计中,我们将频繁使用的核心数据结构(如session表)分布在各个core对应numa节点的内存中。同时,在多网卡的环境中,网卡绑定pci也会对应到不同的numa节点上,我们多核多队列的架构也利用了这一特性,将同一numa节点的网卡队列和CPU对应起来,避免数据的跨numa节点访问,这样可以缓解总线瓶颈和高速cache争用,提升系统性能。第4,5点解决了C10M的内存可扩展性问题。

在C10K 时代,催生了epoll等技术的出现。对于4层负载均衡技术来说,主要是基于内核netfilter框架来处理网络流量,这种机制在C10M 的情况下有些力不从心,造成性能瓶颈的原因主要有以下几点:

1、网卡中断:linux系统内核通过软中断的方式来中断工作,处理网络数据包。当网卡接收的流量不断增加,系统会处理中断的时间也会随之增长,中断严重影响了服务性能。

2、linux网络协议栈:传统的包处理会经过linux网络协议栈,linux网络协议栈的实现复杂,因此我们需要一个收包,发包的快速路径,更直接的面对数据包。

3、多核的扩展性:面对的cpu核数越来越多,传统的linux内核,协议栈实现并没有很好的支持多核,大量的数据共享使我们不得不使用大量的锁来控制并发,我们期望系统的性能同cpu核数成线性相关,需要的是一个像高速公路的架构而不是一个靠红绿灯控制的十字路口的架构。

image.png

所以面对C10M,我们需要解决的问题是主要有几个方面:

  • 包的可扩展性
  • 多核的可扩展性
  • 内存的可扩展性

针对这几个问题,阿里技术保障部的网络产品团队自主研发出产品AGW(AliGateWay),完全在应用层实现,抛弃了传统Linux内核netfilter网络包处理框架,实现了fullnat+synproxy的四层负载功能。AGW系统设计的关键技术主要有以下几点:

1、用户态网卡驱动:利用linuxuio,实现用户态网卡驱动,绕过linux协议栈,使应用程序处理数据包的路径更加直接,不让操作系统来处理数据包,解决了C10M的包可扩展性问题。

2、多核多队列:AGW系统为均衡功能分配专用的CPUcore, 与内核隔离,将CPU和处理线程绑定,poll方式收发包,这样可以避免网卡中断操作以及操作系统进行线程切换所带来的上下文切换开销。另外,网卡支持多队列和RSS,我们利用这一功能,将数据包根据CPU核数进行分流,每个core维护自己的session表,处理一个队列接收到的数据包。

3、无锁实现:数据平面的无锁化,是通过上述的多队列功能实现了,每个core维护自己的session表,网卡将I/O流分给多个CPU内核做并行处理,无需争用锁。控制平面的无锁化,因为对vip表修改等控制操作在整个周期中占比很小,我们没有必要因为管控命令而对数据平面的操作加锁,我们使用定期poll的方式执行控制命令,这样可以实现控制平面的无锁化。第2点和第3点,解决了C10M多核可扩展性问题。

4、Hugepage:因为网关设备的专用性,我们利用HugePage功能,为AGW分配很多1GB的大页面专门使用,这样可以减少TLBMiss情况,并减少处理TLBMiss所需的内存操作,同时对于频繁分配的数据结构,采用mempool机制。

5、核心数据支持NUMA:现今服务器体系大都是numa架构,处理器能快速的访问在同一个numa单元的内存。在AGW系统设计中,我们将频繁使用的核心数据结构(如session表)分布在各个core对应numa节点的内存中。同时,在多网卡的环境中,网卡绑定pci也会对应到不同的numa节点上,我们多核多队列的架构也利用了这一特性,将同一numa节点的网卡队列和CPU对应起来,避免数据的跨numa节点访问,这样可以缓解总线瓶颈和高速cache争用,提升系统性能。第4,5点解决了C10M的内存可扩展性问题。

在阿里巴巴集团,业务和规模驱动技术不断向前,技术保障部网络产品研发团队长期致力于高性能Middle Box的研发,不断满足公司高并发访问的业务需求。AGW系统的开发与上线,可以为双十一提供有力的保障,为业务的快速增长保驾护航。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
负载均衡 应用服务中间件 Linux
Nginx系列教程(14) - LVS+KeepAlived+Nginx实现高性能负载均衡集群
Nginx系列教程(14) - LVS+KeepAlived+Nginx实现高性能负载均衡集群
1166 0
|
12天前
|
负载均衡 算法 安全
slb高性能
【11月更文挑战第4天】
23 3
|
6月前
|
网络协议 Linux C语言
Intel HDSLB 高性能四层负载均衡器 — 基本原理和部署配置
本篇主要介绍了 Intel HDSLB 的基本运行原理和部署配置的方式,希望能够帮助读者们顺利的把 HDSLB-DPVS 项目 “玩” 起来。
311 9
Intel HDSLB 高性能四层负载均衡器 — 基本原理和部署配置
|
4月前
|
负载均衡 安全 Cloud Native
云上负载均衡:构建高可用、高性能的网络应用架构
与云原生技术深度融合:随着云原生技术的普及和发展未来的云上负载均衡将更加紧密地与云原生技术相结合。例如与Kubernetes等容器编排平台集成实现自动化的服务发现和路由管理;与Serverless架构结合提供无缝的流量接入和请求处理能力。 安全性能提升:面对日益严峻的网络安全威胁云上负载均衡将更加注重安全性能的提升。通过引入加密传输、访问控制、DDoS防护等安全措施确保网络流量的安全性和隐私性;同时还将建立完善的安全监控和应急响应机制以应对各种安全事件和突发事件。 支持多协议和多场景:未来的云上负载均衡将支持更多种类的网络协议和应用场景以满足不同用户和业务的需求。例如支持HTTP/2、
245 0
|
6月前
|
边缘计算 负载均衡 网络协议
Intel HDSLB 高性能四层负载均衡器 — 快速入门和应用场景
在云计算、SDN、NFV 高速发展并普遍落地的今天,随着上云业务的用户数量越来越多、数据中心的规模越来越大,云计算规模成本效应越来越重要。因此,云计算的集约式系统架构逻辑就决定了网络的性能是一个永恒的话题。在云网络的技术体系中,对性能追求不仅是方方面面的,而且是极致严苛的。性能每提升一点,成本就降低一分,收益就提高一些,产品的竞争力就更上一层楼。
120 0
Intel HDSLB 高性能四层负载均衡器 — 快速入门和应用场景
|
6月前
|
负载均衡 网络协议 应用服务中间件
【亮剑】在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。
【4月更文挑战第30天】本文介绍了在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。HAProxy是一个高性能的开源TCP和HTTP负载均衡器,适合处理大量并发连接;Nginx是一个多功能Web服务器和反向代理,支持HTTP、HTTPS和TCP负载均衡,同时提供缓存和SSL功能;Keepalived用于监控和故障切换,通过VRRP实现IP热备份,保证服务连续性。文中详细阐述了如何配置这三个工具实现负载均衡,包括安装、配置文件修改和启动服务,为构建可靠的负载均衡系统提供了指导。
163 0
|
缓存 负载均衡 算法
Nginx:为什么高性能?Master&worker如何配合?负载均衡算法有哪些?七层和四层负载均衡了解吗?
Nginx:为什么高性能?Master&worker如何配合?负载均衡算法有哪些?七层和四层负载均衡了解吗?
|
负载均衡
《负载均衡是如何支撑几亿手机微博用户访问的 -高性能负载均衡研发和应用实践》电子版地址
负载均衡是如何支撑几亿手机微博用户访问的 -高性能负载均衡研发和应用实践
91 0
《负载均衡是如何支撑几亿手机微博用户访问的 -高性能负载均衡研发和应用实践》电子版地址
|
负载均衡 网络协议 算法
不懂高性能的负载均衡设计?没关系,架构师带你飞
在软件系统的架构设计中,对集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案。负载均衡本质上是用于将用户流量进行均衡减压的,因此在互联网的大流量项目中,其重要性不言而喻。
1392 0
|
5月前
|
缓存 负载均衡 算法
解读 Nginx:构建高效反向代理和负载均衡的秘密
解读 Nginx:构建高效反向代理和负载均衡的秘密
122 2
下一篇
无影云桌面