Whatsapp 设计中的cache和db是否必要?

老师你好!在whatsapp的设计中,接受者不在线的时候您说可以存到cache+db中。

  1. 但是为什么不直接放在message queue中呢?measage queue不是有consumer group counter么?是为了保证用户长期不上线最后也能收到message吗?
  2. 如果是放到db里,cache在这个case下真的有用吗?因为设计需求是1对1聊天,所以一条message只需要投递给一个人。这样cache miss的几率应该非常大吧。而且cache server可能会带来新的privacy的问题?以及对于一个刚上线的人来说,cache提高接受消息的速度意义不大吧?几百毫秒和几秒钟都是以前的事了
  1. 这个问题提的很有代表性。答案是不行。Message queue 的每一个 Partition 是按照顺序去处理消息的。如果碰到长期不上线的,这个消息还是需要被处理的,能做的只是把消息拿出来再放回去,而且会发生很多次。很浪费,并不合理。
  2. 对于下线一段时间上线的可能意义不大,但是在不稳定网络环境下的人就比较有意义了。当然可以跟面试官讨论。Cache server 会带来 privacy 上额外的处理,但是也不复杂,就是发送完了删除即可。