我们正在为我们的电子商务市场应用从单一体系结构转向微服务体系结构.我们选择Redis pub/sub作为微服务的微服务,也是为了一些推送通知的目的。推送通知策略如下所示:
无论何时创建订单(即,e客户创建订单),后端在各自的通道(队列)中发布事件,而特定的推送通知-微服务使用此事件(json消息)并向卖方移动发送推送通知。
目前,我们使用的是安装在我们的ubuntu机器上的redis服务器,没有任何麻烦。但令人头痛的是,将来会有数以百万计的秩序在某一时刻产生,我们又如何处理这种情况呢?这意味着,我们需要扩大Redis队列,对吗?
我的明确问题(不管上面的情况如何)是:
如何能够水平缩放Redis队列而不增加同一台机器中的RAM ?
发布于 2020-08-04 07:06:42
无论何时创建订单(即,e客户创建订单),后端在各自的通道(队列)中发布事件,而特定的推送通知-微服务使用此事件(json消息)并向卖方移动发送推送通知。
IIUC你是通过Redis发布/订阅发送消息的,这不是持久的,这意味着如果唯一的生产者处于上升状态,而其他服务/消费者处于下降状态,那么消费者就会错过信息。任何被关闭的服务都将丢失在所述服务被关闭时发送的所有消息。
现在让我们假设,您正在使用Redis LIST和其他数据结构组合来解决缺少的事件问题。
缩放Redis队列有点棘手,因为整个数据存储在一个列表中,该列表驻留在单个Redis计算机/主机上。您可以做的是创建您自己的分区方案,并按照分区方案设计您的Redis键,就像Redis内部在集群中添加一个新的主服务器时所做的那样,创建一致的散列需要付出一定的努力。
非常简单,您可以基于userId分发负载,例如,如果userId在0到1000之间,然后使用queue_0、1000-2000 queue_1等等。这是一个手动过程,您可以使用某些脚本实现自动化。每当向集合中添加新队列时,必须通知所有使用者,并且还将更新发布服务器。
基于数字的划分是一个范围分区方案,您也可以使用哈希分区方案,您可以使用范围或哈希分区方案,每当一个新队列被添加到队列集中时,必须通知使用者进行潜在的更新。消费者可以为新队列生成一个新的工作人员,删除队列可能是很棘手的,因为所有的使用者都必须耗尽他们各自的队列。
您可以考虑使用Rqueue
https://stackoverflow.com/questions/63240559
复制相似问题