这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
今天的课程中我们学习了分布式定时任务。分布式定时任务的核心架构可以分为除法器、调度器和执行器。而在触发器的实现层面,时间轮方法是一个重点。该方法不仅用于分布式定时任务的触发器,还在许多地方都有应用。因此我在这里对时间轮方法做一个简单的学习记录。
时间轮(TimeWheel)算法是一种实现言是功能的算法,通过时间轮算法,我们能把系统的大量任务调度绑定到轮上,使用时间轮进行任务的管理、触发和运行。
时间轮类似一个地址组成的环形链表,有一个指针指向其中节点,随着时间推移,指针不停向前移动。每个节点叫做bucket,挂载着未来要到期的定时任务。相邻两个bucket之间时间间隔一定,称为slot。
开始计时后,根据定时任务的启动时间不同,任务被挂载在不同的bucket上,在时间轮上按顺序分布。随着时间推移,指针遍历这些任务,按时触发任务。改进版的时间轮可以在每个bucket上挂载链表,多个定时任务只要时间取余旋转完整个时间轮所需时间相同,可以挂在一个bucket上节省空间。
多时间轮借鉴了水表的度量方法,像一个多级齿轮,旋转快的时间轮会带动慢的时间轮。每一个时间轮都有单独的指针进行转动,但次级时间轮旋转一周的时间是上一级时间轮的一个slot,这样次级时间轮旋转一周,上一级刚好完成一个bucket内的任务。多级时间轮可以用较小的空间完成更复杂的定时任务,极大地扩展了超时范围。因此多级时间轮算法能基本满足大部分业务场景的需求。