【问题标题】:Looking For A Scalable PubSub Solution Or Alternative寻找可扩展的 PubSub 解决方案或替代方案
【发布时间】:2016-06-04 07:38:46
【问题描述】:


我目前正在为我正在尝试构建的 IM 应用程序寻找最佳架构。

该应用由频道组成,每个频道都有数千名订阅用户。每个用户一次只能订阅一个频道,并且能够从该频道发布和阅读。用户可以在频道之间快速移动。

我最初考虑使用 XMPP PubSub(通过 Ejabbered 或 MongooseIM),但据我了解,它是事后才添加的,而且可扩展性不强。
我也考虑过使用像 AMPQ 这样的消息队列协议,但我不确定这是否是我从 IM 方面寻找的内容。

我对 XMPP PubSub 的担忧是否合理?如果是这样,您知道更好的解决方案吗?

【问题讨论】:

    标签: performance xmpp message scalability publish-subscribe


    【解决方案1】:

    看看RedisKafka。两者都具有可扩展性和高性能。

    【讨论】:

      【解决方案2】:

      我根据您的输入设想了上述 IM 应用程序的主要用例。

      **

      • 用例

      **

      1. 许多新用户不断在系统中注册并订阅一个 的频道
      2. 许多现有用户将其订阅从一个频道更改为
        其他频道
      3. 许多现有用户不断向频道发布消息
      4. 许多现有用户继续以订阅者的身份接收消息

      XMPP 非常适合第 3 和第 4 用例。 “ejabbered”是经过验证的高度可扩展平台之一。

      万一第二个用例,你可能有这样的逻辑。 - a) 更新数据库中用户的频道信息 - b)让他收听新频道 - c) 将他的发布主题更改为其他频道...等等

      当您需要执行多个操作时,我强烈建议使用“KAFKA”以异步方式执行上述操作

      第一个用例的情况下,通过rest APIs提供注册。这样注册可以从任何设备完成。注册用户时,你可能有很多操作如下。 - 1) 在数据库中注册用户 - 2) 创建内部 IM 帐户 - 3) 发送电子邮件或短信确认...等等

      这里还执行第一个操作作为其余 API 服务逻辑的一部分。使用 KAFKA 以异步方式执行第 2 和第 3 操作。这意味着您的服务逻辑以同步方式执行第一个操作并向 KAFKA 引发事件。每个消费者将以异步方式处理第 2 次和第 3 次操作。

      如果所有层/子系统都可以很好地扩展,系统可以很好地扩展。从这个角度来看,Below tech stack 可能会帮助您更好地扩展。

      REST APIS + KAFKA + EJABBERED(XMPP)

      【讨论】:

        猜你喜欢
        • 2016-03-01
        • 1970-01-01
        • 2012-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多