关于 scalability-playbook
为工程团队提供识别和解决系统扩展瓶颈的分阶段指南,涵盖测量、优化策略、扩容触发条件和负载测试。
主要功能
- 01瓶颈测量与影响评估
- 02按投入排序的扩展策略
- 03指标阈值与行动触发器
- 04分阶段扩容计划
- 05负载测试与成本分析
适用场景
- 01定位数据库查询延迟
- 02规划从单机到横向扩容
- 03根据指标设定扩容告警
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ patricio0312rev/ skills --skill scalability-playbook安装后在 Claude Code 中输入/scalability-playbook确认已加载。
详细介绍
可扩展性手册
识别和解决可扩展性瓶颈的系统化方法。
瓶颈分析
当前系统概况
Traffic: 1,000 req/min
Users: 10,000 active
Data: 100GB database
Response time: p95 = 500ms
已识别的瓶颈
1. 数据库查询
症状: 页面加载缓慢(2-3 秒) 测量结果: 查询时间 p95 = 800 毫秒 影响: 高——影响所有读取操作 触发条件: p95 >500 毫秒时
2. 单台服务器
症状: CPU 使用率高(>80%) 测量结果: 平均负载 >4 影响: 中——间歇性变慢 触发条件: CPU >70% 时
3. 没有缓存
症状: 重复的数据库查询 测量结果: 缓存命中率 = 0% 影响: 中——造成不必要的负载 触发条件: 查询量 >10k/分钟时
扩展策略(按顺序)
第 1 级:快速见效(数天)
1.1 添加数据库索引
问题: 查询缓慢 解决方案:
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_orders_user_created ON orders(user_id, created_at);
预期影响: 查询速度提升 80% 成本: $0 工作量: 1 天
1.2 启用查询缓存
问题: 查询重复 解决方案: Redis 缓存层
const cached = await redis.get(`user:${userId}`);
if (cached) return JSON.parse(cached);
const user = await db.users.findById(userId);
await redis.setex(`user:${userId}`, 3600, JSON.stringify(user));
预期影响: 数据库负载降低 60% 成本: $50/月 工作量: 2 天
第 2 级:水平扩展(数周)
2.1 添加只读副本
问题: 读取密集型工作负载 解决方案: 将读取请求路由到副本
Write Load: Primary DB
Read Load: 3x Read Replicas
预期影响: 读取容量提升 3 倍 成本: $300/月 工作量: 1 周
2.2 负载均衡器 + 多台服务器
问题: 单点故障 解决方案:
ALB
├── Server 1
├── Server 2
└── Server 3
预期影响: 吞吐量提升 3 倍 成本: $400/月 工作量: 1 周
第 3 级:架构变更(数月)
3.1 静态资源使用 CDN
问题: 资源交付缓慢 解决方案: CloudFront CDN 预期影响: 资源加载速度提升 90% 成本: $100/月 工作量: 1 周
3.2 异步处理
问题: 同步操作缓慢 解决方案: 后台任务队列
// Before: Sync
await sendEmail(user);
await processPayment(order);
await updateAnalytics(event);
return response; // Waits 5+ seconds
// After: Async
await queue.add("send-email", { userId });
await queue.add("process-payment", { orderId });
await queue.add("update-analytics", { event });
return response; // Returns immediately
预期影响: 响应速度提升 80% 成本: $50/月(SQS) 工作量: 2 周
第 4 级:数据层优化(数月)
4.1 数据库分片
问题: 单个数据库过大 解决方案: 按 user_id 分片
Shard 1: user_id 0-24999
Shard 2: user_id 25000-49999
Shard 3: user_id 50000-74999
Shard 4: user_id 75000-99999
预期影响: 容量提升 4 倍 成本: $1,200/月 工作量: 2 个月
4.2 事件驱动架构
问题: 耦合紧密、故障级联 解决方案: 消息代理(Kafka)
Service A → Kafka → Service B
↘ ↗ Service C
预期影响: 隔离性和弹性更佳 成本: $500/月 工作量: 3 个月
扩展触发条件
| Metric | Current | Warning | Critical | Action |
| ---------------- | ------- | ------- | -------- | ----------------------- |
| CPU | 40% | 70% | 85% | Add servers |
| Memory | 50% | 75% | 90% | Upgrade instances |
| DB Connections | 20 | 40 | 50 | Add read replicas |
| Query Time (p95) | 200ms | 500ms | 1000ms | Add indexes |
| Queue Depth | 100 | 1000 | 5000 | Add workers |
| Error Rate | 0.1% | 1% | 5% | Investigate immediately |
分阶段扩展计划
阶段 1:当前规模 → 10 倍(0-3 个月)
目标: 10,000 req/min、100K 用户
行动:
- 添加数据库索引(第 1 周)
- 实施 Redis 缓存(第 2 周)
- 添加 3 倍只读副本(第 4 周)
- 对应用服务器进行水平扩展(第 6 周)
- 为静态资源使用 CDN(第 8 周)
成本: $500 → $1,000/月
阶段 2:10 倍 → 100 倍(3-12 个月)
目标: 100,000 req/min、1M 用户
行动:
- 数据库分片(第 4-6 个月)
- 多区域部署(第 6-8 个月)
- 拆分微服务(第 8-12 个月)
- 事件驱动架构(第 10-12 个月)
成本: $1,000 → $10,000/月
阶段 3:100 倍 → 1000 倍(12-24 个月)
目标: 1M req/min、10M 用户
行动:
- 全球 CDN(第 13 个月)
- 高级缓存(L1/L2)(第 14-15 个月)
- 定制数据库解决方案(第 16-18 个月)
- 边缘计算(第 18-20 个月)
成本: $10,000 → $100,000/月
负载测试计划
# Current baseline
hey -n 10000 -c 100 https://api.example.com/users
# Target 10x
hey -n 100000 -c 1000 https://api.example.com/users
# Measure:
# - Requests/sec
# - p50, p95, p99 latency
# - Error rate
# - Resource utilization
成本效益分析
| Strategy | Cost/Month | Expected Impact | ROI | Priority |
| ------------- | ---------- | ------------------ | --- | -------- |
| DB Indexes | $0 | 80% faster queries | ∞ | HIGH |
| Redis Cache | $50 | 60% less DB load | 12x | HIGH |
| Read Replicas | $300 | 3x capacity | 10x | MEDIUM |
| Load Balancer | $400 | 3x throughput | 7x | MEDIUM |
| DB Sharding | $1,200 | 4x capacity | 3x | LOW |
最佳实践
- 先测量: 不要盲目优化
- 从容易见效的地方入手: 优先采取简单有效的措施
- 进行负载测试: 在投入生产前验证
- 持续监控: 设置告警
- 提前规划: 在达到限制前扩展
- 关注成本: 根据投资回报率做决策
- 循序渐进: 进行小幅、安全的变更
输出检查清单
- 当前系统配置
- 已识别并测量瓶颈
- 按所需工作量排列扩展策略
- 为每项操作定义触发条件
- 分阶段计划(1x → 10x → 100x)
- 各阶段的成本估算
- 负载测试计划
- 监控仪表板
- 回滚流程