首先我们以user_id作为key,然后mod队列数hash到redis SortedSet队列里面 。为什么要这样呢,因为如果用户同时订阅了两张劵并且推送时间很近,这样的两条推送就可以合并成一条~,并且这样hash也相对均匀 。下面是部分代码的截图:

文章插图
然后要决定队列的数量,一般正常来说我们有多少台处理的服务器就定义多少条队列 。因为队列太少,会造成队列竞争,太多可能会导致记录得不到及时处理 。
然而最佳实践是队列数量应该是可动态配置化的,因为线上的集群机器数是会经常变的 。大促的时候我们会加机器是不是,并且业务量增长了,机器数也是会增加是不是~ 。所以我是借用了淘宝的diamond进行队列数的动态配置 。

文章插图
我们每次从队列里面取多少条记录也是可以动态配置的

文章插图
这样就可以随时根据实际的生产情况调整整个集群的吞吐量~ 。所以我们的定时任务集群还是具有一个特性就是支持动态调整~ 。
最后一个关键组件就是负载均衡了 。这个是非常重要的!因为这个做得不好就会可能导致多台机竞争同时处理一个队列,影响整个集群的效率!
在时间很紧的情况下我就用了一个简单实用的利用redis一个自增key 然后 mod 队列数量算法 。这样就很大程度上就保证不会有两台机器同时去竞争一条队列~ 。

文章插图
最后我们算一下整个集群的吞吐量
推荐阅读
- 苏州中心旁边的最高楼 苏州中心楼高多少米
- 大都摩天购物中心有什么品牌 成都最大的购物中心叫什么
- 淘宝直播中控台操作 怎么进入淘宝直播中控中心
- 教你如何选择适合自己的运动项目
- 学校机房交换机的配置
- 快来下载功能强大的“国家反诈中心”APP!
- 淘宝直播中控台互动面板在哪里 怎么进入淘宝直播中控中心
- 如何在抖音上发现赚钱的项目?
- SpringBoot 深度调优,让你的项目飞起来
- 微信聊天记录里的文件又失效了?试试这个文件同步开源项目吧
