java分布式定时任务开发方案大总结

/ Java / 没有评论 / 1554浏览

java分布式定时任务开发方案大总结

本文的主要内容是将java的几个分布式定时任务框架做个对比总结。

框架列举

单机

  1. timer:是一个定时器类,通过该类可以为指定的定时任务进行配置。TimerTask类是一个定时任务类,该类实现了Runnable接口,缺点异常未检查会中止线程
  2. ScheduledExecutorService:相对延迟或者周期作为定时任务调度,缺点没有绝对的日期或者时间
  3. spring定时框架:配置简单功能较多,如果系统使用单机的话可以优先考虑spring定时器

分布

  1. Quartz:Java事实上的定时任务标准。但Quartz关注点在于定时任务而非数据,并无一套根据数据处理而定制化的流程。虽然Quartz可以基于数据库实现作业的高可用,但缺少分布式并行调度的功能
  2. Spring batch:轻量级的,完全面向Spring的批处理框架,可以应用于企业级大量的数据处理系统。Spring Batch以POJO和Spring框架为基础,使开发者更容易的访问和利用企业级.服务。Spring Batch可以提供大量的,可重复的数据处理功能,包括日志记录/跟踪,事务管理,作业处理统计工作重新启动、跳过,和资源管理等重要功能。
  3. TBSchedule:阿里早期开源的分布式任务调度系统。使用timer而非线程池执行任务调度。众所周知,timer在处理异常状况时是有缺陷的。而且TBSchedule作业类型较为单一,只能是获取/处理数据一种模式。文档缺失比较严重。
  4. elastic-job:当当开发的弹性分布式任务调度系统,功能丰富强大,采用zookeeper实现分布式协调,实现任务高可用以及分片,目前是版本2.15,并且可以支持云开发
  5. xxl-job: 是大众点评员工徐雪里于2015年发布的分布式任务调度平台,是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。

下面主要将xxl-job和elastic-job进行简单对比。

公司

支持集群部署

多节点部署时任务不能重复执行

日志

监控报警

弹性扩容缩容

支持并行调度

高可用策略

失败处理策略

对比总结

共同点

x-Job和e-job都有广泛的用户基础和完整的技术文档,都能满足定时任务的基本功能需求。

不同点

学习总结

考虑公司项目进度,优先选择了学习成本较低的x-job,对比总结是学习x-job的一个基石,有了宏观认识,才能更好地深入