Facebook规模的设计信使/聊天服务器

时间:2017-10-27 05:16:00

标签: architecture chat facebook-messenger messenger system-design

我找到的文章概述了facebook messenger的架构,但我想深入了解。

Messenger Architecture

以下是我所知道的一些事情(如果我错了,请纠正我)

  • 当发件人发送消息时,我们需要存储在某些持久性数据存储中如果接收者当时在线,我们需要将这些消息发送给接收者。这应该无缝地发生,即Receiver不应该轮询新消息

以下是我想到的一些想法

创意1   - 在应用程序服务器内部,我们将为每个接收器维护一个通道,将与该接收器相关的所有新消息推入通道,从该通道读取并将其推送到客户端。

我们如何维持接收者读取每个发送者/接收者线程的消息(即会话)?

创意2   - 在应用程序内部服务器中,我们将为每个发送者 - 接收者组合保持一个通道(即对话)并从所有接收器通道读取并将其推送到客户端。

我们如何处理每个接收器的这么多频道?

以下是我提出的几个问题

应用程序服务器堆栈

  • 如果接收方在线,如何直接转发消息?
  • 如何维护同一接收器的多个客户端,即接收器是通过移动应用程序,Web浏览器登录的。如何将消息转发给所有客户?
  • 如何维护应用程序服务器中的连接,以便应用程序服务器推送消息(如果有),而不是客户端连续轮询服务器?
  • 我们如何将标记保持为每个对话的阅读功能?
  • 当接收器上线时如何推送接收器的所有未读消息?
  • 如何以有效的方式获取对话历史记录?
  • 如何扩展到数百万发件人/收件人?

持久数据存储

  • 适用于聊天类应用程序的最佳数据存储是什么?
  • 数据的存储格式是什么?
  

请评论原因,如果你想要downvote

0 个答案:

没有答案