feed流系统

读扩散和写扩散

以一个微博发布场景来说
读扩散:内容发布者发布内容时,先存入自己的发件箱内,当粉丝来阅读时系统首先拿到粉丝关注的所有人,然后遍历所有发布者的发件箱,取出他们所发布的帖子,然后一句发布时间排序,展示给阅读者。
好处:底层存储简单,没有空间浪费。
坏处:每次读操作会非常重,操作非常多;而且分页不大方便。

写扩散:发布者发布一篇帖子时,遍历发布者的所有粉丝,给这些粉丝的收件箱也投放一份相同内容,这样阅读者来读feed流是,直接从自己的收件箱读取即可。
好处:通过数据冗余,提升了阅读者的用户体验。
坏处:对粉丝数特别大的情况不可行,特别是写扩散是异步操作,写得太慢会导致帖子发出去半天,很多粉丝依然看不见,体验也不大好。

读写混合

以微博为例

  • 当大V发帖时,提取他粉丝中比较活跃的那一批(这样可以筛掉大部分人),将大V的帖子写入他们的收件箱;对不活跃的那批人,采用读扩散的方式,一方面需要读取他的收件箱,另一方面需要遍历他所关注的大V用户的发件箱提取帖子,然后做下聚合展示。
  • 当一个粉丝量很小的人发帖时,采用写扩散方式,遍历其所有粉丝并写入粉丝收件箱。