近年来,随着互联网在全球的快速发展和普及,网民数量的不断增长,生活中各方面对互联网依赖的加强,带来互联网访问量的爆炸性增长,催升了诸如 google, facebook等巨型站点,国内也有 BAT 等几家公司旗下的站点访问量跻身世界前十。html
面对需求的不断提升,几年前咱们还在为解决 C10K 问题而努力,如今已经开始面临 C10M 问题的挑战。linux
C10M意味着什么,一个比较流行的解释以下:服务器
虽然对于某些具体数据,好比10G带宽传输数据是否太少,10M 并发链接中有多少活跃链接等,还有待商榷,可是 C10M 问题从数量上给咱们描绘了一幅前景。网络
MiddleBox(a computer networking device that transforms, inspects, filters, or otherwise manipulates traffic for purposes,参见http://en.wikipedia.org/wiki/Middlebox)做为网络的边界和入口,是流量汇聚和集中的关键位置,会首先面临 C10M 问题的考验。MiddleBox 在阿里巴巴集团中普遍使用,主要包括4/7层负载均衡设备,4层代理网关等,本文主要分享一些在4层负载均衡设备方面的一些工做和思考。session
在 C10K 时代,催生了epoll等技术的出现。对于4层负载均衡技术来讲,主要是基于内核netfilter框架来处理网络流量,这种机制在 C10M 的状况下有些力不从心,形成性能瓶颈的缘由主要有如下几点:数据结构
因此面对C10M,咱们须要解决的问题是主要有几个方面:架构
包的可扩展性并发
多核的可扩展性负载均衡
内存的可扩展性框架
针对这几个问题,阿里技术保障部的网络产品团队自主研发出产品AGW(Ali GateWay),彻底在应用层实现,抛弃了传统Linux内核netfilter 网络包处理框架,实现了fullnat+synproxy的四层负载功能。AGW系统设计的关键技术主要有如下几点:
多核多队列:AGW系统为均衡功能分配专用的CPU core, 与内核隔离,将CPU和处理线程绑定,poll方式收发包,这样能够避免网卡中断操做以及操做系统进行线程切换所带来的上下文切换开销。另外,网卡支持多队列和RSS,咱们利用这一功能,将数据包根据CPU核数进行分流,每一个core维护本身的session表,处理一个队列接收到的数据包。
AGW多核队列图
无锁实现:数据平面的无锁化,是经过上述的多队列功能实现了,每一个core维护本身的session 表,网卡将I/O流分给多个CPU内核作并行处理,无需争用锁。控制平面的无锁化,由于对vip表修改等控制操做在整个周期中占比很小,咱们没有必要由于管控命令而对数据平面的操做加锁,咱们使用按期poll的方式执行控制命令,这样能够实现控制平面的无锁化。第2点和第3点,解决了C10M多核可扩展性问题。
Hugepage: 由于网关设备的专用性,咱们利用HugePage功能,为AGW分配不少1GB的大页面专门使用,这样能够减小TLB Miss状况,并减小处理TLB Miss所需的内存操做,同时对于频繁分配的数据结构,采用mempool机制。
核心数据支持NUMA:现今服务器体系大都是numa架构,处理器能快速的访问在同一个numa单元的内存。在AGW系统设计中,咱们将频繁使用的核心数据结构(如session表)分布在各个core对应numa节点的内存中。同时,在多网卡的环境中,网卡绑定pci也会对应到不一样的numa节点上,咱们多核多队列的架构也利用了这一特性,将同一numa节点的网卡队列和CPU对应起来,避免数据的跨numa节点访问,这样能够 缓解总线瓶颈和高速cache争用,提高系统性能。第4,5点解决了C10M的内存可扩展性问题。
AGW数据流图 |
在阿里巴巴集团,业务和规模驱动技术不断向前,技术保障部网络产品研发团队长期致力于高性能Middle Box的研发,不断知足公司高并发访问的业务需求。AGW系统的开发与上线,能够为双十一提供有力的保障,为业务的快速增加保驾护航。
做者:阿里巴巴技术保障 运维架构师 王昕溥(金农) @江湖信美