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

时间:2016-02-22 18:26:42

标签: performance xmpp message scalability publish-subscribe


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

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

我最初考虑使用XMPP PubSub(通过Ejabbered或MongooseIM),但据我所知,它是作为事后补充添加的,并且不是很可扩展。
我还考虑使用像AMPQ这样的消息队列协议,但我不确定这是否是我在IM方面所寻求的。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

根据您的输入,我想到了以上IM应用程序的主要用例。

**

  • Usecases

**

  1. 许多新用户继续注册系统并订阅一个 通道
  2. 许多现有用户将订阅从一个频道更改为
    其他频道
  3. 许多现有用户继续向频道发布消息
  4. 许多现有用户继续作为订阅者接收消息
  5. XMPP非常适合第3和第4个用例。 “ejabbered”是经过验证的高度可扩展的平台之一。

    如果第二个用例,你可能会有一些像这样的逻辑。   - a)更新DB中用户的频道信息   - b)让他听新频道   - c)将他的出版主题改为其他频道......等等

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

    如果是第一个用例,请通过其他API提供注册。因此,注册可以从任何设备完成。注册用户时,您可能有如下许多操作。   - 1)在DB中注册用户   - 2)创建内部IM帐户   - 3)发送电子邮件或短信进行确认......等等

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

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

    REST APIS + KAFKA + EJABBERED(XMPP)