update at 2026-02-11 11:06:24
This commit is contained in:
68
PLAN.md
68
PLAN.md
@@ -123,6 +123,74 @@
|
||||
- 风险:CDN 缓存导致短时间读取旧配置(通过短缓存 + 原子发布缓解)。
|
||||
- 回滚:将 A/B 两端 `active` 同步改回原服务器,并设置 `cooldownMinutes=0` 可快速恢复。
|
||||
|
||||
### 0.10 非付费负载均衡预案(Cloudflare Workers,暂不实施)
|
||||
|
||||
目标:
|
||||
- 在不使用 Cloudflare Load Balancer 付费能力的前提下,实现 A/B 两端流量分发与故障回退。
|
||||
- 小程序侧统一使用单一入口域名,减少合法域名和切换复杂度。
|
||||
|
||||
建议架构:
|
||||
1. 新增统一入口域名(示例:`mp-api.biboer.cn`),仅小程序访问该域名。
|
||||
2. 入口域名绑定 Cloudflare Worker 路由(`mp-api.biboer.cn/*`)。
|
||||
3. Worker 负责:
|
||||
- `/api/*` 按权重分流到 A/B(初始建议 A:90%,B:10%)。
|
||||
- 主节点失败时自动重试备用节点(一次重试即可)。
|
||||
- `GET/HEAD` 以外请求复用同一请求体,避免重试时 body 丢失。
|
||||
4. 静态配置与字体资源在首阶段固定走 A(`fonts.biboer.cn`),避免 A/B 字体清单不一致引起渲染差异。
|
||||
|
||||
权重修改与热加载(推荐):
|
||||
1. 不将权重硬编码在 Worker 代码中,避免每次改权重都重新发布。
|
||||
2. 新增独立配置文件(示例:`/miniprogram/assets/lb-config.json`),由 Worker 定期拉取。
|
||||
3. Worker 本地缓存最近一次有效配置,按 TTL(建议 30~60 秒)自动刷新。
|
||||
4. 权重调整流程仅需改配置文件并发布配置,无需小程序发版、无需 Worker 重新部署。
|
||||
|
||||
`lb-config.json` 建议结构:
|
||||
|
||||
```json
|
||||
{
|
||||
"weights": {
|
||||
"A": 90,
|
||||
"B": 10
|
||||
},
|
||||
"ttlSeconds": 60,
|
||||
"minSwitchIntervalSeconds": 30
|
||||
}
|
||||
```
|
||||
|
||||
字段约束:
|
||||
- `weights.A`、`weights.B`:`0~100`,且总和必须为 `100`。
|
||||
- `ttlSeconds`:Worker 重新拉取配置间隔,建议 `30~60`。
|
||||
- `minSwitchIntervalSeconds`:最小切换间隔,避免流量来回抖动。
|
||||
|
||||
前置条件(实施前必须满足):
|
||||
1. A/B 字体文件与清单一致(当前 `fontCount` 必须对齐)。
|
||||
2. A/B API 行为一致:`/healthz`、`/api/render-svg`、`/api/render-png`。
|
||||
3. 小程序后台已配置统一入口域名为合法 `request/downloadFile` 域名。
|
||||
|
||||
分阶段实施:
|
||||
1. P0(演练)
|
||||
- 先用 Worker 做单域名透传(100% A),验证链路稳定性。
|
||||
2. P1(灰度)
|
||||
- 开启 `/api/*` 90/10 分流,观察失败率与时延(至少 24 小时)。
|
||||
3. P2(增配)
|
||||
- 视稳定性逐步调整 80/20、70/30,不直接跳 50/50。
|
||||
4. P3(稳态)
|
||||
- 形成标准运维流程:权重调整、紧急回切、日志巡检。
|
||||
|
||||
回滚策略:
|
||||
1. Worker 立即切为 100% A。
|
||||
2. 若 Worker 故障,DNS/路由回退到 A 直连入口。
|
||||
3. 保留 `route-config` 手动切换机制作为最终兜底,不删除。
|
||||
|
||||
配置容错(实施时必须包含):
|
||||
1. 配置拉取失败:继续使用“上一次有效配置”,不回退空配置。
|
||||
2. 配置格式非法:记录错误并忽略本次配置,继续使用旧配置。
|
||||
3. 连续失败超过阈值:自动降级到 `A=100, B=0`,并输出告警日志。
|
||||
|
||||
暂不实施说明:
|
||||
- 本节仅记录方案和执行顺序,当前版本继续使用“手动 A/B 切换”主路径。
|
||||
- 待 A/B 数据一致性、日志与监控项完善后,再启动该预案实施。
|
||||
|
||||
## 1. 当前状态
|
||||
|
||||
### 1.1 已完成(保留能力)
|
||||
|
||||
Reference in New Issue
Block a user