Systematic Approach for System Design
Requirements and Goals of the System
You should always clarify requirements at the beginning of the interview. Be sure to ask questions to find the exact scope of the system that the interviewer has in mind.
Functional Requirements
Non-Functional Requirements
Extended Requirements
Capacity Estimation and Constraints
Traffic estimates
Bandwidth estimates
Memory estimates
High level estimates
System APIs
Once we've finalized the requirements, it's always a good idea to define the system APIs. This should explicitly state what is expected from the system.
Parameters
Returns
Database Design
Defining the DB schema in the early stages of the interview would help to understand the data flow among various components and later would guide towards the data partitioning.
Database Schema
What kind of database should we use?
Basic System Design and Algorithm
Data Partitioning and Replication
Cache
Load Balancer (LB)
Purging or DB cleanup
Telemetry
Security and Permissions
系统设计基本方法 SNAKE 原则 by Qingyuan Feng
系统设计有四大要素
第一,是要满足一个需求即Requirements;
第二,对内容进行一个定义;
第三,从不同维度去考虑宏观的架构层、组件层、模块层;
第四,也要考虑到互相间交流的接口和相关传递的数据。所以这些内容一起构成了整个系统设计。
系统设计的基本方法 — SNAKE原则(Scenario, Necessary, Application, Kilobit, Evolve)
Scenario(场景):用例Use Case/接口Interface
Necessity(限制):查看需求Requirement/假设Assumption
Application(应用):服务Service/算法Algorithm
Kilobit(数据)Data
Evolution(进化)
系统设计九阴真经: 4S 分析法
Scenario 场景
需要设计哪些功能,设计得多牛(需要承受多大的访问量 DAU / MAU)
Ask / Features / QPS / DAU / Interfaces
Ask
Step 1: Enumerate 罗列功能
Step 2: Sort / Rank 选出核心功能
Analysis & Predict
并发用户 Concurrent User
日活跃 * 每个用户平均请求次数 / 一天多少秒 (e.g. 150M * 60 / 86400 ~ 100k QPS)
峰值 Peak = Average Concurrent User * 3 (normally 2~ 9 times of average) (~300k QPS)
快速增长的产品 Fast Growing 预测
MAX peak users in 3 months = Peak users * 2
读频率 Read QPS (Queries Per Second)
300k
写频率 Write QPS
5k
给人用的产品一般读多写少,给机器用的一般读少写多
R PS < DB PS < IO PS
QPS = 100
用自己的笔记本
QPS = 1k
服务器
QPS = 1M
1000台服务器集群
QPS和 Web Server (服务器) / Database (数据库) 之间的关系
一台 Web Server 约承受量是 1k 的 QPS (考虑到逻辑处理时间以及数据库查询的瓶颈)
一台 SQL Database 约承受量是 <1k 的 QPS(如果 JOIN 和 INDEX query比较多的话,这个值会更小)
一台 NoSQL Database (Cassandra) 约承受量是 10k 的 QPS
一台 NoSQL Database (Memcached) 约承受量是 1M 的 QPS
Service 服务
将大系统拆分为小服务
Split / Application / Module
步骤
Step 1: Replay
重新过一遍每个需求,为每个需求添加一个服务
Step 2: Merge
归并相同的服务
什么是 服务Service?
可以认为是逻辑处理的整合
对于同一类问题的逻辑处理归并在一个Service中
把整个System细分为若干个小的Service
Storage 存储*
数据如何存储与访问
Schema / Data /SQL / NoSQL / File System
步骤
Step 1:Select
•为每个Application / Service选择合适的存储结构
Step 2:Schema
•细化数据表结构
类型
数据库系统Database
关系型数据库SQL Database
用户信息User Table
非关系型数据库NoSQL Database
推文Tweets
社交图谱Social Graph (followers)
文件系统File System
图片、视频Media Files
缓存系统Cache
不支持数据持久化Non-persistent
效率高,内存级访问速度
Scale 升级
解决缺陷,处理可能遇到的问题
Sharding / Optimize / Special Case
Step 1: Optimize
解决涉及缺陷 Solve Problems
Pull vs Push
更多功能设计 More Features
Like, Follow& Unfollow, Ads
一些特殊情形
Step 2:Maintenance
鲁棒性Robust
如果有一台服务器/数据库挂了怎么办
扩展性Scalability
如果有流量暴增,如何扩展
什么时候用Push
资源少
少写代码
实时性要求不高
用户发帖比较少
双向好友关系,灭有明星大v问题(比如朋友圈)
什么时候用Pull
资源充足
实时性要求高
From Hired in Tech System Design Course
Step 1: Constraints and Use Cases
Figuring out scope, use cases, gather requirements about the system.
Estimates, constraints of the system.
Step 2: Abstract Design
Outlining a high-level abstract design:
Simple diagram, main components, connections between them.
Step 3: Understanding Bottlenecks
Step 4: Scaling Your Abstract Design
Last updated