控制平面和数据平面各自角色功能

163 阅读2分钟

架构图

Screenshot_18-控制平面数据平面.png

  • 控制平面

控制平面是一个进程,一般监听socket,接收web、cli、netconf、restful等用户接口的配置下发,配置查询。 控制平面负责配置的持久存储,支持进程重启,集群配置同步,存数据库等。

  • control-dp

control-dp与dp是多线程,共享地址空间,都属于数据面。
称之为control-dp,是因为它是dp用来通信的线程。

  • dp

dp中的对象,可以以id为key,用于查找、更改配置,此时使用RCU方式,是典型的线程同步场景。

前一篇文章 网络设备控制平面的通用架构模式 - 掘金

介绍了控制平面的通用架构, “配置与状态分离”、“对象引用 + 运行时上下文实例化” 主要发生在控制面

而数据面:

  • 数据面通常不保存完整对象模型
  • 数据面使用高度优化的扁平化数据结构(如哈希表、数组、位图);
  • 数据面关注的是快速查找、匹配、转发,而不是对象建模;
  • 所谓“对象”,在数据面往往被编译/展开为规则条目或状态条目不是面向对象意义上的“实例”

控制面 vs. 数据面:职责对比

维度控制面(Control Plane)数据面(Data Plane)
职责配置管理、策略决策、健康检查、会话管理、状态维护高速报文处理:解析、匹配、调度、转发、NAT、限速等
性能要求秒级/毫秒级响应即可微秒级处理,百万PPS
数据结构复杂对象模型、树、链表、状态机哈希表、数组、位图、无锁队列
语言/环境C/C++、Python(配置)、多线程C、汇编(关键路径)、DPDK/XDP、SIMD
是否面向对象✅ 是(逻辑上)❌ 否(性能优先)

数据面:不是“对象”,而是“规则/状态条目”

数据面不会为每个 Real Server 创建一个 C++/C 结构体对象实例。它只关心:

“这个报文,应该转发给哪个后端 IP:Port?”

为此,数据面使用预计算的、扁平化的转发信息库(FIB-like)结构

典型数据面结构(以 DPVS 或 LVS 为例):

  • 连接跟踪表(Connection Tracking Table)
  • 调度表(Scheduler Table)
  • 规则表(如 ACL、NAT 规则)

控制面如何“下发”到数据面?

这是一个关键机制:控制面向数据面“发布”状态快照

流程如下:

  1. 控制面检测到 RS1 在 VS1 上健康状态变为 DOWN
  2. 控制面更新 VS1 的运行时状态;
  3. 控制面重新计算 VS1 的可用后端列表;
  4. 控制面通过IPC(进程间通信)或共享内存,将更新后的调度表“推”给数据面;
  5. 数据面原子更新其本地的 server_entry[] 数组;
  6. 后续新连接不再调度到该 RS。

数据面不主动感知健康状态,它信任控制面的决策