我们将Redis 2.8.17用作JobQueues。
我们正在使用RPUSH和BRPOPLPUSH来建立可靠的队列。
根据我们当前的设计,多个应用程序服务器将(RPUSH)作业推送到单个作业队列中。由于BRPOPLPUSH操作在Redis中是原子操作,因此稍后将弹出该作业(BRPOPLPUSH),并由服务器的任何使用者使用该作业。
由于应用服务器具有扩展能力,我担心REDIS将来可能成为瓶颈。
我从有关redis分区的文档中学到了以下内容:“无法使用单个大键(如非常大的排序集)对数据集进行分片”
我想知道是否为应用服务器预分队队列是否是扩展的唯一选择。
在上述设计中,集群可以做些什么?
您需要考虑的主要事情是是否需要分片。整个StackExchange网络(不仅仅是StackOverflow -所有网络)都由2台Redis服务器(我敢肯定其中之一是为冗余而存在)运行的,它非常积极地使用。看看http://nickcraver.com/blog/2013/11/22/what-it-takes-to-run-stack-overflow/
Redis的是荒谬快(和显着地节省空间的),只有一点需要注意:删除整个列表/组/有序集合/哈希是O(n)
,哪里n
是它包含的元素数量。只要你不这样做,(操作喜欢RPOP
,BRPOP
,BRPOPLPUSH
等不计-这些都是固定的时间),你应该是金色的。
TLDR:除非您打算做的比StackOverflow大,否则您无需进行分片,特别是对于简单的作业队列。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句