为每个连接用户创建 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 的订阅,因此在实施之前做好计划很重要。
背景和问题
我们正在构建通知系统。
发布者用户可以向其他 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 的订阅,因此在实施之前做好计划很重要。