设计点赞系统
让我们设计一个类似点赞服务,用户可以对一些上传的视频,图片 或者文字进行评价。类似服务:Youtube.com,weibo.com,bilibili.com的点赞服务
1.系统的要求和目标
计划设计一个满足以下要求的简单版本的点赞系统:
功能要求:
- 用户应该可以对上的内容进行评价 喜欢 like 或者 不喜欢 dislike
- 用户应该可以取消之前的操作 取消喜欢,取消不喜欢。
- 我们的服务应能够记录内容的统计信息,例如喜欢/不喜欢的数据。
非功能需求:
- 该系统应高度可靠,上传的统计信息确保真实可靠。
- 该系统应具有很高的可用性。一致性可能会受到影响(为了可用性);如果用户没有马上看到其评价,也是可以接受的。
挑战:最受欢迎的热门内容, 恶意的重复操作。
3.容量估算和约束
假设我们有13亿总用户,其中8亿是日常活动用户(DAU)。如果用户平均每天评价15个内容,则
每秒的总数将为:
800M * 15/86400秒 => 138K URL/秒
考虑到观看和评价20:1的比率,每秒的观看内容将为:
20 * 138K URL/秒 => 2760K URL/秒
存储空间估算:不考虑内容大小,只考虑点赞需求。我们需要50个字节来存储带有每条推文的元数据(例如ID,时间戳,用户ID,喜欢的总数,不喜欢的总数等。假设每天每个活动用户用户有10个内容上传。上传的内容所需的总存储空间为:
800M DAU * 10 个内容 * 50 Byte => 400 GB /天