refactor: rename files to Chinese and organize by category
Organized 50 interview questions into 12 categories: - 01-分布式系统 (9 files): 分布式事务, 分布式锁, 一致性哈希, CAP理论, etc. - 02-数据库 (2 files): MySQL索引优化, MyBatis核心原理 - 03-缓存 (5 files): Redis数据结构, 缓存问题, LRU算法, etc. - 04-消息队列 (1 file): RocketMQ/Kafka - 05-并发编程 (4 files): 线程池, 设计模式, 限流策略, etc. - 06-JVM (1 file): JVM和垃圾回收 - 07-系统设计 (8 files): 秒杀系统, 短链接, IM, Feed流, etc. - 08-算法与数据结构 (4 files): B+树, 红黑树, 跳表, 时间轮 - 09-网络与安全 (3 files): TCP/IP, 加密安全, 性能优化 - 10-中间件 (4 files): Spring Boot, Nacos, Dubbo, Nginx - 11-运维 (4 files): Kubernetes, CI/CD, Docker, 可观测性 - 12-面试技巧 (1 file): 面试技巧和职业规划 All files renamed to Chinese for better accessibility and organized into categorized folders for easier navigation. Generated with [Claude Code](https://claude.com/claude-code) via [Happy](https://happy.engineering) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Happy <yesreply@happy.engineering>
This commit is contained in:
166
questions/07-系统设计/系统设计方法论.md
Normal file
166
questions/07-系统设计/系统设计方法论.md
Normal file
@@ -0,0 +1,166 @@
|
||||
# 系统设计方法论
|
||||
|
||||
## 问题
|
||||
|
||||
1. 系统设计的核心原则是什么?
|
||||
2. 如何进行需求分析?
|
||||
3. 如何估算系统容量?
|
||||
4. 数据模型设计有哪些最佳实践?
|
||||
5. 如何设计高可用架构?
|
||||
|
||||
---
|
||||
|
||||
## 标准答案
|
||||
|
||||
### 1. 系统设计原则
|
||||
|
||||
**核心原则**:
|
||||
1. **简单性**(KISS:Keep It Simple, Stupid)
|
||||
2. **模块化**(高内聚、低耦合)
|
||||
3. **可扩展性**(水平扩展、垂直扩展)
|
||||
4. **高可用性**(冗余、故障隔离)
|
||||
5. **一致性**(CAP 理论权衡)
|
||||
|
||||
---
|
||||
|
||||
### 2. 需求分析
|
||||
|
||||
**功能需求**:
|
||||
- 系统做什么?
|
||||
- 用户角色有哪些?
|
||||
- 核心流程是什么?
|
||||
|
||||
**非功能需求**:
|
||||
- **性能**:QPS、响应时间
|
||||
- **可用性**:99.9%、99.99%、99.999%
|
||||
- **扩展性**:支持多少用户
|
||||
- **安全性**:认证、授权、加密
|
||||
- **一致性**:强一致、最终一致
|
||||
|
||||
---
|
||||
|
||||
### 3. 容量估算
|
||||
|
||||
**QPS 估算**:
|
||||
```
|
||||
日活用户(DAU):100 万
|
||||
平均每人每天请求:20 次
|
||||
总 QPS = 100 万 × 20 / 86400 ≈ 231 QPS
|
||||
峰值 QPS = 231 × 5 ≈ 1155 QPS(假设峰值是平均的 5 倍)
|
||||
```
|
||||
|
||||
**存储估算**:
|
||||
```
|
||||
用户数:100 万
|
||||
每人平均数据:1 KB
|
||||
总存储 = 100 万 × 1 KB ≈ 1 GB
|
||||
每年增长 = 1 GB × 12 = 12 GB
|
||||
```
|
||||
|
||||
**带宽估算**:
|
||||
```
|
||||
平均响应大小:10 KB
|
||||
QPS:1000
|
||||
带宽 = 1000 × 10 KB × 8 = 80 Mbps
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4. 数据模型设计
|
||||
|
||||
**原则**:
|
||||
1. **范式化**(减少冗余)
|
||||
2. **反范式化**(提高性能)
|
||||
3. **分区**(水平、垂直)
|
||||
4. **索引**(加速查询)
|
||||
|
||||
**示例**:
|
||||
```sql
|
||||
-- 范式化(3NF)
|
||||
CREATE TABLE users (
|
||||
id BIGINT PRIMARY KEY,
|
||||
name VARCHAR(50),
|
||||
email VARCHAR(100)
|
||||
);
|
||||
|
||||
CREATE TABLE orders (
|
||||
id BIGINT PRIMARY KEY,
|
||||
user_id BIGINT,
|
||||
amount DECIMAL(10,2),
|
||||
created_at DATETIME,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id)
|
||||
);
|
||||
|
||||
-- 反范式化(冗余用户名,避免 JOIN)
|
||||
CREATE TABLE orders_denormalized (
|
||||
id BIGINT PRIMARY KEY,
|
||||
user_id BIGINT,
|
||||
user_name VARCHAR(50), -- 冗余
|
||||
amount DECIMAL(10,2),
|
||||
created_at DATETIME
|
||||
);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 5. 高可用架构
|
||||
|
||||
**冗余设计**:
|
||||
```
|
||||
┌─────────────┐
|
||||
│ 负载均衡 │ (Nginx、HAProxy)
|
||||
└──────┬──────┘
|
||||
│
|
||||
┌─────────┼─────────┐
|
||||
│ │ │
|
||||
┌──▼──┐ ┌──▼──┐ ┌──▼──┐
|
||||
│App 1│ │App 2│ │App 3│
|
||||
└──┬──┘ └──┬──┘ └──┬──┘
|
||||
│ │ │
|
||||
└─────────┼─────────┘
|
||||
│
|
||||
┌──────▼──────┐
|
||||
│ 主从数据库 │
|
||||
│ Master │
|
||||
│ Slave │
|
||||
└─────────────┘
|
||||
```
|
||||
|
||||
**故障隔离**:
|
||||
- 熔断器(Circuit Breaker)
|
||||
- 限流(Rate Limiter)
|
||||
- 降级(Fallback)
|
||||
- 舱舱模式(Bulkhead)
|
||||
|
||||
---
|
||||
|
||||
### 6. 扩展性设计
|
||||
|
||||
**垂直扩展(Scale Up)**:
|
||||
- 升级硬件(CPU、内存、磁盘)
|
||||
- 简单、快速
|
||||
- 有上限(硬件限制)
|
||||
|
||||
**水平扩展(Scale Out)**:
|
||||
- 增加机器数量
|
||||
- 无限扩展
|
||||
- 需要架构支持(无状态、数据分片)
|
||||
|
||||
---
|
||||
|
||||
### 7. 阿里 P7 加分项
|
||||
|
||||
**架构思维**:
|
||||
- 能进行技术选型(权衡各种方案)
|
||||
- 能进行容量规划(预估资源需求)
|
||||
- 能进行成本控制(性价比优化)
|
||||
|
||||
**设计能力**:
|
||||
- 能设计高并发架构
|
||||
- 能设计高可用架构
|
||||
- 能设计可扩展架构
|
||||
|
||||
**沟通能力**:
|
||||
- 能清晰地表达设计方案
|
||||
- 能进行技术方案评审
|
||||
- 能推动方案落地
|
||||
Reference in New Issue
Block a user