bsidb
2018-01-19 09:45:13 +08:00
微博的技术大拿在网上有技术分享 PPT,应该还能搜到。
我印象中,当时的 PPT 是这样说的(约至少 2 年前),如果说的有问题,还请拍砖:
1. 微博信息数据(即微博的具体内容等)是存储在关系型数据库中的。使用标准的分库分表技术就能水平扩展。
2. 微博的关系数据(即 Follow 关系)和 Feed 流数据,我记得没有细说。但是每个用户是会维护自己的 Feed 流,这个 Feed 流应该只保存了微博 ID 编号,不保存具体微博内容。等用户浏览自己的 Feed 流的时候,再从关系数据库中取出微博内容,并将网页返回给用户。
3. 微博的通知数据(你有 XX 新粉丝,有 XX 新回复,有 XX 新点赞等信息),因为体积不大而且经常变动,是保存在 Redis 中。
当一个用户发了一条新微博之后,后续的更新动作一般是推拉结合:
1. 对于普通用户(粉丝数小于某个值)的微博更新,用“推”的方式比较划算。当一个用户更新微博后,把新微博的 ID 信息写入他的粉丝的 Feed 流存储之中。
2. 对于大 V 用户(粉丝数大于某个值)的微博更新,用“拉”的方式比较划算。当大 V 更新微博后,并不会将新微博 ID 推送到粉丝的 Feed 流。而是在粉丝查看自己的 Feed 流的时候,现场去查询其关注的大 V 的最新动态,并加入 Feed 流。这种“拉”的好处是减少了大 V 更新微博时的一系列数据库操作代价,而且大 V 微博的时效性很强,能很好地进行热缓存。