[What'sApp] presence service要不要存userid对应connection

1 老师,我看视频,presence service db schma只有userid和last update time(hearbeat), 这个地方要不要加一个connection column,这样的话,websocket service就知道哪个instance是在和receiver userid 有websocket链接了,如果不加在这里,那这个信息应该加在哪里呢?

2 对于facebook messager,视频里说,用户上线后要先读queue再读db,这个地方是怎么读queue的啊,如果我想读我的未读信息,我不觉得queue可以支持这种基于userid的query, 老师这个地方能帮解释一下吗?

  1. 加上 websocket server id 就行,需要加的。这个视频里漏了,课件里有更正。你看的很仔细,学懂了。

1 但是根据这个图,Queue(Iris)确实是保存一周的数据,每次用户上线应该是先读Queue(Iris)吧?
2 facebook messenger这里的这个queue(Iris)是不是对应到whatsapp那个保证order的queue?还是说对应到whatsapp那个write back cache?

根据这个情况,我觉得这里的队列是每一个用户一个队列,看看老师怎么回答

WhatsApp 里面是所有人share一个队列

  1. 我之前看错了,我以为你还在讨论 Whatsapp。FB Messenger 是先从 Queue 里拿消息再从 DB 里拿的。
  2. 不一样的。Iris Queue 是一个特殊的存储,跟传统意义的 Message Queue 不一样的。它底层是 MySQL,所以可以 random access.

@logic 对于What’s App的 write back cache,我还有个疑问。

就是用户上线以后,根据自己的last_read timestamp 和 receiverId 去读取未读消息,对于一般现有的cache来说,没有办法实现上述功能,一般的cache就是kv store。

Redis Sorted Set 可以实现上述功能,但是我觉得需要自己实现writeback。有现有的cache支持上述功能吗?

Redis 可以的
https://docs.redis.com/latest/modules/redisgears/python/recipes/write-behind/

谢谢老师,这个很有用