[Whatsapp] Message Service vs PubSub

还是有点不太理解Whatspp这个设计中MessageService的role是什么
老师说是为了可以和WebSocket Server分开scale,但是

  1. MessageService是Stateful还是Stateless的?听上去好像是Stateful的。那是不是需要一个consistent hashing之类的 来让一台MessageService server找到接收方所在的server? 而且如果是Stateful的,MessageService和WebSocket Server都是跟用户数量相关,为啥说是分开scale out呢
  2. MessageService server怎么找到WebSocket Server,是需要另外一个数据库(加cache),来保存哪个用户具体在哪台机器吗?如果是的话,这个数据库的key是user id,value是server IP + port?
    3)好像websocket自带pubsub功能, 比如https://azure.microsoft.com/en-us/services/web-pubsub/ 这种是不是内部就跟我们的MessageService比较像?

谢谢!

  1. Message Service 是 Stateful 的,需要存储 Queue 里的信息。Message Service 和 Websocket Server 确实都跟用户数量相关,但是这不是 Scaling 唯一的因素,同时两者也不是一台对一台的关系。 Message Service 之后如果加入了更复杂的逻辑,可能需要更多的机器,这时候只需要给 Messaging Service 加机器就可以了。
  2. 需要存储每台 Websocket Server 负责的区间,并且要查接收方是不是在线。比如用 socket.io 的话,我们存的是用户和 (Websocket Server IP, Socket ID) 的对应关系。根据 Socket ID 可以拿到 connection object.
  3. 你给出的服务我猜测是 Pub-sub through websocket,并不是说 Websocket 自带 pubsub 功能。