1. 讨论用户是谁
电话、网络、p0 (mvp) 要求是什么
2. 根据用户讨论feature
功能性需求:eg用户应该能够发布新推文,用户应该能够关注其他用户
非功能需求:
一致性还是可用性?Consistency or Availability?
实时还是批量?Real-time or batch?
重读还是重写?Read heavy or write heavy?
3. 问一下系统需要handle 的traffic, 问问需不需要进行计算。 (面了8次系统设计,只有roblox要求计算。其他都不要。。。)
延迟估计Latency estimation
存储量
QPS
4. 根据feature讨论系统需要存储和serve哪些data, 这些data用什么存, 讨论sql/nosql/cache/object storage/hdfs取舍
Memory内存 vs Storage硬件
partition分区
build index建立索引
Avoid hotspot避开热点
Avoid consistently updating one record避免持续更新一条记录
nosql的考量:Main/Follower主/从,Async vs sync replication异步与同步复制,Shard key分片键,Index指数
cache缓存的考量:Cacheability. I.e. data repetition.可缓存性。 IE。数据重复,Memory requirement内存要求,Staleness effect陈旧效应
5. 根据数据,设计service。画图。
API
throttling节流, auth身份验证
6. work through一个use case, 把所有service连起来, 同时修改刚才画好的图。
eg做uber eats, 讨论用户要order 一个食物,到餐馆接到订单, 到司机接到订单。。。。
7. 讨论use case细节, 这时候面试官全程都会drive你的design的,不会丢你在那里自言自语。
eg比如 uber eats司机进入某个区域怎么识别啊, cache里怎么存啊。
8. 面试官会问, 某些环节挂掉了,怎么处理。
无非就是1. 要么replica, master slave, active-passive 或者
2.周期存snapshot 在磁盘上,然后存action log... 挂了可以重新恢复。。。
9. 一些环节怎么scale... multi instance, partition 这些呗。。 偶尔说说service mesh...
转自一亩三分地:https://www.1point3acres.com/bbs/thread-537998-1-1.html