我正在寻找我正在尝试构建的IM应用程序的最佳架构。
该应用程序由每个拥有数千个订阅用户的频道组成。每个用户一次只能订阅一个频道,并且能够从该频道发布和阅读。用户可以在频道之间快速移动。
我最初考虑使用XMPP PubSub(通过Ejabbered或MongooseIM),但据我所知,它是作为事后补充添加的,并且不是很可扩展。
我还考虑使用像AMPQ这样的消息队列协议,但我不确定这是否是我在IM方面所寻求的。
我对XMPP PubSub的关注是否合理?如果是这样,你知道更好的解决方案吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
根据您的输入,我想到了以上IM应用程序的主要用例。
**
**
XMPP非常适合第3和第4个用例。 “ejabbered”是经过验证的高度可扩展的平台之一。
如果第二个用例,你可能会有一些像这样的逻辑。 - a)更新DB中用户的频道信息 - b)让他听新频道 - c)将他的出版主题改为其他频道......等等
当您需要执行多项操作时,我强烈建议您使用“KAFKA”以异步方式执行上述操作
如果是第一个用例,请通过其他API提供注册。因此,注册可以从任何设备完成。注册用户时,您可能有如下许多操作。 - 1)在DB中注册用户 - 2)创建内部IM帐户 - 3)发送电子邮件或短信进行确认......等等
这里还执行第一个操作作为其余API服务逻辑的一部分。使用KAFKA以异步方式执行第二和第三操作。这意味着您的服务逻辑以同步方式执行第一个操作并向KAFKA发送事件。每个消费者都会以异步方式处理第二和第三次操作。
如果所有层/子系统都可以很好地扩展,系统可以很好地扩展。从这个角度来看,低于技术堆栈可以帮助您很好地扩展。
REST APIS + KAFKA + EJABBERED(XMPP)