总体纲领
在coding之前 我们需要先有个draft(草案)
包含 背景 约束条件 设计的目的与折中 存在的问题以及改进这四个部分
背景
目标: 精准复现、定位并理解技术问题的本质、影响范围及业务上下文。
关键活动:
- 问题复现与场景描述 (Reproduce & Describe):
- 复现路径: 明确稳定复现问题的具体步骤、输入和环境(开发、测试、生产环境;特定用户/数据)。
- 异常表现: 清晰描述“不符合预期”的具体行为,包括错误日志、监控指标异常(延迟、错误率、资源使用率)、UI/API 表现等。
- 预期行为: 明确在同样场景下,系统 应该 表现出什么样的行为。
- 根因分析 (Root Cause Analysis - RCA):
- 信息收集: 收集相关日志、Metrics、Traces、Dump 文件、配置信息、代码版本、变更历史。
- 关联分析: 分析时间线,将问题现象与系统变更、流量波动、依赖服务异常等进行关联。
- 假设与验证: 提出可能的根因假设,并通过调试、日志分析、实验等手段进行验证或排除。
- 影响评估 (Impact Assessment):
- 业务影响: 评估问题对用户、业务流程、收入、SLA/SLO 的具体影响。
- 技术影响: 评估问题对系统其他模块、数据一致性、安全性的潜在影响。
- 现状审视 (Review Current State):
- 审视当前代码库、架构设计、技术文档中与问题相关部分。
- 了解是否存在已知的类似问题或临时的 Workaround。
产出: 一份详尽的 技术问题分析报告 (Technical Problem Report / RCA Report),包含复现步骤、根本原因、影响范围和相关证据。
约束条件
目标: 明确解决方案必须遵守的技术边界和需要达成的技术/业务指标。
关键活动:
- 识别技术约束 (Identify Technical Constraints):
- 平台/语言/框架: 必须使用的编程语言、框架、操作系统、云平台等。
- 架构/兼容性: 必须兼容的现有系统架构、API 接口、数据格式、老版本等。
- 资源限制: CPU、内存、存储、网络带宽、预算等硬性限制。
- 规范/安全: 必须遵守的编码规范、安全标准、合规要求。
- 定义技术目标 (Define Technical Goals):
- 功能性目标: 解决方案需要实现的核心功能。
- 非功能性目标 (NFRs): 明确性能(延迟、QPS)、可用性 (Availability)、可靠性 (Reliability)、可伸缩性 (Scalability)、可维护性 (Maintainability)、可测试性 (Testability) 等方面的具体指标要求。
- 明确核心假设 (Identify Technical Assumptions):
- 方案设计所依赖的底层库行为、第三方服务承诺、网络环境稳定性等假设。
产出: 一份 技术规格与约束清单 (Technical Specifications & Constraints List),作为设计方案的输入和评判标准。
设计的目的以及折中
目标: 构思并评估多种技术方案,选择最优解,并清晰阐述其设计原理和取舍。
关键活动:
- 方案探索与头脑风暴 (Explore & Brainstorm):
- 探讨不同的算法、数据结构、设计模式、架构风格(如 TCC vs Saga, 同步 vs 异步, 轮询 vs 推送)。
- 进行技术选型研究(如数据库、缓存、消息队列)。
- 方案设计与细化 (Design & Detail):
- 绘制架构图、流程图、时序图、API 契约 (Swagger/OpenAPI)。
- 设计数据模型 (Schema)、关键接口和核心模块。
- 考虑异常处理、重试机制、幂等性、事务管理、数据一致性。
- 构建原型/PoC (Optional): 对关键或高风险部分进行快速原型验证。
- 技术评估与权衡 (Evaluate & Trade-off):
- 影响分析: 评估方案对现有代码的侵入性、对系统性能/稳定性的影响。
- 复杂性评估: 分析方案的实现复杂度和维护成本。
- 风险评估: 识别技术风险、集成风险、部署风险。
- 权衡决策: 基于 STAGE 2 的目标和约束,对比不同方案的优劣(如 CAP 定理的取舍,性能 vs 成本,开发效率 vs 长期可维护性),做出明智选择并记录决策理由 (ADR - Architectural Decision Record)。
产出: 一份 技术设计文档 (Technical Design Document - TDD),包含方案选型、详细设计、接口定义和关键权衡。
存在的问题及改进
目标: 制定详细的实施、测试、部署计划,并确保方案的质量和可观测性。
关键活动:
- 制定实施计划 (Develop Implementation Plan):
- 任务分解 (WBS): 将设计方案分解为具体的开发任务,估算工作量。
- 代码管理: 确定分支策略、Code Review 流程。
- CI/CD: 规划构建、测试、部署流水线。
- 制定测试策略 (Develop Test Strategy):
- 测试层级: 规划单元测试、集成测试、端到端 (E2E) 测试、性能测试、安全测试。
- 测试覆盖率: 定义代码覆盖率和场景覆盖率目标。
- 测试数据: 准备或生成必要的测试数据。
- 制定部署与回滚计划 (Develop Deployment & Rollback Plan):
- 规划部署策略(蓝绿部署、金丝雀发布、滚动更新)。
- 制定详细的回滚步骤和验证标准。
- 考虑数据迁移或兼容性问题。
- 规划监控与告警 (Plan Monitoring & Alerting):
- 确定需要监控的关键业务指标和系统指标 (Logs, Metrics, Traces)。
- 配置相应的告警规则和通知机制。
- 编写文档 (Write Documentation):
- 完善代码注释、README、API 文档、运维手册。
产出: 一份 实施与验证计划 (Implementation & Validation Plan),包含任务列表、测试用例、部署流程和监控方案。