高级设计的信使像什么应用程序?

时间:2017-01-26 17:42:31

标签: java queue whatsapp high-level

我需要设计像类似应用程序或类似模块的任何信使类似的东西。

高级别流程

Client > Load Balancer > Web servers(assume 10 clustered server for now) > Rest based controller > Service > DAO > DB

挑战: -

说朋友1和朋友2在线。朋友1已建立到Web服务器1的HTTP Web连接,并且Friend 2已建立到Web服务器2的HTTP Web连接。 朋友1将消息发送给朋友2.

现在,只要消息到达Web服务器1,我就需要将消息传送到Web服务器2,以便可以通过已建立的Web连接将消息推送回朋友2

我在这里有几个相关问题:

  1. 我可以使用distributed queues将邮件从一台服务器传播到另一台服务器。一旦消息到达一个服务器,它就会将其推送到分布式队列(分发 因负载平衡和高可用性而排队的消息内容,fromUserId,toUserId。我的问题是如何通知正确的服务器(在这种情况下是Web服务器2)? 因为如果我使用JMS队列,将只通过监听器通知一个服务器。如果我使用主题,将通知所有服务器。在这种情况下,除了fromUserId所在的服务器之外,所有服务器都可以拒绝该消息。有没有更好的方法,队列只是根据一些元数据通知正确的服务器?
  2. 此外,如果destinationUserId处于脱机状态,我需要将消息放回队列。不确定如何实现?我相信我们需要使用其他一些队列实现(可能是基于java的内存队列) 而不是JMS队列/主题?服务器代码只有在从客户端获得确认后才会从自定义队列中删除该消息。

    1. 如果任何客户端在发送消息时处于离线状态,那么在他上线时,他将发送拉取请求。服务器将对分布式队列发出请求 ,分布式队列将从正确的物理队列中拉出消息。我的问题应该是分布式队列,将destinationUserId和消息保存为元数据中的值吗?

    2. 数据库与队列: - 使用这种方法,我认为不需要将消息存储在数据库中,这可能比队列(内存中队列)成本高(时间复杂度)高度实时的应用程序,如信使。我们只需要在db。

    3. 中存储用户/组详细信息

      更新: - 我在quora找到了相关链接,其中Kah Seng Tay的最后一点即What protocol is used in Whatsapp app ?...也确认了使用队列的simialr方法,但仍然是我上面的问题队列还没有回答。

0 个答案:

没有答案