面试中遇到“设计一个点赞系统”这类开放题,应该按什么顺序回答?
先自己想一想,再看参考要点
参考要点
- 先明确需求:要支持的功能、规模和哪些数据不能出错,例如点赞不能重复计、点赞数允许延迟几秒
- 再估算高峰时的读写量和存储:日活 2000 万、每人每天点赞 5 次时,高峰小时写约 1700 次/秒、读约 3.3 万次/秒,点赞关系每年约 4 TB
- 然后定义接口和表,(user_id, video_id) 作主键让重复点赞插入失败
- 先给出单库事务的简单方案,再按估算找瓶颈逐个改进:热门视频的计数行锁改为 Redis 计数加合并写回,读多加缓存,数据量大按 user_id 分片
- 最后说明哪些数据准确、哪些最终一致,以及 Redis 宕机时怎么办
- 追问流量再涨 10 倍时,回到估算重新算每一层的量,看哪一层先超过上限