关于 system-architecture
System Architecture Expert 是用于设计和评审分布式系统、编写架构文档及准备系统设计面试的技能。它提供从需求与容量估算到数据设计、可靠性和权衡分析的结构化流程。
主要功能
- 01引导收集系统需求
- 02涵盖容量与存储估算
- 03组织高层架构设计
- 04讲解数据库、缓存与队列
- 05梳理可扩展性和可靠性模式
- 06提供模板与案例分析
适用场景
- 01规划分布式系统设计
- 02编写架构文档
- 03分析设计方案的权衡
- 04准备系统设计面试
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ yennanliu/ cs_basics --skill system-architecture安装后在 Claude Code 中输入/system-architecture确认已加载。
详细介绍
系统架构专家
何时使用此 Skill
在以下情况下使用此 Skill:
- 设计分布式系统
- 编写系统设计文档
- 准备系统设计面试
- 创建架构图
- 分析不同设计方案之间的权衡
- 审查或改进现有系统设计
系统设计框架
1. 收集需求(5-10 分钟)
功能需求:
- 核心功能有哪些?
- 用户可以执行哪些操作?
- 输入和输出是什么?
非功能需求:
- 规模:有多少用户?数据量有多大?
- 性能:延迟要求是什么?(p50、p95、p99)
- 可用性:需要达到什么运行时间?(99.9%、99.99%)
- 一致性:强一致性还是最终一致性?
约束:
- 预算限制
- 技术栈限制
- 团队专业能力
- 时间安排
示例问题:
- How many daily active users?
- What's the read:write ratio?
- What's the average data size?
- What's the peak load vs average load?
- Do we need real-time updates?
- Can we have data loss?
2. 容量估算(粗略估算)
计算:
Traffic:
- DAU = 100M users
- Each user makes 10 requests/day
- QPS = 100M * 10 / 86400 ≈ 11,574 QPS
- Peak QPS = 2-3x average ≈ 30,000 QPS
Storage:
- 100M users * 1KB per user = 100GB
- With 3x replication = 300GB
- Growth: 300GB * 365 days = 109.5TB/year
Bandwidth:
- QPS * average request size
- 11,574 * 10KB = 115.74MB/s
内存/缓存:
- 80-20 法则:20% 的数据承载 80% 的流量
- 缓存 = 热数据总量的 20%
3. 高层设计
核心组件:
- 客户端层(Web、移动端、桌面端)
- API 网关 / 负载均衡器
- 应用服务器(业务逻辑)
- 缓存层(Redis、Memcached)
- 数据库(SQL、NoSQL,或两者兼用)
- 消息队列(Kafka、RabbitMQ)
- 对象存储(S3、GCS)
- CDN(CloudFront、Akamai)
绘制架构图:
[Clients] → [CDN]
↓
[Load Balancer]
↓
[Application Servers]
↙ ↓ ↘
[Cache] [DB] [Queue] → [Workers]
↓
[Object Storage]
4. 数据库设计
SQL 与 NoSQL 的选择:
适用于 SQL 的情况:
- 需要 ACID 事务
- 需要使用 JOIN 的复杂查询
- 结构化且存在关联关系的数据
- 示例:PostgreSQL、MySQL
适用于 NoSQL 的情况:
- 超大规模(水平扩展)
- 灵活的架构
- 高写入吞吐量
- 示例:Cassandra、DynamoDB、MongoDB
分片策略:
- 基于哈希:
user_id % num_shards - 基于范围:用户 1-100M 存储在分片 1
- 基于地理位置:美国用户存储在美国分片
- 一致性哈希:实现均匀分布
架构设计:
-- Example: URL Shortener
CREATE TABLE urls (
id BIGSERIAL PRIMARY KEY,
short_url VARCHAR(10) UNIQUE NOT NULL,
long_url TEXT NOT NULL,
user_id BIGINT,
created_at TIMESTAMP DEFAULT NOW(),
expires_at TIMESTAMP,
click_count INT DEFAULT 0,
INDEX (short_url),
INDEX (user_id)
);
5. 深入分析组件
缓存策略:
- 旁路缓存:应用从缓存读取,未命中时从数据库加载
- 直写缓存:同时写入缓存和数据库
- 回写缓存:先写入缓存,再异步写入数据库
淘汰策略:
- LRU(最近最少使用)——最常见
- LFU(最不经常使用)
- TTL(生存时间)
负载均衡:
- 轮询:简单、均匀分配
- 最少连接:路由到最空闲的服务器
- 一致性哈希:尽量减少重新分配
- 加权:根据服务器容量分配
消息队列模式:
- 发布/订阅:一对多(通知)
- 工作队列:任务分发(作业处理)
- 扇出:广播到多个队列
6. 可扩展性模式
水平扩展:
- 增加更多服务器
- 使用负载均衡器
- 应用服务器保持无状态
- 会话存储在缓存/数据库中
垂直扩展:
- 为服务器增加更多 CPU/RAM
- 受硬件限制
- 更简单,但存在上限
微服务:
Monolith:
[Single App] → [DB]
Microservices:
[User Service] → [User DB]
[Post Service] → [Post DB]
[Feed Service] → [Feed DB]
优点:
- 可独立扩展
- 技术选择灵活
- 故障隔离
缺点:
- 复杂度增加
- 网络延迟
- 分布式事务
7. 可靠性与可用性
复制:
- 主从:一个写入节点,多个读取节点
- 双主:多个写入节点(需要解决冲突)
- 多区域:地理位置冗余
故障切换:
- 主动-被动:备用服务器接管
- 主动-主动:两台服务器都处理流量
限流:
- 令牌桶算法
- 漏桶算法
- 固定窗口计数器
- 滑动窗口日志
熔断器:
States:
Closed → Normal operation
Open → Reject requests immediately
Half-Open → Test if service recovered
8. 常见系统设计模式
内容分发:
- 使用 CDN 分发静态资源
- 地理分布式边缘服务器
- 在边缘节点缓存
数据一致性:
- 强一致性:读取结果反映最新写入(ACID)
- 最终一致性:读取结果最终会反映写入(BASE)
- CAP 定理:三者取其二:一致性、可用性、分区容错性
API 设计:
RESTful:
GET /api/users/{id}
POST /api/users
PUT /api/users/{id}
DELETE /api/users/{id}
GraphQL:
query {
user(id: "123") {
name
posts {
title
}
}
}
9. 系统设计模板
使用此结构(基于 system_design/00_template.md):
# {System Name}
## 1. Requirements
### Functional
- [List core features]
### Non-Functional
- Scale: [Users, QPS, Data]
- Performance: [Latency requirements]
- Availability: [Uptime target]
## 2. Capacity Estimation
- Traffic: [QPS calculations]
- Storage: [Data size, growth]
- Bandwidth: [Network requirements]
## 3. API Design
[endpoint] - [description]
## 4. High-Level Architecture
[Diagram]
## 5. Database Schema
[Tables and relationships]
## 6. Detailed Design
### Component 1
[Deep dive]
### Component 2
[Deep dive]
## 7. Scalability
[How to scale each component]
## 8. Trade-offs
[Decisions and alternatives]
10. 真实案例
参考 system_design/ 中的案例研究:
- Netflix:视频流媒体、推荐
- Twitter:时间线、推文存储、热门趋势
- Uber:实时匹配、位置跟踪
- Instagram:图像存储、动态生成
- WhatsApp:消息传递、在线状态
常见模式:
- 新闻 Feed:写扩散与读扩散
- 速率限制器:使用 Redis 的令牌桶
- URL 缩短器:Base62 编码、哈希冲突
- 聊天系统:WebSocket、消息队列
- 通知:推送通知服务、APNs/FCM
面试技巧
时间管理:
- 需求:10%
- 高层设计:25%
- 深入探讨:50%
- 总结:15%
沟通:
- 边思考边表达
- 提出澄清问题
- 讨论权衡
- 承认局限性
面试官关注的方面:
- 解决问题的方法
- 技术深度
- 权衡分析
- 对规模的认知
- 沟通能力
需要避免的常见错误
- 未明确需求就直接提出解决方案
- 对简单问题过度设计
- 低估规模需求
- 忽略单点故障
- 未考虑监控/告警
- 忘记数据一致性
- 忽略安全注意事项
项目背景
- 模板位于
system_design/00_template.md - 案例研究位于
system_design/*.md - 遵循既定的文档模式
评论
支持 Markdown