设计社交系统时间线功能

2018-06-02  本文已影响11人  MontyOak

设计一个类似Twitter的时间线或者Facebook的feed功能。原文链接

1.描述使用场景和约束

使用场景:

约束和假设:

容量估算:
单条推文大小:

2.创建系统设计

系统设计图

3.设计关键组件

使用场景:用户发送推文
我们可以存储用户推文,以填充用户自己的推文列表。
分发用户推文有60k的TPS。所以应该选择一个支持快速写入的NOSQL或者cache。
照片,视频等文件的存储还是放在文件服务器或者三方的文件服务。

如果选用redis作为存储的话,可以给出下面示例:

           tweet n+2                   tweet n+1                   tweet n
| 8 bytes   8 bytes  1 byte | 8 bytes   8 bytes  1 byte | 8 bytes   8 bytes  1 byte |
| tweet_id  user_id  meta   | tweet_id  user_id  meta   | tweet_id  user_id  meta   |

使用场景:用户的推文列表

使用场景:用户搜索推文

4.完善设计

最终设计图

推文分发服务是一个可能存储的瓶颈,一般可以将其优化为推、拉两种模式(https://blog.csdn.net/hhq163/article/details/40823273)。
其他的优化点还包括冷热数据的分割,活跃用户数据转移到cache等等。

上一篇下一篇

猜你喜欢

热点阅读