[WhatsApp] consistency的讨论

  1. 上课老师说这个消息系统consistency 要求不高. 我理解是AP系统.只要做到Eventual consistency就行. 我在想如果只要Eventual consistency,是不是会有结果跳来跳去的情况, 这个在消息系统可以接受吗? 我使用微信什么的是没有遇到这种情况的

比如以cassandra quorum(w: 3 + r: 2 > n: 3)为例,

我极端情况下就会出现, 第一次读出来1, 第二次读出来0, 最后又是1的情况.

  1. 可不可以用wide-column比如cassandra代替上课讲得这个cache + DB的实现呢?
1 个赞
  1. 你说的情况就是经典的 Consistency 和 Availability tradeoff。确实有可能读取数据的时候读不到最新的数据。放到具体 Whatsapp 的情况下就是在刚上线的时候读取错过的消息时,读到了不是最新的数据,错过了一两个消息。这个读取只会发生一次,不会有往返跳的情况。在稍后,剩下的消息就会 Push 到客户端了。
  2. Cassandra 可以做数据库的方案,Cache 还是需要的。

在稍后,剩下的消息就会 Push 到客户端了。

为什么错过的消息会被push,被谁push?我的理解是错过的消息是保存在DB中,客户端只有再次上线时才会读到它们。

用户读取完成以后,message service 会回头删除 DB 消息,这时候可以检测一下有没有更多的消息,有的话可以进行推送。