系统设计的关键点在于知识面广 + 考虑全面,这需要经验做支撑,但通过多学习案例、套路是可以弥补的
学习资料
System design interview for IT companies
除了拿来面试,也是学习架构的大宝藏。
经典案例
突击 or 有架构经验的话,我觉得只要认真研读经典设计问题即可:
问题 | |
---|---|
设计 Pastebin.com (或者 Bit.ly) | 解答 1 解答 2 |
设计 Twitter 时间线和搜索 (或者 Facebook feed 和搜索) | 解答 |
设计一个网页爬虫 | 解答 |
设计一个图片分享网站 Instantgram | 解答 |
设计 Mint.com | 解答 |
为一个交易平台设计限价订单(limited order book) | 解答 |
为一个社交网络设计数据结构 | 解答 |
为搜索引擎设计一个 key-value 储存 | 解答 |
通过分类特性设计 Amazon 的销售排名 | 解答 |
在 AWS 上设计一个百万用户级别的系统 | 解答 |
答题策略
九章总结的 4S 分析法:
- Scenario 场景:需要设计哪些功能,到什么程度?
- who will use
- how many will use
- usage pattern
- use case not covered
- estimated throughput
- estimated latency
- Service 服务:将大系统拆分为小服务
- api for read/write scenarios
- schema
- Storage 存储:数据如何存储与访问
- data size
- read/write ratio
- read/write traffic
- rdbms/nosql
- Scale 升级:解决缺陷,处理可能遇到的问题
- scaling the algorithm
- scaling the individual component
- memory cache
- DNS, CDN, reverse proxy, load balancer, ...
- async: message queue, back pressure, time & order, ...
- communiction: tcp, udp, rest, rpc, ...
技术点参考
展开的话范围相当的广,只能平时积累,逐个突破。
番外:
淘宝服务端高并发分布式架构演进之路 ⏤ 其实是互联网应用的典型架构,架构是互通的,了解后至少懂得大方向。