发展历史

1. 转发平台发展

  • 以openvswitch为代表的第一代内核态软件转发平台
  • 以dpdk为代表的第二代内核态软件转发平台
  • 以P4或NP为代表的第三代硬件转发平台。

第一代发展到第二代解决了内核态和用户态上下文切换代价较高的问题;
第二代发展到第三代解决了软件转发平台性能不足的问题。

第一代到第二代的核心技术是DPDK,DPDK的UIO驱动屏蔽了硬件发出中断,通过用户态主动轮询的方式(PMD,Poll Mode Driver),旁路linux kernel,避免用户态和内核态上下文切换。

第二代到第三代的核心技术是用可编程硬件转发平台代替软件转发平台,cpu的执行时需要内存参与(获取指令),而硬件转发靠的是数字电子技术(与非门,组合逻辑电路)。

DSP是在基于底层核心转发平台(DPDK、P4、NP等)提供基本报文转发能力的基础上,站在服务视角抽象出来的上层业务的公共能力,如会话管理、健康检查、负载均衡等,本质上更贴近于一个抽象的lib库。参照管理面开发,举个不太恰当的例子,linux server、P4、NP可以类比于jvm虚拟机,DPDK可以类比于jdk,DSP则贴近于maven管理的各种开源社区的lib库,nat或er或elb的服务数据面则像是我们基于各种lib库组合开发的跑在jvm虚拟机上的spring应用。

2. 网关部署形态发展

2.1. 无状态网关主主部署

2.2. 有状态网关

2.2.1. 单层网关 -> 双层网关

单层到双层发展的核心理念在于将有状态和无状态的部分做切割,forwarder作为无状态的网关负责核心转发功能;director作为有状态网关负责状态管理。这样网络的核心功能和承担主要负载能力的forwarder就做到了主主部署,可以轻松地横向扩容,而ep、nat、elb等有状态的网关只需要开发director层,负责首包的状态管理,其负载很低,对动态扩容的需求也没有那么强烈。

2.2.2. 主备部署 -> 主主部署

主备部署到主主部署的核心驱动力是为了充分利用两台主机的性能,避免主备模式下始终有一台主机处于空闲状态,造成资源浪费的尴尬情况。

3. openvswitch

内核态,慢路径要upcall用户态,涉及用户态和内核态上下文切换,比较影响转发性能
!Pasted image 20230720190931.png
!Pasted image 20230720190823.png

性能优化:

  1. RSS使能网卡多队列
  2. 软中断绑核
  3. CPU核隔离isolcpus
  4. 中断黑名单

4. dpdk

dpdk+ugw
!Pasted image 20230720191122.png

dpdk+ovs+egf
!Pasted image 20230720191257.png

dpdk+lvs(dpvs):ELB-cvs

dpdk+gaea: ER

4.1. dpdk

!Pasted image 20230720191712.png
网卡 -> 内核软中断 -> 用户态
网卡 -> 用户态,pmd驱动旁路kernel

5. DSP

!Pasted image 20230720192506.png

6. 网关部署

主主部署 ecmp -> 主备 -> 双层