• XXL-JOB(1) 分布式任务系统选型和XXL-JOB介绍,这篇文章相当的经典呀


    转载自:”http://www.heartthinkdo.com/?p=2884

     

    本文概览:介绍了在选型分布式系统时,我们期待的功能有哪些。xxl-job的功能概览。

    1 问题背景

    目前定时任务,只是在某一个固定机器上配置cron脚本。想引入一个分布式调度平台,对于这个平台我们亟需的功能呢?

    1.1 期待的功能

    我们经过比较目前开源分布式任务调度框架,选择了xxl-job,这个框架满足了我们所期待一个分布式任务调度平台的功能,而且还有一些意外的功能。

    1、自动合理分配机器,避免在同一个时间点,任务都集中到同一个机器。  ✔️

    2、自动编排任务。  ✔️

    比如说task1….taskN,这个N个任务需要顺序执行,所以我们估算每个任务执行时长,去确定每个任务的执行时间点,但是某个任务因为处理数据变多或者其他因素时长变长,此时就会造成任务重叠。如果要解决这种重叠,又需要手动的配置各个任务执行时间点。

    3、缺失任务运营

    (1) 一共多少个任务  ✔️

    (2)一个时间点有多少任务运行(需要记录任务开始时间和结束时间) (✔️

    (3)当前正在运行哪些务  ✔️

    在出现线上问题时,迅速查看有哪些任务正在执行

    4、任务分片  ✔️

    考虑到个别任务文件量很大,执行慢。采用措施有:

    • 文件划分成多个子文件
    • 先解析文件入库,然后库数据进行划分(通过startIndex和endIndex来指定)。这里通过对数据库进行分片处理。因为 解析文件速度很快,而且文件还需要校验完整性,所以一般分批策略都是选择对数据库分片。

    1498968

    5、运行超时报警 (✔️

    运行超时会自动kill掉这个任务。

    6、任务执行进度查看  ✔️

    通过在线日志打印进度

    7、任务异常处理 (✔️

    • “故障转移”发生在调度阶段,在执行器集群部署时,如果某一台执行器发生故障,该策略支持自动进行Failover切换到一台正常的执行器机器并且完成调度请求流程。
    • “失败重试”发生在”调度 + 执行”两个阶段,支持通过自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;

    除了上面我们能够想到功能,在查看xxl-job时还有额外的功能:

    1、定时任务报错信息汇总 (✔️

    通过日期区间查询那些任务失败。可以查看当天有哪些失败的任务

    38720160

    2、在线查看日志  ✔️)

    可以用来打印执行进度。(打印总条数、打印已处理的个数来展示进度信息)

     

     

    38695902

    1.2 XXL-JOB功能概览

    如下是官网提供的所有功能:

     

     2 xxl-job介绍

    2.1 架构图

    分为两大模块:调度中心  和 执行器服务。

    43054936

    2.2 数据流程

    39218237

    1、调度平台选择哪一个执行器?在配置任务时,通过这个调度策略来指定。

    60304144

    2.3 数据表含义

    43527995

    1、xxl_job_group。保存执行器服务的名称。

    这个表信息需要手动新增的。字段说明:

    • order。任务管理页面中下拉框的顺序。

     

     

    对应如下信息

    56168288

    2、xxl_job_info。定时任务执行信息

     

     

    3、xxl_job_registry。保存执行器服务的注册的IP信息,便于调度中心选择一个机器执行。

     

    如下:一个服务registry_key只能有一个记录,多个IP都追加到regitry_values

     

    4、xxl_job_logglue。任务GLUE日志:用于保存GLUE更新历史,用于支持GLUE的版本回溯功能;

     

     

    3 XXL-job改造

    1、没有短信报警

    在JobFailMonitorHelper.failAlarm代码中进行扩展。

    Snip20190928_91

    2、没有任务依赖功能

    目前只提供了一种功能,一个任务执行完成之后,自动触发它的子任务。但是却没有提供如下功能:如果一个任务需要依赖多个父任务,只有所有父任务执行完成之后,才能执行这个任务。

    Snip20190928_92

    关于当前的依赖功能还有几点说明:

    • 如果一个任务T配置了子任务ST,这个子任务ST也配置了cron自动触发,那么这个ST会在T执行完成之后触发一次,在cron时间点到达时候再触发一次
    • 如果有多个任务T1,T2等都配置了子任务ST,则T1、T2等每个任务执行完成都会触发一次ST。

    3、固定路由

    指定执行器的IP机器,调度到指定的机器。最终实现如下:

    • 路由策略选择:固定机器
    • 任务参数新增:staticRoute=10.60.65.22:9999

    Snip20190928_96

    4、任务重复调度问题

    (1)数据库分为了主从两种方式,查询如下sql走了从库:

    SELECT *
    FROM xxl_job_info AS t
    WHERE t.trigger_status = 1
    and t.trigger_next_time< #{maxNextTime}

    67197380-3fa61500-f42f-11e9-9327-44774cb3f65a

    (2)问题解决

    上面的查询走写库。

    附:开源对比

    参考:https://blog.csdn.net/guyue35/article/details/84883408

    42230830

    总结,选型xxl-job。原因:从功能上xxl-job和elastic-job差不多,考虑到如下:

    • 使用xxl-job用户量大,有问题好解决。
    • 容易扩展自定义功能,即易于二次开发。比如固定路由功能、短信报警等。
    • elastic-search是基于jar的。xxl-job是微服务。这个就涉及到了中间件是服务还是jar的对比了,当我们需要对调度中间件进行升级时,如果是jar,那么所有的引用jar的服务都需要做一次升级,成本较高。基于服务的中间件,只需要升级中间件服务就可以了。

    • xxl-job除了mysql,无外部依赖,可靠性高于elastic-search(依赖zookeeper)。

     

    49645207

  • 相关阅读:
    RHEL虚机分区在线扩容操作指导说明
    Kafka vs AMQ技术比对
    数据库选型之MySQL vs ElasticSearch
    JAVA ElasticSearch 访问控制最佳解决方案
    EFS解密----未重装系统
    EFS加密解密----重装系统后
    EXCEL表格单元格中包含数字英文和汉字,如何自动去掉汉字,保留英文和数字
    excel如何用公式判断单元格的值是否为数字、英文、中文,以及相应的计数
    EXCEL计算数字、汉字、英文单元格的计数
    sql基本操作
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/14343204.html
Copyright © 2020-2023  润新知