Performance 寻找可扩展的PubSub解决方案或替代方案

Performance 寻找可扩展的PubSub解决方案或替代方案,performance,xmpp,message,scalability,publish-subscribe,Performance,Xmpp,Message,Scalability,Publish Subscribe,我目前正在寻找我正在尝试构建的IM应用程序的最佳架构 该应用程序由几个频道组成,每个频道都有数千名订阅用户。每个用户一次只订阅一个频道,并且能够发布和读取该频道的内容。用户可以在频道之间快速移动 我最初考虑使用XMPP PubSub(通过Ejabbered或MongooseIM),但据我所知,它是事后添加的,可扩展性不强。 我还考虑过使用AMPQ之类的消息队列协议,但我不确定这是否是我在IM方面想要的 我对XMPP PubSub的担忧是否合理?如果是这样的话,你知道更好的解决方案吗?看一看和。两


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

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

我最初考虑使用XMPP PubSub(通过Ejabbered或MongooseIM),但据我所知,它是事后添加的,可扩展性不强。
我还考虑过使用AMPQ之类的消息队列协议,但我不确定这是否是我在IM方面想要的


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

看一看和。两者都是可伸缩的,性能也很好。

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

**

  • 用例
**

  • 许多新用户不断向系统注册并订阅一个 渠道
  • 许多现有用户将订阅从一个频道更改为
    其他频道
  • 许多现有用户一直在向频道发布消息
  • 许多现有用户一直以订户身份接收消息
  • XMPP自然适合第三和第四个用例。“ejabbered”是一个经过验证的高度可扩展平台

    在第二个用例中,您可能有这样的逻辑。 -a)更新数据库中用户的频道信息 -b)让他收听新频道 -c)将其出版主题改为其他频道……等等

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

    在第一个用例中,通过rest API提供注册。这样可以从任何设备进行注册。注册用户时,您可能有以下许多操作。 -1)在数据库中注册用户 -2)创建内部IM帐户 -3)发送电子邮件或短信确认……等等

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

    如果所有层/子系统都能很好地扩展,则系统可以很好地扩展。从这个角度来看,技术堆栈下面可能会帮助您更好地扩展

    restapi+KAFKA+EJABBERED(XMPP)