docs: align architecture evidence with runtime

This commit is contained in:
youfak 2026-07-29 21:18:37 +08:00
parent 80c6ba1ea8
commit f46d79511f
5 changed files with 65 additions and 17 deletions

View File

@ -56,9 +56,9 @@ test/{fixtures,integration,e2e,load}/
- [ ] Create module `github.com/proxy-pool/proxy-pool` with Go 1.26.
- [ ] Pin YAML v4, pgx/v5, go-redis/v9, gRPC, protobuf, Prometheus, and x/sync.
- [ ] Add `scripts/verify.ps1` that runs format check, `go vet`, unit tests, race tests,
- [x] Add `scripts/verify.ps1` that runs format check, `go vet`, unit tests, race tests,
and builds all commands, each test command bounded to 60 seconds.
- [ ] Add CI for Windows and Linux with unit/race/build jobs.
- [x] Add CI for Windows and Linux with unit/race/build jobs.
- [ ] Verify `go mod tidy`, `go test ./...`, and `go build ./cmd/...` succeed.
## Task 2: Strict Configuration
@ -214,7 +214,7 @@ Adapter 已通过真实 Redis 8.2 运行同一套公用契约;原子 Lua 覆
and idempotency behavior.
- [x] Specify Worker register, snapshot, delta, ACK, report, heartbeat, ownership drain,
and resync messages.
- [x] Validate OpenAPI and compile protobuf descriptors in CI.
- [ ] Validate OpenAPI and compile protobuf descriptors in CI.
## Task 13: Deployment and Observability

View File

@ -7,10 +7,10 @@
| ID | 最终需求 | 来源 | 验证证据 |
|---|---|---|---|
| ARCH-001 | 数据面 Worker 与控制面 Controller 分离 | 1-70 | 进程结构、架构图、构建产物 |
| ARCH-002 | 热路径只做认证、本地路由和网络转发 | 1-70, 380-430 | 依赖规则、测试、性能剖析 |
| ARCH-003 | Gateway、Distribution、Admin、Metrics 独立入口 | 8904-8958 | 配置、监听装配、端口测试 |
| ARCH-004 | Controller 集中 Provider 获取与切换 | 1403-1580 | Leader、singleflight、集成测试 |
| ARCH-001 | 数据面 Worker 与控制面 Controller 分离 | 1-70 | 包、协议和部署拓扑已分离;四个 `cmd/proxy-*` 构建产物待实现 |
| ARCH-002 | 热路径只做认证、本地路由和网络转发 | 1-70, 380-430 | Snapshot/Dispatch 及依赖边界已验证;完整 Gateway 进程与代表性性能剖析待完成 |
| ARCH-003 | Gateway、Distribution、Admin、Metrics 独立入口 | 8904-8958 | Distribution/Admin 独立监听已测试Gateway/Metrics 生产入口待装配 |
| ARCH-004 | Controller 集中 Provider 获取与切换 | 1403-1580 | 单进程 Reconciler、合并通知和切换领域契约已完成分布式 Leader 与运行装配待完成 |
| ARCH-005 | 100k QPS 峰值使用多 Worker 集群 | 当前会话 | 未验证设计目标;待代表性集群负载报告 |
## Routing 与 Upstream
@ -22,7 +22,7 @@
| ROUTE-003 | 支持 sequential、random、roundRobin、weighted、leastConnections | 5825-6467 | 五种领域策略及单测已完成;配置到 Gateway/Distribution 运行链的接线待完成 |
| ROUTE-004 | Sequential 连续空结果达到阈值后原子切换一次 | 5295-5824, 6520-6617 | 进程内 `RoutingCursor` 版本 CAS 与 100 并发测试已完成;持久化恢复和跨实例 CAS 待完成 |
| ROUTE-005 | 空计数属于 Upstream当前选择属于 Routing | 8442-8529 | 共享 `UpstreamEmptyState` 双 Routing 测试 |
| ROUTE-006 | 旧 Upstream 已有 Proxy 继续耗尽,不因切换直接丢弃 | 6618-6641 | Drain 测试 |
| ROUTE-006 | 旧 Upstream 已有 Proxy 继续耗尽,不因切换直接丢弃 | 6618-6641 | 通用 ownership Drain/ACK 原语已测试Routing 切换到 Drain 的编排待完成 |
| ROUTE-007 | 无可用 Upstream 时显式 reject、wait 或 direct默认 reject | 5075-5294, 6743-6760 | 三种动作的配置校验已完成Gateway 当前仅返回 503默认化及 wait/direct 运行时待完成 |
## Provider 与补池
@ -32,7 +32,7 @@
| FETCH-001 | 每个 Provider 有独立 requestInterval、maxInFlight、timeout 和 retry | 968-2394 | `provider/reconciler_test.go` |
| FETCH-002 | 大量缺池信号合并为 singleflight/容量 1 通知 | 2067-2136, 8808-8849 | `coalesce.Signal` 与 100 并发通知测试 |
| FETCH-003 | 错误使用指数退避和抖动429 尊重 Retry-After | 1601-1831, 8808-8856 | `provider/reconciler_test.go``providerapi/http_adapter_test.go` |
| FETCH-004 | Provider 获取由单逻辑 Leader 执行 | 1403-1580 | 多实例锁测试 |
| FETCH-004 | Provider 获取由单逻辑 Leader 执行 | 1403-1580 | 单进程 Reconciler 已完成Redis Leader 租约及多实例互斥测试待完成 |
| FETCH-005 | Empty 与 Error 分开;只有合法候选为零时 Empty++ | 8442-8529 | `fetch_result_test.go` 分类矩阵 |
| FETCH-006 | 重复候选不当作 Empty记录独立指标 | 8442-8480 | DuplicateOnly 分类与 Provider 测试 |
| FETCH-007 | 模板限制响应大小、执行时间、函数集和外部访问 | 8808-8856 | `providerapi/template_parser_test.go` 输入、输出、候选、超时、递归与函数白名单测试 |
@ -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 | `Inventory.AvailableSlots` 与 Pool Reconciler 测试 |
| CAP-002 | 补池依据 Available Slots不只看 Proxy 数量 | 1203-1402, 8530-8597 | TTL/状态/Active/Reserved 的 `AvailableSlots` 与 Reconciler 已测试ownership、目标健康及 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 测试 |
@ -78,13 +78,13 @@
| ID | 最终需求 | 来源 | 验证证据 |
|---|---|---|---|
| HEALTH-001 | 全局健康与 Routing/目标健康分离 | 221-270, 8679-8708 | 健康 reducer 测试 |
| HEALTH-002 | 健康调度有 jitter、maxInFlight 和分级频率 | 8679-8736 | 调度测试 |
| HEALTH-003 | 失败分级 SUSPECT -> UNHEALTHY -> REMOVE | 8679-8736 | 状态机测试 |
| HEALTH-001 | 全局健康与 Routing/目标健康分离 | 221-270, 8679-8708 | Protobuf/配置契约已定义;目标 Profile 与健康 Reducer 待实现 |
| HEALTH-002 | 健康调度有 jitter、maxInFlight 和分级频率 | 8679-8736 | 配置校验已完成;有界调度器、抖动和分级频率测试待实现 |
| HEALTH-003 | 失败分级 SUSPECT -> UNHEALTHY -> REMOVE | 8679-8736 | Proxy 状态迁移骨架已完成;连续失败 Reducer 与活动池原子提交待实现 |
| SEC-001 | API 认证与 Proxy 认证分离Secret 统一脱敏 | 7528-8111, 8904-8945 | Config 脱敏、Provider Store -> SecretRef -> Gateway Resolver 跨包测试与格式化泄漏回归测试 |
| SEC-002 | 非回环监听无保护时严格模式启动失败 | 8112-8441 | 配置校验测试 |
| OPS-001 | 配置校验后构建不可变快照并原子替换 | 8959-8999 | 100k 索引、版本/epoch 与并发 Apply/Acquire 测试 |
| OPS-002 | 优雅停机停止新请求/Fetch等待现有流量后超时关闭 | 8981-9000 | Provider Run 收敛与 `Handler.Shutdown` HTTP 排空、Hijacked CONNECT 超时关闭测试 |
| OPS-003 | PostgreSQL 只保存管理修订、Upstream/Routing 状态、Admin 审计与 Outbox | 当前会话 | ADR-006、`adminstate` 公用契约和六表 Schema 边界测试;真实 PostgreSQL 契约待完成 |
| OBS-001 | 指标禁止 Proxy IP、session、Client、完整 URL 高基数标签 | 9001-9029 | 指标描述符测试 |
| OBS-001 | 指标禁止 Proxy IP、session、Client、完整 URL 高基数标签 | 9001-9029 | 文档和配置已约束Prometheus 指标模块及描述符测试待实现 |
| TEST-001 | 覆盖对话中列出的 11 个关键并发与故障场景 | 9030-9082 | 测试清单Redis 活动池由 Memory/Redis 公用契约覆盖,跨进程故障场景仍按清单推进 |

View File

@ -128,3 +128,39 @@ Routing 自上而下匹配,首条命中停止;支持 Gateway 与 Extract 两
需要先确定“拒绝降容”或“允许排空”的正式契约。
- Snapshot Store 永久保留见过的 Proxy ID 对应 Capacity短 TTL、高换 IP 场景下
需要排空后回收,避免运行态注册表长期增长。
## Routing Runtime 设计输入2026-07-29
- `对话内容.md` 最后一个明确建议将 Sequential `endBehavior` 默认设为 `stop`
当前领域构造器默认 `stayLast`,配置参考只展示显式值,三者需要统一。
- 产品安全默认已确定为 `onUnavailable=reject`,但当前严格配置要求字段必填;
需要确认省略时自动补 reject还是继续拒绝启动。
- disabled Upstream 的确定语义是停止 Fetch、健康检查和新分配已有 Proxy/连接
自然排空Sequential 是临时跳过还是永久推进尚需固化。
- `direct` 对 Gateway 表示经过目标安全策略后绕过代理直连;对独占提取没有可返回
的 Proxy推荐在 `purpose=extract` 时拒绝 `direct` 配置。
- 推荐采用混合 Routing RuntimeController 维护 Sequential 权威游标和跨实例
CASGateway 消费不可变路由快照并在本地执行 random/roundRobin/weighted/
leastConnections热路径不访问 Redis/PostgreSQLDistribution 在 Controller
内复用同一编译策略并交给 Redis 原子提取执行。
- Gateway 当前没有完整进程装配,`RulesRouter` 仅存在于领域/Handler 测试;
Distribution 只接受调用方 `allowedUpstreams`,尚未把 `purpose=extract` 路由与
Client 许可集求交。
## 架构证据一致性审计2026-07-29
- `.github/workflows/ci.yml` 已覆盖 Windows/Linux vet、unit、build 及 Linux race
`scripts/verify.ps1` 也覆盖格式、vet、60 秒单测、条件 race 和 build因此两项
基础工程验收应计为完成。
- OpenAPI 通过 Go 测试执行结构/路径/响应码检查Protobuf descriptor 曾手工编译
通过,但 CI 没有安装/调用 `protoc`;“在 CI 编译 descriptor”仍未完成。
- `cmd/proxy-gateway`、`proxy-controller`、`proxy-checker`、`proxy-loadgen` 均不存在;
Docker/Kubernetes 当前只是目标拓扑,不能作为构建产物或运行验证证据。
- Provider Reconciler 的合并通知和请求约束已完成,但没有 Redis Leader Adapter
或多实例锁测试FETCH-004 仍是未完成要求。
- Checker/Health 当前只有配置、Protobuf 和 Proxy 状态迁移骨架,没有 Scheduler、
Reducer 或目标 ProfileHEALTH-001..003 不能记为已实现。
- 当前没有 Prometheus 指标模块或描述符测试OBS-001 只有文档约束,运行时证据
缺失。
- Available Slots 当前纳入 AVAILABLE、TTL、安全余量、Max、Active、Reserved
ownership、route/target health 与 Gateway reserve 尚未进入同一聚合模型。

View File

@ -4,7 +4,8 @@
- 已复核 `implementation-plan.md` 的验收项机器契约、OpenAPI/Protobuf 验证、
完整文档导航、20 份配置示例和 35 张 Mermaid 图已有仓库及验证证据,修正
6 个滞后勾选;当前为 48/73约 66%。
滞后勾选;进一步核对发现 descriptor 编译尚未进入 CI同时验证脚本和双平台
CI 已完成,最终校正为 49/73约 67%。
- 正在并行审计 Routing/Sequential 与 Proxy Capacity 的剩余边界;本轮只收敛
已确认公共接口和既有需求,不把 Checker、pgx 或 100,000 QPS 目标提前记为完成。
- Routing 审计确认五种策略尚未进入真实请求链、`onUnavailable` 只有配置校验、
@ -15,6 +16,17 @@
该结果只证明现有行为基线,不替代上述缺失运行链的验收。
- 一次组合检索因包含不存在的 `config` 路径返回退出码 1有效输出已保留
后续检索改用实际目录 `internal/config`,未重复原命令。
- Routing Runtime 设计核对确认采用 Controller 权威状态 + Gateway 不可变本地
快照的混合模型;已定位 Extract direct、默认值、disabled 推进和单 Upstream
Sequential 四项需确认语义,尚未在未批准设计上开始实现。
- 一次读取误用了不存在的 `controller/runtime/bootstrap.go` 路径;实际文件为
`runtime.go`Gateway 构建辅助位于 `gateway/server/bootstrap.go`,已改用真实
文件继续核对,未重复失败命令。
- 架构证据审计确认 Provider 分布式 Leader、Health Reducer/Checker、Prometheus
指标模块和四个生产命令仍缺实现;追踪矩阵已把这些条目的配置/领域基础与
完整运行时证据拆开描述。
- 一次 `rg` 同时包含不存在的 `cmd` 路径,以及两次使用 PowerShell 不展开的
通配路径,分别返回退出码 2/123后续改用实际目录和 `-g` 过滤,不重复原命令。
- 已实现共享 `httpapi`、`httpsecurity` 与 `httpserver`,统一严格 JSON、Problem、
Request ID、认证、可信代理、Client ID、准入、多监听器生命周期和优雅停机。
- Distribution/Admin Handler 已装配到独立监听器Gateway 配置认证统一复用

View File

@ -55,5 +55,5 @@
目标运行拓扑。
- `cmd/proxy-*`、PostgreSQL 管理面 Adapter、Provider Leader/分布式限流、
Checker 运行时、Redis 故障转移验证与代表性集群压测属于后续实施范围。
- `implementation-plan.md` 当前按 73 个验收项统计;已校正为 48 项完成,
验收项完成率约 66%,不等同于生产就绪度。
- `implementation-plan.md` 当前按 73 个验收项统计;已校正为 49 项完成,
验收项完成率约 67%,不等同于生产就绪度。