1、分布式定时器介绍

定时器数据结构比较:http://novoland.github.io/%E5%B9%B6%E5%8F%91/2014/07/26/%E5%AE%9A%E6%97%B6%E5%99%A8%EF%BC%88Timer%EF%BC%89%E7%9A%84%E5%AE%9E%E7%8E%B0.html
时间轮算法论文:http://www.cs.columbia.edu/~nahum/w6998/papers/sosp87-timing-wheels.pdf

2、采用redis集群实现的分布式分级时间轮定时器架构图:


每个task是一个不断运行的进程

2.1、如何保证每个sortedset仅被消费task一次

一个sortedSet对应一个令牌,取得令牌的task才能去通过触发器去redis中查询sortedSet包含的定时器中是否有某些已经过期了,这里的令牌由调度器中专门的task产生,并且放在消息队列task queue中,消费且仅消费一次由消息队列提供保证。并保证task的数量总是多于当前需要处理的sortedset

2.2、当task受到单机故障影响的时候,如何保证这个进程sortSet可以被其他的task接手

追溯上个一个时间间隔的sortedSet中的定时器是否被处理完成

引用:http://novoland.github.io/%E5%B9%B6%E5%8F%91/2014/07/26/%E5%AE%9A%E6%97%B6%E5%99%A8%EF%BC%88Timer%EF%BC%89%E7%9A%84%E5%AE%9E%E7%8E%B0.html

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注