mirror of
https://gitcode.com/JianFeeeee/webui4frpc.git
synced 2026-10-15 12:14:37 +00:00
feat(M6): token ring data plane + engine — pending adds disappear on claim, topology written back for full cluster view (per authoritative design)
This commit is contained in:
49
plan.md
49
plan.md
@ -78,17 +78,48 @@
|
||||
|
||||
> 注:发布类条目已并入 **M7 运维与发布(原 M5)**,本节 M5 保留初始清单。
|
||||
>
|
||||
### M6 集群内 frpc 二进制分发(节点间优先,外部 URL 兜底)
|
||||
### M6 集群(令牌环网拓扑)
|
||||
|
||||
> 诉求:集群内 frpc 二进制**优先通过集群节点间交换**获得,无法交换时才走外部 URL 下载;新节点加入集群时,**自动由邻居节点向其传输二进制**。
|
||||
> **权威设计(用户约定,必须固化)**:集群节点间通过**令牌环网(token ring)**通信,两轮为一个周期。
|
||||
|
||||
- [x] 二进制来源优先级:本地已有缓存 > 集群节点间交换(HTTP/Chunked 拉取) > 外部 URL(GitHub Releases)
|
||||
- [x] 节点注册表:Registry(peers/nodeInf 内存态)+ EnsureVersion 优先级分发
|
||||
- [x] 传输通道:节点间 HTTP GET /frpc/{version}(Basic Auth + 256MiB 上限 + SHA-256 校验),回退 GitHub URL
|
||||
- [x] 入网引导:new node joins with -peer and auto-pulls binary from neighbors (verified e2e)
|
||||
- [x] 失败回退:EnsureVersion 内建回退外部 URL(单测覆盖 peer 优先 + 回退)
|
||||
- [ ] Cache 管理:版本保留策略(LRU / 仅保留常用)、可用性标记(黑名单失效节点)
|
||||
- [ ] UI:设置页展示二进制来源与缓存状态,集群页展示节点间传输进度
|
||||
#### 拓扑与角色
|
||||
|
||||
- 集群 = 若干 webui4frpc 节点组成的内网协作网络;逻辑上各节点**平等**,均持有**完整集群信息**(节点表、转发链、各自配置)与完整 webui。
|
||||
- **leader**:唯一特殊角色,负责启动时发送第一个令牌;默认**创建集群的节点**为初始 leader。
|
||||
- **转发链(ring)**:令牌按固定顺序传递;每个节点记录前驱/后继。
|
||||
|
||||
#### 令牌环协议(两轮一周期)
|
||||
|
||||
- **第一轮**:令牌在环上传递,各节点收到后**把自己的信息追加到令牌**(地址、负载指标、frpc 缓存、转发能力等)。
|
||||
- **第二轮**:令牌再次环行,各节点**按令牌内容同步集群信息**(更新自己的完整集群视图)。
|
||||
- 新转发任务:需要建立转发时,**把任务附加在令牌中**(而非直接指派);因每节点都持完整集群信息,由**负载最低的节点**(**内存使用率 + 网络使用率共同判断**)自行摘取并创建转发。
|
||||
- **负载摘取**:令牌传递到某节点时,若该节点在上一轮被判定为负载最低,则**先主动摘取任务**,随后在令牌中更新自身信息。
|
||||
|
||||
#### 容错与邻居离线
|
||||
|
||||
- 令牌传递超时(未收到回执)→ 判定邻居离线。因每节点持完整集群信息,当前节点可**自动修改集群状态**,并把邻居负责的转发**作为新任务追加到令牌**,再传给下一节点。
|
||||
- leader 检测令牌丢失:发出令牌后超过 **(轮次延迟 / 2 + 20ms)** 未回传 → 判定令牌丢失(可能某节点接令后崩溃),**重发令牌**。
|
||||
- leader 每轮探测后更新一次轮次延迟。
|
||||
|
||||
#### leader 补充/监控
|
||||
|
||||
- leader 受其上家邻居监控:二者**交换心跳包**(因节点都持完整信息,容易做到)。
|
||||
- 上家邻居探测到 leader 崩溃 → **自身成为新 leader**。
|
||||
|
||||
#### 新节点加入
|
||||
|
||||
- 每个节点都有 webui;用户登录到哪个节点的 webui,就由**该节点**执行新节点加入:令牌发到自己时,**先转发给新节点**,并把新节点加入令牌中的集群信息,**更新转发链**:新节点放在自己后面,自己原本的后继放在新节点之后。
|
||||
|
||||
#### 实现里程碑(待按上述设计重建)
|
||||
|
||||
- [ ] 数据面:TypeSet 集群状态(节点表/转发链/leader/轮次延迟/负载指标/待办任务),每节点一份完整副本
|
||||
- [ ] 令牌环传输:HTTP 轮转传递 + 回执;两轮一周期(信息追加 → 同步)
|
||||
- [ ] leader:初始 leader 选择(创建集群者)、首令牌发送、轮次延迟测量、令牌丢失重发
|
||||
- [ ] 新转发任务:挂到令牌 → 各节点负载评估(内存+网络)→ 负载最低节点摘取并创建
|
||||
- [ ] 离线处理:令牌超时 → 改集群状态 → 邻居转发转任务重挂
|
||||
- [ ] leader 监控:上家邻居心跳探测 → 崩溃提升为新 leader
|
||||
- [ ] 新节点加入:入口节点 webui → 令牌插入新节点 + 更新转发链
|
||||
- [ ] 前端:集群页展示环拓扑/令牌轮次/负载/任务摘取;设置页二进制缓存状态
|
||||
|
||||
### M7 运维与发布(原 M5)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user