DPVS_DPVS——爱奇艺的开源四层负载均衡

DPVS的整体思路是在DPDK中抽象一个设备层和一个IPVS层,IPVS层完成LVS中完成的功能,设备层用于抽象各种网卡设备。这个设备层是DPVS相比其他方案会多做的事情。如果是一个简单的负载均衡的实现,是不会做这个设备层的,这个设备层对应于内核中对设备的管理,同时还对应的实现了邻居表(ARP)和路由表。有了这个设备层,ARP和路由的实现才有了可能。因为设备层提供了一个设备的概念和一个IP的概念。

Ip命令是Linux下网络管理的非常强大和最常用的命令,DPVS在DPDK中完整的实现了对ip命令的支持,所以使用ip命令可以管理网络的方方面面,link,ip,arp,route等。这就对应的要求DPVS中有link,ip,arp,route这些概念。而这一切的前提是网卡设备的抽象。所以可以看到netif模块是DPVS中最庞大的模块,而这一整个模块都是为了完备性而产生的,而不是为了负载均衡这个功能本身而产生的(虽然也有点意义)。

DPVS不是为了满足企业单一使用环境下的功能设计,而是为了做一个完备的协议栈式的大而全的四层均衡系统,这个系统的继续发展,将会给行业带来革命性的改善。但是对于爱奇艺本身,领导者想必要顶着巨大的压力才能够推进这些与主线业务不相关的功能设计。DPVS将成为全球范围内四层负载均衡的标杆软体,这个毋庸置疑。

DPVS对网卡,IP,ARP和路由表的实现与内核有一些不同,最大的区别在于DPVS是一个DPDK程序,DPDK程序的特点是所有的实现都要是每个核一份。有一些硬件的相关的高性能需求,DPVS也必须要在架构上向硬件让步。例如在实现IP地址管理的时候,inet_addr是每一个设备可以有多个的,这个模型是符合内核的思想的,但是在选择lip的时候(就是fnat情况下的本地ip的选择),DPVS采用的是sa_pool机制,这个机制依赖网卡的Flow Director功能,整体的思想是根据Flow Director的用法来的。Flow Director的功能是通过设置不同的过滤条件,使得不同的流导入到不同的队列,它的用途在于FNAT的回包上,可以让从哪个核出去的数据包就回到哪个核。

DPVS非常巧妙的从架构的层面依赖并且利用了这个硬件机制。他将DPVS的LIP的不同端口分成多个不同的组,组的个数取决于数据核的个数。每个LIP都会有一个数据核个数的哈希表,这个哈希表是端口的空间划分。例如有40个数据核,那么就会有40个哈希表,每个

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值