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




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

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

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

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

看看 Redis 和 Kafka。两者都是可扩展和高性能的。

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

**

  • 用例

**

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

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

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

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

如果是第一个用例,请通过 rest APIs.So 提供注册,以便可以从任何设备完成注册。在注册用户时,您可能会有很多操作,如下所示。 - 1) 在数据库中注册用户 - 2)创建内部IM帐户 - 3)发送电子邮件或短信进行确认...等等

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

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

REST API + KAFKA + EJABBERED(XMPP)

相关内容

最新更新