宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

一、前言

和美团点评一样,唯品会也使用DPDK框架来开发自己的四层负载均衡器VGW。其基本技术和文章《企业级负载均衡解决方案之二:美团点评高性能四层负载均衡器MGW》里面提到的技术方案基本一致,本文根据唯品会技术分析的文章《唯品会高性能负载均衡 VGW 揭秘》补充一些技术的具体细节。

转载自https://blog.csdn.net/cloudvtech

二、VGW技术细节

2.1 CPU affinity

基于DPDK的VGW中的各个线程都运行在固定的CPU上面,收包和发包使用不同的NIC并且收发队列pin到不同的CPU core上面,以此来最大程度减少来Cache Miss;同时其它一些VGW的工作线程也跑在指定的CPU上面,避免被操作系统抢占。

2.2 Huge Page

大页内存可以有效减少TLB MISS的数目,提高计算效率。VGW在系统初始化的时候,使用2MB的大页内存来分割8GB给DPDK的预留内存。而且在NUMA结构下面,每个NUMA节点都要有对应的页大小和页数目的设置。

2.3 无锁化

在使用DPDK的环境中,应该尽量避免使用互斥锁。借助于使用CAS操作实现的DPDK的FIFO无锁队列,实现内存池的分配管理、多个线程间的通信以及PMD和内核的通信。同时在读多写少的环境中使用RCU机制来避免锁。

2.4 用户态轮询驱动

传统的内核态基于中断的收发包方式在大并发的情况下会造成中断爆炸,导致后续数据包处理效率下降。使用PMD可以在用户态批量收发数据包,避免了中断开销。

2.5 DPDK数据lcore化

VGW避免在多核间分配全局数据,如有全局数据也是尽力无锁化。所有变量如统计信息、arp表、连接表等都是在lcore上面分配,在CPU本地cache直接访问这些信息,和Google Meglev线程间无共享信息的实现机制类似。

2.6 DPDK数据批量预取

存在于内存中的数据包需要以合适的节奏送入CPU cache,太慢会导致多次载入开销,太快会由于后续逻辑处理时间过长造成数据获取时延,这两种情况都会导致网卡缓冲区满。VGW使用批量预取技术,以合适的速率将缓冲区的数据包送入CPU cache,加速后续处理逻辑。

2.7 DPDK代码分支预测

通过在合理的位置加入分支预测的指示代码likely),可以预先载入最有可能的后续指令集,提升CPU流水线处理能力。比如对于VGW多数都是转发包,只有少数是进入本机上层的包,所以对于可能是转发的包,在后续处理中进行分支预测。

2.8 DPDK NUMA亲和

在2.2中保证内存和NUMA亲和性之后,在配置DPDK的运行环境的时候要为收发线程配置NUMA id,使得收发线程的内存和网络设备都在同一个NUMA节点,用来保证网卡和对应NUMA上的CPU亲和性。

转载自https://blog.csdn.net/cloudvtech

三、总结

和美团点评的负载均衡器一样,唯品会的四层负载均衡器也是基于DPDK的PMD方案开发。在同样的硬件资源下,达到4倍于IPVS的能力,承载搜索、图片等流量。

但是根据VGW的文档,并未看到关于VGW集群的任何技术信息。

转载自https://blog.csdn.net/cloudvtech