proxy-pool/docs/development/guide.md

66 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 开发指南
## 1. 环境
- Go 1.26 或 `go.mod` 指定版本。
- PostgreSQL 与 Redis 仅用于适配器集成测试,领域单测不依赖外部服务。
- 运行 `go test -race` 需要 CGO 和 C 编译器。
- Docker Compose 用于本地完整拓扑Docker 不应成为普通单测前置条件。
## 2. 开发循环
1.`traceability.md` 中找到需求 ID。
2. 先写会失败的单测或契约测试,确认失败原因与需求一致。
3. 实现最小完整行为,不增加空接口或预留目录。
4. 运行目标包测试,再运行全仓库测试和静态检查。
5. 更新需求证据、相关文档和配置示例。
```powershell
go test ./internal/domain/proxy
go test ./...
go vet ./...
go build ./...
```
## 3. 包设计规则
- 领域包使用业务语言,不使用 Controller、HTTP 或数据库 DTO。
- 模块接口应隐藏内部策略步骤,避免把 filter/scorer/picker 拆成浅接口链。
- 时间逻辑注入 `now` 或 Clock测试禁止依赖真实睡眠。
- Provider 调度使用有界信号、singleflight、超时和抖动退避。
- 后台队列必须有容量、溢出策略、关闭语义和指标。
- 并发计数必须以不变量测试证明,不只检查最终值。
## 4. 配置变更
新增字段时同时修改:
1. `internal/config` 类型、默认值与校验。
2. `configs/default.yaml`
3. `docs/configuration/reference.md`
4. 至少一个有效示例和一个无效测试。
5. 配置版本兼容说明;不静默忽略未知字段。
## 5. API 变更
- OpenAPI 是 REST 契约源Protobuf 是 Controller/Worker 契约源。
- 先更新契约和兼容性测试,再修改 handler。
- Distribution 不得出现 lease、release、renew、return 等资源归还语义。
- 错误响应包含稳定 code 和 requestId不向调用方暴露 Secret 或内部栈。
## 6. 并发与性能
- Gateway 请求路径不得出现远程存储访问和无界 goroutine 创建。
- Snapshot 构建在后台完成,发布后只读;请求只做一次原子指针读取。
- Proxy 容量由同一个打包原子值保存 Active/Reserved避免分开检查再写入。
- 性能优化必须附基准100k QPS 结论必须附完整环境和负载模型。
## 7. 提交前检查
```powershell
./scripts/verify.ps1
```
审查还要确认:无 Secret 日志、无 Proxy IP 高基数标签、无默认 direct、无
Extraction Lease API、无把重复结果误计为 Empty 的逻辑。