--- name: bp-distributed-systems description: 提供分布式系统设计 best practices(对应常见 fallacies)及各 SDLC 阶段 checklist。当需求涉及网络通信、多节点协调、数据一致性、故障恢复时使用。 --- # 分布式系统设计原则 > **触发条件**:需求涉及以下任一场景时应加载此 skill: > - 网络通信(RPC、HTTP、消息队列) > - 多节点协调(集群、主从、分片) > - 数据一致性(事务、复制、同步) > - 故障恢复(重试、failover、降级) --- ## 13 条 Best Practices 每条对应一个常见 Fallacy(错误假设)。 | # | Fallacy | 现实 | Best Practice | 关键设计要点 | |---|---------|------|---------------|-------------| | **BP-1** | 网络可靠 | 会丢包、延迟、断连 | 假设网络会失败 | 超时、重试(指数退避)、幂等、断路器 | | **BP-2** | 延迟为零 | 受距离/拥塞/处理影响 | 延迟是核心考量 | 异步优于同步、批量、本地缓存、预取 | | **BP-3** | 带宽无限 | 高峰期是稀缺资源 | 最小化传输量 | 压缩、只传必要字段、分页/流式、优先级队列 | | **BP-4** | 网络安全 | 可被窃听/篡改/攻击 | 零信任架构 | TLS加密、认证授权、输入验证、审计日志 | | **BP-5** | 拓扑不变 | 节点会增减/故障/迁移 | 适应动态拓扑 | 服务发现、负载均衡、健康检查、优雅上下线 | | **BP-6** | 单管理员 | 跨多个管理边界 | 多管理域协调 | 接口契约、版本兼容、跨团队沟通、统一监控 | | **BP-7** | 传输免费 | 消耗带宽/CPU/电力 | 优化传输路径 | 数据本地性、减少跨AZ调用、批量合并、增量同步 | | **BP-8** | 网络同构 | 不同厂商/配置/性能 | 兼容异构环境 | 不依赖特定网络特性、协议协商、适配不同MTU | | **BP-9** | 系统单体 | 多个独立组件构成 | 显式管理交互 | 组件边界、清晰接口、依赖管理、部分失败 | | **BP-10** | 完全可观测 | 状态难以完整获取 | 主动设计可观测性 | 结构化日志、分布式追踪、指标埋点、健康检查 | | **BP-11** | 永远在线 | 维护/故障/网络都会停机 | 高可用架构 | 冗余部署、自动failover、优雅降级、灾备 | | **BP-12** | 单一根因 | 多个关联因素 | 多维度故障分析 | 关联分析、保留上下文、时间线重建、故障注入 | | **BP-13** | 故障罕见 | 规模化后是常态 | 为故障而设计 | 故障隔离(blast radius)、自动恢复、混沌工程 | --- ## SDLC 各阶段 Checklist ### 需求澄清 | BP | 问题 | |----|------| | 1 | 网络调用失败时的预期行为?重试策略? | | 2 | 可接受的延迟上限?是否需要异步? | | 4 | 安全要求?认证/授权/加密? | | 10 | 需要哪些监控指标?告警阈值? | | 11 | SLA 要求?故障时的降级策略? | ### 系统设计 | BP | 检查项 | |----|--------| | 1 | 所有 RPC 都有超时和重试? | | 2 | 热路径是否考虑了缓存/异步? | | 5 | 节点增减时系统如何适应? | | 9 | 组件边界和接口是否清晰? | | 11 | 单点故障有冗余? | ### 编码 | BP | 检查项 | |----|--------| | 1 | 网络调用有 timeout?重试幂等安全? | | 4 | 敏感数据加密? | | 10 | 关键路径有日志/metrics? | | 12 | 错误日志包含足够上下文? | ### 测试 | BP | 测试场景 | |----|----------| | 1 | 网络超时/断连 | | 2 | 高延迟(注入延迟) | | 5 | 节点上下线 | | 11 | 依赖服务不可用 | | 13 | 故障恢复 | ### Code Review | BP | 关注点 | |----|--------| | 1 | 网络调用有防护? | | 3 | 大数据传输分批? | | 4 | 有安全漏洞? | | 10 | 可观测性充分? | ### 故障排查 | BP | 排查方向 | |----|----------| | 1 | 网络抖动/超时? | | 2 | 延迟突增? | | 5 | 拓扑变更(节点上下线)? | | 12 | 多个关联因素? | | 13 | 已知的常见故障模式? |