zoukankan      html  css  js  c++  java
  • 定时任务框架技术选型

    1. 概要:

    单机

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

    分布式

    • Quartz:   Java事实上的定时任务标准。但Quartz关注点在于定时任务而非数据,并无一套根据数据处理而定制化的流程。虽然Quartz可以基于数据库实现作业的高可用,但缺少分布式并行调度的功能
    • TBSchedule:阿里早期开源的分布式任务调度系统。代码略陈旧,使用timer而非线程池执行任务调度。众所周知,timer在处理异常状况时是有缺陷的。而且TBSchedule作业类型较为单一,只能是获取/处理数据一种模式。还有就是文档缺失比较严重
    • elastic-job: 当当开发的弹性分布式任务调度系统,功能丰富强大,采用zookeeper实现分布式协调,实现任务高可用以及分片,目前是版本2.15,并且可以支持云开发,这个我写了系列教程了,在Java技术栈公从号可以搜索阅读。
    • Saturn:   是唯品会自主研发的分布式的定时任务的调度平台,基于当当的elastic-job 版本1开发,并且可以很好的部署到docker容器上。
    • xxl-job:  是大众点评员工徐雪里于2015年发布的分布式任务调度平台,是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。

     

    2. 分布式任务调度系统对比

                      

    elastic-job和xxl-job的区别与对比:

      elastic-job设计的初衷就是面对高并发复杂业务的,其核心功能在于分片和弹性扩容。在服务器数量多,业务量大的时候也能非常好的调度,压榨服务器的性能,使用zookeeper使他具有高可用和一致性的同时有很好的可扩展性。

      elastic-job本身没有中心的概念,通过zookeeper的选举机制选举出主服务器,任何一台服务器都可以作为主服务器,即使主服务器挂了也可以重新选举。因此elastic-job的优势在于它具有更好的可扩展性和可用性,但是这也使得他的使用和配置上比起xxl-job更复杂一些。

      xxl-job通过一个中心式集群"调度中心”来调度多个执行器执行任务的,调度中心集群可以通过增加机器来实现高可用(HA)实际会造成一定程度上的资源浪费,调度中心通过DB锁保证集群分布式调度的一致性,这样扩展执行器会增大DB的压力,但是如果实际上这里数据库只是负责任务的调度执行。在没有那么多数量的执行器和任务的情况下是完全没问题的。执行器可以支持分布式部署,这实际上就足以满足大多数场景了。关键是原理简单实现也非常简洁,用起来也很轻便,与springboot也非常好集成。而且他的监控界面直接集成到调度中心里面,可以在监控界面直接新增任务。

        Elastic-Job

          这个框架大概在2年前很火,当时使用的公司很多,想必很多人也听过了,但是很可惜现在已经不在维护了,代码已经有2年没有更新了,这里违反了更新频率的原则,如果出现问题可能都没什么人帮助你,所以并不是很推荐使用。

        更倾向于选择XXL-JOB:

      1.   轻量级,支持通过Web页面对任务进行动态CRUD操作,操作简单
      2.   只依赖数据库作为集群注册中心,接入开发简单,不需要ZK
      3.   高可用、解耦、高性能、监控报警、分片、重试、故障转移
      4.   团队持续开发,社区活跃
      5.   支持后台直接查看每个任务执行实时日志,ELASTIC-JOB中应该是没有这个功能

     总结

        共同点

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

        不同点

          X-Job 侧重的业务实现的简单和管理的方便,学习成本简单,失败策略和路由策略丰富。推荐使用在“用户基数相对少,服务器数量在一定范围内”的情景下使用。

          E-Job 关注的是数据,增加了弹性扩容和数据分片的思路,以便于更大限度的利用分布式服务器的资源。但是学习成本相对高些,推荐在“数据量庞大,且部署服务器数量较多”时使用。

          对于并发场景不是特别高的系统来说,xxl-job配置部署简单易用,不需要引入多余的组件,同时提供了可视化的控制台,使用起来非常友好,是一个比较好的选择。

          在业务量没那么大的时候, xxl-job是一个更好的选择。

          即: 非必须,则优先选择 xxl-job.

      备注: 本篇文章,旨在进行技术框架选型,与技术框架实现优缺点对比,具体的框架实现,请参考其他文章。

  • 相关阅读:
    Windows 服务程序(一)
    API---注册表编程
    API---文件操作
    main(argc, char *argv[])
    C 自删除技术---批处理方式
    分治法排序
    TDD尝试:nodejs单元测试
    尝试create tech team
    Yum重装走过的坑
    求生欲很强的数据库
  • 原文地址:https://www.cnblogs.com/chy2055/p/15481932.html
Copyright © 2011-2022 走看看