[Instagram] 关于User Post table 和 Thumnail 的几个问题

  1. 用Cassandra的话,是不是还需要一个User Post table (partition key: user id) 用来支持用户看自己的post和hybrid方案下用来pull celebrity的post?

  2. 如果需要User Post Table,如何解决hotspot(某大V的post都在一个partition里),cache能解决吗?是否会在cache cluster里也造成hotspot?

  3. 是否还可以加入生成thumnail或不同size的photo的功能,而不是每次都load上传的原图?

  4. Async Worker 如何查询Post Table去生成Feed?是否应该另外有个table来支持Async Worker的查询?或者upload service直接将post id通过message queue发给Async worker?

  1. 我们在设计中提到了 post table,里面包含一个 is_celebrity_post field 用来区分 celebrity 以及普通人。这个 table 可以用来支持用户自己看自己的 post。
  2. Hash-based sharding 一般可以避免 hotshard 的出现,因为大V理论上会平均地分配到不同的机器上。尤其是 Consistent Hashing 的 Hash Ring。
  3. 面试中答题根据面试官的需求来。如果面试官有这个需求,那么上传照片的时候就要生成一系列的分辨率然后在不同界面上加载不同的分辨率。
  4. Async worker 不需要查询 Post Table。就像你说的,Async worker 会拿到 queue 里的 post id,然后做 fanout。

第二点 如何解决hotspot(某大V的post都在一个partition里)?

我觉得确实是一个valid concern. 比如justin biber发个post短时间所有人都冲上来看,肯定会造成数据热点的. 如果Cassandra某几个节点query特别多, 我理解是如果没有cache肯定也抗不住

Celebrity Post Table 肯定是需要 Cache 的。
Consistent Hashing 进行合理配置之后可以应对大多数热点的情况。如果没有 Cache,理论上靠堆机器可以,但是不如 Cache 来的经济实惠,效果好。

1 个赞