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中的定时器是否被处理完成