阅读材料:
https://www.zhihu.com/question/20059632
https://www.zhihu.com/question/23602133
https://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/
http://blog.csdn.net/hguisu/article/details/7962350
系统设计是定义结构、组件、模块、接口和数据以满足特定需求的过程。
一个好的新系统:
- 模块内执行正确、效率高
- 模块间通信顺畅
- 不过于复杂,考虑全面
- 易于理解
系统设计可以分为五步:
- 场景
- 限定条件:用户量、请求量、高峰期、数据规模……
- 服务:完成功能
- 数据
- 未来改进
如何设计一个Netflix
场景:
- 枚举:播放电影、注册登录、电影推荐
- 排序:按重要程度
限定条件:
- 问必要数据:日活,电影总数等等
- 预测
-
- 同时在线用户数=日活/每天秒数*平均在线时长
- 峰值用户=同时在线用户*6(1~10)
- 3个月后峰值用户=峰值用户*2(问)
- 每个用户流量=3MB/user
- 峰值流量=每个用户流量*峰值用户数
- 每个用户占用内存=3KB
- 每天总内存=每个用户内存*日活
- 总存储=电影数*50G(多个版本)
服务:
- 重放case,每个case一个服务
- 合并服务
数据:
- 为每个请求在服务下挂接数据
- 选择数据类型
未来改进:
- 性能更快
- 功能更多
- 更细节
- 性能
- 扩展性
- 鲁棒性