Skip to content

Latest commit

 

History

History
208 lines (157 loc) · 12.6 KB

File metadata and controls

208 lines (157 loc) · 12.6 KB

分布式配置文档服务 —— 需求规格 v3.0

版本:v3.0 | 状态:评审稿 上游依据:dev_docs/proposl.md(v1)→ dev_docs/proposal-v2.md(v2)+ 可行性分析 v2 结论 本版变更:确定核心数据模型 项目 → 分支 → 分组 → item(结构项目级强一致、值按分支存储), 新增跨项目共享库与分支管理(diff / 值提升);变更说明见 §7


1. 项目目标

实现一个分布式的配置文档服务:以多实例集群方式运行,配置按 项目 → 分支 → 分组 → item 组织,向多语言应用提供配置的存取、共享、分支对比、变更推送、多格式输出,并以 单二进制、零外部依赖、内嵌管理控制台的方式交付。

2. 技术限定

  • 主体服务:Rust 实现,单二进制交付
  • SDK:TypeScript / Go / Python 三种官方 SDK
  • 管理端 Web Admin UI 内嵌于服务二进制(R10)

3. 核心数据模型(v3 新增)

3.1 层次结构

项目 Project(如 order-service)
 └── 结构 Structure(项目级,唯一事实源)
 │     ├── 分支 Branch:dev(开发)/ test(测试)/ prod(生产)+ 自定义分支
 │     ├── 分组 Group:redis / database / auth …
 │     │    └── item:{ key, 类型, 校验规则, 是否敏感(secret) }
 └── 值 Values(按分支存储)
       ├── dev :redis.host = "127.0.0.1"   …
       ├── test:redis.host = "10.0.0.5"    …
       └── prod:redis.host = "10.0.0.9"    …
  • 项目:顶级作用域,如 order-service
  • 分支:环境维度,默认 dev / test / prod,允许自定义(如 灰度、预发);新建分支自动继承项目结构
  • 分组:配置的逻辑归类(redis、database、auth 等),可嵌套或平铺(v3 默认平铺一层,嵌套列入后续)
  • item:最小配置单元:{ key, 类型, 校验规则, 是否敏感(secret), 各分支的值 }

3.2 结构强一致约束(数据模型核心不变量)

  • 结构(分组集合 + 每组的 item 集合)在项目级定义且只定义一次
  • 值按分支存储:每个 (分支, item) 一个值,值可为空(未填)
  • 不变量:任意时刻,一个项目下所有分支的分组与 item 完全一致,仅值不同
  • 由系统保证而非人工维护:item 的新增/删除/改名/改类型均在项目级进行,自动对全部分支生效; 变更值只影响单个分支,变更结构影响全部分支(有预览与确认)
  • 分支值完整性校验:必填项未填 → 警告 / 阻断发布(策略可配)

3.3 版本与订阅

  • 每个 (项目, 分支) 维护一个全局 revision:任何结构或值变更都推进该分支的 revision
  • SDK 订阅粒度 = (项目, 分支);watch 事件携带 item key、新值、revision

3.4 跨项目共享库

  • 集群级共享配置库(公共账号、密码、基础服务地址等),与项目解耦
  • 项目分组可引用共享库(组级或 item 级),渲染/输出时解析
  • 共享项变更 → 引用它的所有 (项目, 分支) revision 递增并推送; 默认自动级联 + 审计,可配置为显式发布(防级联风暴)

3.5 值类型

string / int / float / bool / json / array / secret(secret 强制加密存储,见 R11)

4. 需求规格 R1–R13

R1 多实例高可用与集群自组建(不变)

描述:多实例运行;新实例仅需指定集群内任意实例的注册端点即可加入。

  • AC1.1 任意实例通过 --join <已有实例端点> 加入集群,无需手动同步成员列表
  • AC1.2 首节点 --bootstrap 自举;其余节点仅凭一个已有实例端点即可加入
  • AC1.3 节点数 ≥3 时,任选一节点宕机,读写不中断(多数派存活)
  • AC1.4 新节点自动追平历史数据(快照 + 日志回放)后参与服务

R2 强一致与防脑裂(不变)

描述:集群内多实例共享全部数据,杜绝脑裂导致的数据不一致。

  • AC2.1 任意时刻集群至多一个 leader 接受写请求
  • AC2.2 写请求返回成功即已复制到多数派并持久化
  • AC2.3 网络分区时少数派侧拒绝写入(防脑裂),恢复后数据自动一致
  • AC2.4 读可路由任意节点;提供线性一致读选项

R3 SDK 自动 failover(不变)

描述:SDK 连接失败时自动切换备选节点。

  • AC3.1 SDK 接受多端点,连接失败/超时/RPC 错误时自动切换
  • AC3.2 切换对业务代码透明(回调/事件通知,不抛业务异常)
  • AC3.3 SDK 从服务端动态获取集群成员并更新端点池
  • AC3.4 写请求命中非 leader 时服务端返回 leader 重定向,SDK 自动跟随

R4 SDK 实时感知配置变更(v3 更新:订阅粒度 = 项目 + 分支)

描述:SDK 订阅指定 (项目, 分支) 的配置,自动感知变更。

  • AC4.1 订阅 (项目, 分支) 后,该分支任何 item 值变更或结构变更,SDK 在目标时延(默认 ≤1s)内收到事件
  • AC4.2 事件携带 item key、新值、revision;断线重连后从 revision 断点续传,不丢变更
  • AC4.3 支持一次订阅多个 (项目, 分支);监听器动态注册注销

R5 数据模型:项目→分支→分组→item,结构强一致(v3 新增,取代扁平"配置文档"模型)

描述:见 §3.1–3.3。配置按项目→分支→分组→item 组织;结构项目级强一致,值按分支。

  • AC5.1 项目/分支/分组/item 四级 CRUD
  • AC5.2 结构(分组+item)在项目级定义;任意时刻全部分支结构完全一致(系统保证,非人工维护)
  • AC5.3 分支可自定义创建/删除,默认提供 dev/test/prod;新建分支自动继承项目结构
  • AC5.4 item 类型含 secret,secret 强制加密存储(R11)
  • AC5.5 值可为空;分支值完整性校验(必填未填:警告/阻断发布,策略可配)
  • AC5.6 结构变更(增删改 item/分组)提供影响预览(波及全部分支)与确认

R6 跨项目共享配置库(v3 新增,承接 v2 的"共享配置项")

描述:集群级共享项库,项目分组可引用,降低跨项目重复配置。

  • AC6.1 共享项(分组+item)支持 CRUD,敏感项强制加密(R11)
  • AC6.2 项目分组可引用共享库(组级/item 级),输出/发布时解析
  • AC6.3 循环引用检测(共享项→共享项、项目→共享项)并拒绝发布
  • AC6.4 共享项变更 → 引用方所有 (项目, 分支) revision 递增并推送;默认自动级联 + 审计,可配置显式发布

R7 分支管理:对比与值提升(v3 新增)

描述:分支间差异对比与值复制(promotion)。

  • AC7.1 分支间值对比(diff):同结构按 key 对比,展示差异与缺失值
  • AC7.2 结构一致性校验:任意时刻可校验并展示"全部分支结构一致"状态(正常应恒等)
  • AC7.3 值提升(promotion):支持把源分支(如 dev)的值批量复制到目标分支(如 test/prod), 复制前校验目标分支缺失项,操作记录审计日志(R13)
  • AC7.4 支持单 item、整组、整分支三种粒度的值提升

R8 多格式输出(v3 更新:按 项目+分支 输出)

描述:按 (项目, 分支) 生成完整配置文档,支持 YAML / TOML / JSON。

  • AC8.1 按 (项目, 分支) 输出完整配置文档(分组→文档小节),支持 YAML/TOML/JSON
  • AC8.2 三格式语义等价(等价性校验测试)
  • AC8.3 支持按格式 URL 拉取(/v1/projects/{p}/branches/{b}/config?format=yaml)与打包下载
  • AC8.4 文档 schema 以 TOML 表达力为下限

R9 竞品参考(不变)

描述:持续跟踪竞品并维护对比(当前对比见可行性分析 §6)。

  • AC9.1 每季度更新竞品对比表
  • AC9.2 竞品新功能上线时评估吸收或差异化

R10 Web Admin UI 嵌入二进制(v3 更新:树形管理 + 分支对比/提升)

描述:管理端 Web UI 与主服务同进程、同端口部署,静态资源编译进二进制。

  • AC10.1 单二进制同时提供数据面 API 与管理控制台(默认 /admin
  • AC10.2 控制台功能:项目/分支/分组/item 树形管理、分支值编辑、分支对比(diff)值提升(promotion)共享库管理、变更历史/审计、格式预览(YAML/TOML/JSON 三栏)
  • AC10.3 默认启用鉴权(初始管理员凭证启动配置或首启自动生成);同源免 CORS
  • AC10.4 前端产物内嵌(基准 ≤5MB),无外链依赖,离线可用

R11 密码/密钥强加密(v3 更新:secret 类型 + 共享库敏感项)

描述:secret 类型 item 与共享库敏感项静态强加密;明文仅按需解密;展示与导出脱敏。

  • AC11.1 静态加密使用 AEAD(AES-256-GCM 或 ChaCha20-Poly1305),每项独立数据密钥(信封加密)
  • AC11.2 主密钥来源可配置:环境变量 / 密钥文件 / KMS(企业版);主密钥不明文落盘
  • AC11.3 支持主密钥轮换与数据密钥版本化,轮换不中断服务
  • AC11.4 明文仅存在于解密瞬间;存储/备份/导出均为密文;界面与导出默认掩码展示
  • AC11.5 secret 类型 item 与共享库敏感项的读取/导出触发审计日志(R13)

R12 极简配置与零外部依赖(不变)

描述:单二进制、零外部依赖(无数据库、无消息中间件)、默认即用。

  • AC12.1 仅两个核心启动参数即可跑通:--bootstrap / --join <endpoint>,其余全部有默认值
  • AC12.2 存储内嵌,不依赖外部数据库
  • AC12.3 配置覆盖优先级:环境变量 > 配置文件 > 命令行参数
  • AC12.4 基准目标:单机最小内存 ≤128MB;二进制 ≤50MB(含 Admin UI)
  • AC12.5 提供 Docker 镜像与 docker compose 一键三节点示例

R13 运维与可观测性(v3 更新:结构一致性指标)

描述:健康检查、指标、结构化日志、审计日志。

  • AC13.1 提供 /healthz/readyz
  • AC13.2 Prometheus 指标:节点角色、Raft 状态、QPS/延迟、watch 连接数、成员数、 结构一致性状态(全部分支结构恒等)、共享库引用数
  • AC13.3 结构化日志(可选 JSON);管理操作 / 密钥访问 / 值提升 审计可查询
  • AC13.4 可选 OpenTelemetry 追踪(企业版)

5. 非功能需求汇总(v3 更新)

类别 要求(基准值,后续压测校准)
性能 单节点写 QPS ≥ 10k;watch 并发连接 ≥ 10k;单项目分支数 ≤ 100 时结构校验延迟 < 100ms
安全 全链路 TLS 可选(默认提示开启);管理端强制鉴权;secret 项加密(R11)
可移植性 静态编译;Linux x86_64 / arm64 为主,macOS 支持开发
兼容性 数据模型与 SDK 协议版本化(v1 起),向后兼容策略明确
可靠性 故障注入测试(分区/丢包/重启)通过后方可发布

6. 明确不做的边界(Out of Scope)

  • 分支级细粒度权限(如"生产分支仅运维可改")——列入企业版(RBAC)
  • 服务发现 / 注册中心:不承接 Nacos/Consul 的发现业务
  • 完整密钥生命周期管理:动态密钥轮换、加密网关交给 Vault 类系统;本项目只做静态加密 + 脱敏
  • 灰度发布、多租户、SSO、审计报表:企业版路线图,不进开源 MVP

7. 变更说明(v2 → v3)

变更 理由 / 决策
新增 §3 核心数据模型:项目→分支→分组→item 本次用户决策:配置按 项目→分支 组织;分支默认 dev/test/prod 且可自定义
结构强一致:结构定义在项目级,值按分支存储 本次用户决策:由系统保证全部分支结构恒等,仅值不同
原 R5"共享配置项"拆分为 R5(项目内共享,由结构强一致天然满足)+ R6(跨项目共享库 本次用户决策:共享项升级为集群级共享库,项目可引用
R4 订阅粒度改为 (项目, 分支) 与数据模型对齐
新增 R7 分支管理(diff / 值提升) 结构强一致的直接衍生价值:分支对比与值复制
R8 多格式输出改为按 (项目, 分支) 输出完整文档 文档 = 某项目某分支的全部配置
R10 Admin UI 增加树形管理 / diff / promotion / 共享库管理 与数据模型对齐
R11 加密覆盖 secret 类型 item 与共享库敏感项 与数据模型对齐
R13 增加结构一致性指标 让"结构强一致"可观测可验证
编号整体后移:原 R8→R10、R9→R11、R10→R12、R11→R13 插入 R5–R7 后重新编号