[Instagram] 关注一个普通用户后,如何获取他的Feed?

有两个问题,希望老师可以解答一下,谢谢!

  1. 当一个普通用户A发帖之后,async worker会将这个帖子写到所有关注普通用户A的用户的non-celebrity feed table中。想请问一下,在这种情况下如果有一个用户B去关注了普通用户A,那么用户B该通过什么样的方法来获取普通用户A所发出的帖子呢?A发出的帖子并没有被fan out到用户B中,因为在A发帖的时候B还没有关注A。

  2. 在课件设计图中的async worker是否可以理解成就是message queue中的consumers?

  1. 新关注用户的时候,用户往往会期待这个用户的照片能立刻在 Feed 里看到,所以刚开始的时候需要采取主动 Pull 的方式。同时可以考虑用一个 async job 来做 fanout, 等 fanout 完成之后就不用再 Pull 了。
  2. 这里的 Async worker 不是 message queue 的 consumer。相反,我们说的 message queue consumer 是 async job。Async worker 和普通 server 的区别是,它对 request 的处理不 block 用户 request。

谢谢老师解答。我觉得我对2还是有些不理解的地方,平常工作中没有用到过。想问一下照这么说的话Async worker其实也就是一台一台的server吗?不是很清楚Async worker到底是什么样的组件构成的。

另外可否问一下Post Table是通过什么机制将刚写入的Post传达给Async worker,然后让它进行fan out的呢?

可能问题问的有些基础,多多包涵

就是普通的 server。Post Table 可以直接发一个 API call 给 Async server 集群,其中有一台或多台 server 做 coordinator 接受 request,分发给其他的 async worker。

1 个赞

我的理解是async worker都是接在queue后面的,所以不一定要用queue?不应该decouple吗?

是需要用 Queue ,需要 decouple 的。我之前表述的不清楚,我说的 coordinator 就是一个 Message Queue Cluster.

1 个赞