diff --git a/README.md b/README.md index 57932ec..36d48cc 100644 --- a/README.md +++ b/README.md @@ -41,8 +41,9 @@ Proxy Pool 用 Controller 协调这些变化,并让 Gateway 数据面只消费 - **PostgreSQL 管理面**:持久化配置版本、Upstream/Routing 管理状态、Admin 审计与 Outbox;不保存 Proxy 明细或逐次提取记录。 - **Gateway 组件**:HTTP 正向代理、HTTPS CONNECT、双向 Tunnel、重试、超时、 - 目的地址保护、本地快照存储和容量调度已有实现与定向测试,但尚无 - `proxy-gateway` 命令和控制面客户端。 + 目的地址保护、本地快照存储、容量调度和 Worker 控制面 Register/Watch/ACK/ + Runtime 会话组件已有实现与定向测试;`proxy-gateway` 命令、凭据分发和权威 + Proxy/Routing Snapshot 发布仍待装配。 - **安全边界**:Gateway、Distribution 与 Admin 使用各自的认证语义,并支持 CIDR、可信代理、严格请求解析和敏感信息最小化。 diff --git a/docs/adr/005-redis-activity-pool.md b/docs/adr/005-redis-activity-pool.md index 0539cab..a1b2ae7 100644 --- a/docs/adr/005-redis-activity-pool.md +++ b/docs/adr/005-redis-activity-pool.md @@ -109,6 +109,7 @@ pp:{activity}:worker-snapshot-expiry ZSET workerID -> Snapshot 引用 expiry mil pp:{activity}:worker-runtime HASH workerID -> 完整稀疏运行态报告 pp:{activity}:worker-runtime-expiry ZSET workerID -> report expiry milliseconds pp:{activity}:owned: ZSET 单 Upstream 已分配 AVAILABLE Proxy +pp:{activity}:worker-owned: ZSET 单 Worker 可下发的已分配 Proxy pp:{activity}:idem: STRING 带 TTL 的提取幂等结果 pp:{activity}:op: STRING 带 TTL 的内部操作结果 ``` @@ -117,6 +118,10 @@ Proxy 记录包含地址、状态、健康信息、硬过期时间、`usableUnti 所有权引用及 Distribution 返回所需的短期凭据。Redis 键、日志、指标和错误不得 包含密码或原始 `SecretRef`。 +`worker-owned` 的 score 是 ownership 租约到期时间,仅包含未进入 Drain 的 Proxy; +分配、续租、Drain、所有权过期与 Proxy 硬过期均在相同 Redis 原子脚本内维护该索引。 +它用于 Controller 构建 Worker Snapshot,不被 Gateway 请求热路径读取。 + ### Provider Upsert Go 层先完成上下文检查、批次校验、唯一键摘要、TTL/安全余量计算、凭据解析和 diff --git a/docs/development/implementation-plan.md b/docs/development/implementation-plan.md index f05b82b..2af91e6 100644 --- a/docs/development/implementation-plan.md +++ b/docs/development/implementation-plan.md @@ -210,8 +210,10 @@ Prometheus 运行时指标,三监听器隔离已通过测试;业务指标仍 WorkerControlPlane 现已接入 Controller 生命周期:Register、ACK 和 Runtime 报告均经 Redis 服务端 TTL 的 session/issued-snapshot/ACK 栅栏校验;mTLS SPIFFE -身份、消息/流限制和有界停机已实现。Snapshot 下发流、Gateway 客户端与 Outcome -上报仍未实现。 +身份、消息/流限制和有界停机已实现。`WatchSnapshots` 会持续发送并保持当前 epoch +的基础完整 Snapshot;Gateway 已具备 Register/Watch/ACK/Runtime 会话协调组件。 +按 Worker 的可下发 ownership 索引已进入 Redis 原子脚本。权威 Proxy/Routing +payload 发布、凭据分发、Gateway 命令与 Outcome 上报仍未实现。 已新增公用 `domain/activitypool` 契约及并发安全内存参考实现,Provider Reconciler 通过 `UpsertFetched` 写入带供应商 TTL 和分配安全余量的批次;已覆盖 @@ -247,8 +249,9 @@ Distribution 现通过公用 `admission.Admitter` 接入独立 `redisadmission` Controller 多副本共享同一计数。Client 身份只以 SHA-256 摘要进入 Redis,窗口切换 原子回收历史字段;Redis 异常 fail-closed 并返回 503,真实额度耗尽返回 429。 Gateway 请求热路径仍只使用本地准入,不增加 Redis/PostgreSQL 调用。 -WorkerControlPlane gRPC 接收端、session 签发/心跳、Snapshot ACK -账本和健康执行链仍待完成,因此 Task 10 尚未全部完成。 +WorkerControlPlane gRPC 接收端、session 签发/心跳、Snapshot ACK 账本、基础 +Snapshot 流和 Gateway 会话客户端已完成;权威 Proxy/Routing 发布、凭据分发、 +Outcome 和健康执行链仍待完成,因此 Task 10 尚未全部完成。 ## Task 11: Checker and Health Reducer diff --git a/docs/requirements/completion-audit.md b/docs/requirements/completion-audit.md index e0ce145..d0cc279 100644 --- a/docs/requirements/completion-audit.md +++ b/docs/requirements/completion-audit.md @@ -49,7 +49,9 @@ - `WorkerControlPlane`:Register、已签发 Snapshot 的 ACK 和完整稀疏 Runtime 报告已通过 gRPC、Memory 与 Redis 8.2 契约验证;session、ACK、报告均使用 Redis 服务端 TTL,负向 ACK 会关闭 Runtime 写入栅栏。Controller 已装配 loopback - plaintext fixture 与 SPIFFE mTLS 服务端;Snapshot 流、Gateway 客户端、Outcome 和 + plaintext fixture 与 SPIFFE mTLS 服务端;基础 Snapshot 流和 Gateway 的 + Register/Watch/ACK/Runtime 会话协调已实现。Redis 以 Worker 可下发 ownership + 索引支持后续 payload 构建;权威 Proxy/Routing payload、凭据分发、Outcome 和 Checker 尚未闭环。 - `PostgreSQL 管理面`:已定义 `adminstate` 事务 seam、并发安全 MemoryStore、 公用契约、100 并发 Routing CAS、租约 Outbox 和只含六张管理表的 Schema;pgx @@ -92,8 +94,9 @@ CI 已配置 Linux race job。PostgreSQL 18 和 Redis 8.2 的隔离 Adapter fixt 5. Worker Register/ACK/Runtime gRPC 接收路径、Redis 服务端 TTL 会话生命周期、 SPIFFE mTLS 校验和 Controller 生命周期接线已完成;Redis Provider Leader、 分布式请求额度、Distribution Client 限制和 Provider 状态丢失重建已完成。 -6. Worker 网络快照流、Gateway Snapshot 客户端和 Outcome 上报仍待完成;Redis - ownership drain/ACK/过期回收已完成。 +6. Worker 基础网络快照流和 Gateway Snapshot 客户端已完成;权威 Proxy/Routing + payload、凭据分发与 Outcome 上报仍待完成。Redis ownership drain/ACK/过期回收 + 及按 Worker 的可下发索引已完成。 7. Checker 调度、探测器和健康 reducer。 8. Admin/Distribution 细粒度授权和审计查询;Distribution 分布式限流已完成。 9. 真实 Compose/Kubernetes 集成、故障演练和代表性集群负载测试。 diff --git a/docs/requirements/traceability.md b/docs/requirements/traceability.md index 6c1038e..e519edc 100644 --- a/docs/requirements/traceability.md +++ b/docs/requirements/traceability.md @@ -7,7 +7,7 @@ | ID | 最终需求 | 来源 | 验证证据 | |---|---|---|---| -| ARCH-001 | 数据面 Worker 与控制面 Controller 分离 | 1-70 | 包、协议和部署拓扑已分离;Controller 已运行 Worker Register/ACK/Runtime gRPC 接收,Gateway/Checker/Loadgen 构建产物及 Snapshot 下发待实现 | +| ARCH-001 | 数据面 Worker 与控制面 Controller 分离 | 1-70 | 包、协议和部署拓扑已分离;Controller 已运行 Worker Register/Watch/ACK/Runtime gRPC,Gateway 已有会话客户端组件;Gateway/Checker/Loadgen 构建产物及权威 Snapshot payload 发布待实现 | | ARCH-002 | 热路径只做认证、本地路由和网络转发 | 1-70, 380-430 | Snapshot/Dispatch 及依赖边界已验证;完整 Gateway 进程与代表性性能剖析待完成 | | ARCH-003 | Gateway、Distribution、Admin、Metrics 独立入口 | 8904-8958 | Controller 命令已装配 Distribution/Admin/Metrics 三个独立监听及联动停机;Gateway 生产入口待装配 | | ARCH-004 | Controller 集中 Provider 获取与切换 | 1403-1580 | Redis Leader、动态 Provider Supervisor 与 Bootstrap 生产装配已完成;Admin disable/reload 驱动取消替换,多副本按权威 HMAC 指纹和 revision 栅栏收敛并拒绝旧配置换主;Routing 切换到 Drain 的编排待完成 | @@ -46,7 +46,7 @@ | PROXY-002 | 唯一键包含 scheme、host、port、username、credentialVersion | 6655-6727, 8605-8678 | 去重单测 | | PROXY-003 | TTL 来源优先级明确并统一 UTC | 681-747, 8655-8678 | TTL 表驱动测试 | | CAP-001 | Gateway 分配使用 Reserved -> Active 原子转换 | 1203-1467, 8530-8597 | 固定 Max 下打包 CAS 与 1,000 并发不超卖已完成;动态降容和完整生命周期证据待完成 | -| CAP-002 | 补池依据 Available Slots,不只看 Proxy 数量 | 1203-1402, 8530-8597 | `AvailableSlots`、显式 minimum/target 水位、pending 槽位和迟滞 Reconciler 已测试;Worker session/ACK/sequence/TTL/ownership fence 与 WorkerControlPlane Register/ACK/Runtime 接收已通过内存、Redis 8.2 和 gRPC 测试;Snapshot 下发、目标健康和 Gateway reserve 策略仍待完成 | +| CAP-002 | 补池依据 Available Slots,不只看 Proxy 数量 | 1203-1402, 8530-8597 | `AvailableSlots`、显式 minimum/target 水位、pending 槽位和迟滞 Reconciler 已测试;Worker session/ACK/sequence/TTL/ownership fence、基础 Snapshot 流及 Gateway 会话组件已通过内存、Redis 8.2 和 gRPC 测试;权威 payload、目标健康和 Gateway reserve 策略仍待完成 | | CAP-003 | pool.maxSize 包括 FETCHED/CHECKING/AVAILABLE/SUSPECT/DRAINING 与 pending expected | 3001-3533, 6642-6680 | `FetchBudget` 100 并发额度预占测试 | | CAP-004 | TTL safety margin 内禁止新分配 | 173-220, 6728-6741 | 时钟测试 | | CAP-005 | 多 Worker 不在热路径访问 Redis 计数 | 1403-1467 | Gateway 包依赖审计、Snapshot/Dispatch 测试 |