初探分布式定时任务 | 青训营笔记

88 阅读3分钟

这是我参与「第五届青训营 」笔记创作活动的第7天

前言

定时任务是一件很常见的需求。在没接触编程之前,我个人会有些每日计划的提醒等需求,现在移动端有不少日程管理的app可以满足。对于服务端,也有不同的实现方案,如window的批处理文件,linux的CronJob、Java的Timer和Golang的Tricker等。但是他们都有一个局限就是只能在单台机器上执行。面临大批量大规模的定时任务时,则需要我们的分布式定时任务。

什么是分布式定时任务

  • 单机定时任务比较分散,并且可靠性较差。分布式定时任务将其纳入统一的平台,实现集群调度管理和分布式部署。分布式定时任务具有自动化、平台化、分布式、伸缩式、高可用的特点。是对大量用户数据处理的良好解决方案。
  • 分布式定时任务按触发时间分类可分为定时任务、延时任务、周期任务。按照执行方式则可分为
  • 单机任务:随机触发一台机器进行执行
  • 广播任务:广播到多台机器执行同一个任务,如清理日志
  • Map任务:一个任务可以分为多个子任务,每个子任务负责一部分的计算
  • MapReduce任务:在Map任务的基础上,还可以对结果进行汇总计算

分布式定时任务的常见框架

  • 美团开源的Xxl-job轻量且免费,上手容易,开箱即用,在中小型企业公司使用比较广泛
  • SchedulerX是阿里巴巴自研的新一代分布式任务调度平台,提供定时调度,调度任务编排和分布式批量处理。需在阿里云付费使用。
  • TCT在腾讯内部使用,未开源也未商用
  • 此外还有当当网开源的Elastic-job和唯品会开源的Saturn等框架

分布式定时任务的实现原理

  • 分布式定时任务大体上可分为触发器、调度器、执行器、控制台。
  • 触发器分为定期扫描+延时消息和时间轮两种方案,需要解决秒级扫描的高性能问题
  • 调度器可以采用集群部署,做到无状态,依靠消息队列的重试机制保障任务一定会被调用
  • 基于我们的注册中心,可以实现执行器的弹性扩容

总结与思考

个人感觉分布式定时任务在业务上的使用场景还是比较多的。并且用分布式定时任务来引入分布式的概念我个人觉得比直接将概念更加容易理解。学到现在对分布式微服务的概念基本上都有所了解,但是还没有形成体系。继续学习啦~