为每个连接用户创建 redis 订阅是一种很好的扩展方法吗?

Is creating redis subscription for each connecting user a good approach to scale?

背景和问题

我们正在构建通知系统。

发布者用户可以向其他 online 订阅者用户发送消息

在线订阅用户将收到发送的消息。

发布者用户和订阅者用户在不同的实例上,无法直接联系对方。

订阅者在极少数情况下错过一些通知是可以的(提供了检索所有通知的其他方法)

解决方案

- 发布

发布者用户将消息发布到 RabbitMQ。

业务逻辑应用于 RabbitMQ 消费者中的消息。

RabbitMQ 消费者将消息发布到 Redis 事件 notification_[subscriber_id]

- 正在订阅

订阅者用户连接到 WebSocket 服务器。

WebSocket 服务器连接到 Redis 并在用户连接上订阅 Redis 事件 notification_[subscriber_id]

notification_[subscriber_id] 上收到消息后,将通过 WebSocket 向用户发送一条消息。

问题

发布者用户和订阅者用户都可以是任意数量(无限),根据我的研究,Redis 似乎对订阅数量没有限制(如果有的话大约是 40 亿),所以

这种在 Redis 中创建订阅的“动态”方式是否可扩展?

是的,
您可以在 Redis 集群模式下水平扩展,这将允许您在扩展过程中继续服务请求。

此外,
将您的应用程序设计为清理订阅也是明智的,因为您似乎正计划处理 millions/billions 的订阅,因此在实施之前做好计划很重要。