APP下载

基于XXL-JOB的可视化分布式定时调度平台的设计与实现

2023-07-10陆颖

电脑知识与技术 2023年14期
关键词:微服务分布式可视化

陆颖

关键词:定时任务;微服务;分布式;XXL-JOB;可视化

中图分类号:TP319 文献标识码:A

文章编号:1009-3044(2023)14-0039-03

0 引言

定时任务是指按照特定时间周期运行的任务。使用场景为在某个固定时间运行或者周期性地去执行某个任务,比如:每天24点做数据汇总,定时发送短信等。定时任务分为单机定时任务和分布式调度任务。Timer、SpringTask、ScheduledExcetorService 等均属于单机定时任务,单机定时任务操作简单,容易实现,但存在与业务逻辑紧耦合、不支持分片任务、任务失败无报警机制,集群化部署难以保证任务的幂等性等缺陷[1]。分布式定时任务具备支持动态配置定时规则,集群化部署可以保证job幂等性等优势。XXLJOB作为一种分布式定时框架,具备可視化管理,配置灵活,可拓展性高等特性。

1 定时任务框架性能对比

1.1 XXL-JOB简介

XXL-JOB将调度行为抽象成一个不承担业务逻辑的调度中心公共平台,平台负责集中管理调度信息,依据调度配置进行调度请求,支持界面化动态配置任务报警、任务新建、任务修改、任务删除等管理信息,配置完成即刻生效。XXL-JOB通过执行器统一管理拆分的多个JobHandler[2],依据接收到的调度请求,处理相应JobHandler中的业务模块。这种将调度中心和执行器分离的分布式定时框架实现了业务逻辑的解耦,提高了项目运行的稳定性,程序代码的可重用性以及系统的可扩展性。

1.2 Elastic-JOB简介

Elastic-JOB[3]是当当网推出的分布式任务调度框架,由Elastic-Job-Lite 和Elastic-Job-Cloud 两个相对独立的子项目组成。主要的设计理念是无中心化的分布式定时调度框架。它采用Zookeeper实现分布式协调,任务高可用以及分片,具备弹性扩容缩容,定制化流程型任务等功能。

1.3 Quartz简介

Quartz是由OpenSymphony组织开发出来的开源且具有丰富特性的任务调度库,主要由Job Detail、Job、Scheduler、Trigger四个核心类构成[4]。Quartz能创建亦简单亦复杂的调度,具备强大的调度功能与灵活的应用方式,但存在时间规则更改无法实时生效,没有可视化管理界面等缺陷。

上述三种分布式定时任务框架的性能对比如表1 所示。

2 XXL-JOB 工作原理

2.1 执行器注册

任务执行器根据配置的调度中心的地址,启动注册线程向调度中心的执行器管理发起自动注册。也可以人工手动录入执行器的地址信息,多地址逗号分隔,供调度中心发起注册。

2.2 任务下发

执行器管理中保存着注册执行器,后续会根据这个注册信息给执行器下发任务。如果此时有需要执行的任务,任务管理模块会根据执行器管理中注册的执行器信息,向任务执行器下发任务。任务执行器中的任务执行服务接受到任务以后会将任务发送到待执行任务的队列中,队列中的任务会由执行线程Job?Handler依次获取并且执行。这里会维护一个任务执行的线程池,池中就是一个个JobHandler线程,它们是执行任务的主力军。

2.3 执行结果异步上报

JobHandler执行器基于线程池执行任务,并把执行结果放入执行结果队列中,同时会把执行日志写入任务日志文件中,以供日志查询。然后通知回调线程,告知任务执行完毕,回调线程会通知调度中心的监控运维模块,任务执行完毕。

2.4 日志查询请求

用户可以在调度中心查看任务日志,其过程是通过发送日志查询请求给任务执行器中的日志服务,然后查询任务日志文件实现。在任务日志界面中,可查看该任务的历史调度信息、执行参数和执行信息,进入日志控制台可查看实时执行日志[5]。

XXL-JOB具体任务执行流程如图1所示。

3 平台设计与实现

3.1 项目功能概述

智慧文旅融合大数据平台项目集成省级以下各景点游玩信息,包含当地天气状况、景区视频监控、道路拥挤情况、门票售卖统计、景区点评好坏等信息,涵盖了游前、游中、游后各项服务要素。平台主要包含以下功能点。

1)用户信息管理:市级管理员查看该城市下所有景点的相关信息,省级管理员查看该省下所有的景点数据。

2)监控管理:平台接入管辖内所有景点的视频摄像,切换景区后,可以看到该景区下所有摄像头拍摄到的实时画面,利于负责人实时查看景区状况。

3)数据统计管理:平台统计分析天气、道路、售票、点评等各项数据状况,通过图表的方式进行统计展示。

4)信息管理:遇到道路拥挤、天气恶劣等异常情况会进行预警提醒。

3.2 软件架构设计

平台采用B/S架构,使用SpringBoot+Vue 前后端分离技术实现[6]。后端采用基于MVVM模型的Spring?Boot框架[7]集成XXL-JOB的方式定时收集目标数据,经过逻辑处理后的数据通过MyBatis-PLUS数据持久层框架进行保存。为了减少与MySQL关系型数据库的交互,系统采用对待保存数据进行分段处理后再批量保存的方式存储数据,一定程度上大大提高了执行效率。前端使用Vue+Element-UI[8]的方式开发管理界面,Echarts[9]组件进行数据的图表化展示。

3.3 开发环境

开发平台借助Win10 平台,采用Visual StudioCode、IDEA、Navicat等开发工具。编程语言包括Java、JavaScript、Vue、Element-UI、CSS等,Java开发环境使用JDK8。通过Git对项目源代码进行统一管理,其中包括代码分支的管理与项目版本迭代的控制等。

3.4 定时应用

在智慧文旅大数据平台项目中,XXL-JOB主要应用于天气状况、道路拥堵、第三方评价三大模块的数据同步统计中,具体概述如下。

1)天气数据方面:天气数据包括实时温度、体感温度、风力风向、相对湿度、大气压强、降水量、能见度、露点温度、云量等。通过和风天气Api统计中国3000+市县区当日以及未来7天的天气数据。

2)道路数据方面:通过百度地图Api统计所有景区附近道路的拥堵评价、拥堵距离、拥堵趋势等信息。

3)第三方平台数据方面:定时拉取美团、大众点评、携程、飞猪等第三方平台的售票与点评状况,对数据进行统计分析。

平台对三大模块中定时抽取获得的原始数据进行清洗,删除不必要的脏数据,修补并完善异常数据,然后按照预先设计的规则进行数据处理,处理完成的数据最终存储至数据库表对应的字段中。同时,平台通过可视化界面配置任务报警机制来保证异常任务的及时处理,比如:当定时任务执行失败时,会给配置的邮箱发送信息,提醒负责人进行排查处理。

3.5 分片广播策略

XXL-JOB 具有轮询、随机、故障转移、一致性HASH、分片广播等多种路由策略。在选择“分片广播”路由策略的场景下,执行一次任务调度可以广播实现集群环境中全部的执行器完成一次任务操作,实现服务资源最大限度调用,根据系统自动传播的分片参数完成业务处理。

鉴于所需统计的数据量较大,平台采用分片广播的路由策略将执行压力均衡分散到所有服务器节点。在分片定时任务逻辑里,根据获取到的分片序号、分片总数、执行任务节点数量,决策当前节点是否需要执行。具体判断公式如式(1)所示:

其中id表示数据id,n表示总分片数,i表示当前分片数。通过数据id的值对总分片数进行求余,求余后的数正好等于系统的当前分片数的方式来巧妙地实现天气、道路、第三方数据的统计,实现灵活调度[1, N] 个节点并行执行任务。其中分片处理的核心伪代码如下:

3.6 部署方式

文旅项目采用Docker[10]集群部署的方式,部署一个调度中心,在减少数据库压力与保证运行效率的情况下部署尽可能多的執行器。这种容器化的部署具备跨平台、成本低、集成便捷等优势。

4 结束语

笔者剖析了三种分布式任务系统的优缺点,详细描述了XXL-JOB的工作原理,并概述了XXL-JOB在文旅大平台项目中的设计与应用。XXL-JOB分布式定时任务框架具备开发迅速、学习简单、可视化管理界面使用便捷等优点,在保证稳定运行的情况下,大大减少了开发人员的时间和精力。但是,在调度中心和执行器集群数量不断增加的场景下,数据库锁竞争压力大。因此,如何减轻DB锁压力将是下一步的研究方向。

猜你喜欢

微服务分布式可视化
基于CiteSpace的足三里穴研究可视化分析
基于Power BI的油田注水运行动态分析与可视化展示
基于CGAL和OpenGL的海底地形三维可视化
“融评”:党媒评论的可视化创新
微信公众平台在医院图书馆的应用现状调查
从单一模式系统架构往微服务架构迁移转化技术研究
基于DDS的分布式三维协同仿真研究
西门子 分布式I/O Simatic ET 200AL