[Whatsapp] Message Cache

我对这个Write Back的Cache的设计有些问题:

  1. 如果Message Service 发现用户不在,然后直接写Cache,后来Cache挂了,数据可能丢失。当然可以通过replication来增加Cache的冗余度,感觉还是数据可能丢失。

  2. 如果用户上线读数据,如果Cache有淘汰机制,可能用户可能值读到了部分数据,但是却认为读到了全部数据,这个问题怎么解决?是先读取cache,然后在读一下DB的message的数量做一下对比么?

  3. 我在想如果去掉Message Cache这个component,那么直接对DB进行读写操作,感觉一切可能会简单很多,不知道老师对这个问题怎么看?

1 个赞
  1. 这是个 tradeoff,数据当然有可能丢失,但是为了避免极小概率的丢失让 latency 大大增加就得不偿失了。这是 write-back cache 的固有问题,然而 write-back cache 还是很常见,这就说明很多情况下,是值得的。
  2. 我们总是即读 Cache 又读 DB 的。
  3. 这样延迟会变大,不符合题目的 non functional requirement
1 个赞

懂了,系统设计还是要讨论trade off,我们这个毕竟不是金融交易系统,所以可以牺牲一些consistency去换去速度。