进程与角色
两类进程:worker 与 guardian
| 进程 | 职责 | 明确不做 |
|---|---|---|
| worker | 干活的工作进程——数据面+管理面全在这一个进程;raft 成员身份在这里 | — |
| guardian | 节点守护进程——worker 保活/系统服务安装/配置版本仓+LKG/校验调度/五态上报/滚动听令/迁移执行体 | 不管 raft、不碰流量、不解释配置内容 |
guardian 是「worker 自重启悖论」的解:worker 崩溃时由一个与配置版本无关的极简进程 拉起,按 LKG(最后已知良好配置)反复尝试;集群滚动升级由 CP 编排器逐台下指令到 guardian 控制口执行。每台节点上两个进程(K8s 形态 guardian 省略,探针直接指向管理口)。
三种装配角色:同一套代码的参数
| 装配角色 | 运行职责 | raft 成员角色(缺省) | 跑流量? | 有管理口? |
|---|---|---|---|---|
| Standalone | 全部(配置权威+流量) | 无 raft(本地卷) | ✅ | ✅ |
| Control(CP) | 配置权威+发布编排+编译 | Voter(计入多数派) | 可选(生产标准=不跑) | ✅ |
| DataPlane(DP) | 客户端流量 | Learner(只读复制) | ✅ | 可配 |
两层概念:CP/DP 与 Voter/Learner
CP/DP 与 raft 角色是两层正交的概念:
- Voter / Learner / Witness 是 raft 的复制拓扑概念——决定「谁投票、谁收日志」;
- CP / DP 是本平台的运行职责概念——决定「谁写配置、谁跑流量」。
生产标准映射=CP↔Voter、DP↔Learner,但可以正交组合(例如扩容时 DP 先以 Learner 加入复制流,raft 原生快照安装追平)。纯控制形态=CP 以零数据口装配:投票节点 无任何客户端可达面,管理面/健康车道/发布编译照常。
能力 × 进程矩阵(什么在哪里运行)
| 能力 | 运行位置 |
|---|---|
| 请求代理(多协议监听/路由/编排执行/转发) | worker 数据口 |
| 编译器(干跑+正式编译) | worker 内(装载链内置) |
| 发布编排(七阶段) | CP worker(管理口触发) |
| 管理 API / CLI 同面 | 每个 worker 管理口(0/1 个) |
| 管理 UI | worker 管理口 /ui/*(永不暴露于数据口) |
| raft 成员/复制 | worker 内(Tier 内部口)——guardian 不管 raft |
| worker 保活/重启/服务安装 | guardian |
| 配置版本仓+LKG | guardian(本地文件面) |
| 集群滚动编排 | CP 编排器 → 各节点 guardian 控制口 |
raft 复制的是什么
raft 是唯一复制通道,复制的是数据不是命令:
- 配置域——九实体(listener/route/cluster/orch/plugin/credential…)的 draft/published 双态+编译产物指针;
- 系统数据信令——deny 名单、发布 Watch 等即时生效面;
- 观测序列——每路由指标等。
管理命令(CLI/REST)是对这些数据的事务性写入,经管理口进 raft 多数派落 CP。 不经 raft 的控制线只有两条:guardian→worker 的本机运行态指令(走 guardian 控制口)、 集群滚动序列(CP 编排器逐台下 guardian)——详见通道澄清。