一. 产品概述

我们的项目中总是存在着需要定时执行的任务,它们隐藏在程序内部,由各自归属的产品管理和驱动,执行时产生的日志往往零散的输出至所属项目的Log日志中,既不便于阅读,也不易分析和提取数据。

调度中心为各产品定时任务的调用提供了统一的管理平台,通过收集多样性的任务来源,透过丰富的任务调度对象字段,快速完成定时任务的分类、解析、定时调度以及持久化工作。此外,调度中心为运维人员提供了海量调度日志的搜索和统计分析能力。

调度中心产品的设计理念:

  1. 业务逻辑与调度程序分离。
  2. 定时任务从自驱动到托管模式的转变。

二. 基本概念

2.1 第三方应用

依赖调度中心客户端,希望辅助实现定时任务调度的第三方应用。

2.2 调度服务

第三方应用中需要定时执行的、待托管的方法,当第三方应用把方法注册至调度中心后,待托管的方法就会转化为调度服务。调度服务拥有”调用方式”、”触发方式”、

”触发规则”等属性。调度服务是静态的。

2.3 调度任务

调度任务是调度中心执行流程中的最小单位,调度中心根据触发规则启动(执行)调度服务后,调度服务就会转化成调度任务。针对同一项调度服务,存在多个调度任务。

调度任务是动态的。

2.4 代理调度对象

调度中心客户端,在产品启动后,自动扫描产品内待托管的服务,并发送至调度服务注册中心完成服务注册。

2.5 调度服务注册中心

接收从代理调度对象传来的注册请求,将待托管服务转换成调度任务(就绪态)并持久化至Mysql数据库的服务调度表。

2.6 监控引擎

定时扫描服务调度表,通过Quartz,将处于就绪态的调度任务转换成运行态,与服务调度表对比,更新”触发规则”等条件发生变化的任务。此外,监控引擎还用于接收

定时任务服务的执行日志。

2.7 调度引擎

对接Quartz调度器,当监测到有调度任务需要调用时,由调度引擎将调用请求发送至对应项目的服务上。

2.8 日志接入平台

将任务调度产生的日志整理并写入至Elasticsearch,提供基本的日志列表搜索、下钻查询功能,将来会陆续提供日志分析、自监控指标等查询功能,以及对定时任务的在线编辑功能,旨在实现对所有接入应用的全局控制和管理能力。

三. 执行流程

3.1 产品注册

第三方产品启动后,代理调度对象自动扫描项目内指定范围的代码,收集并整理需要托管的定时任务,并向调度服务注册中心发起服务注册请求。调度服务注册中心收到请求后,将最新的注册信息与服务调度表(存储在Mysql中)进行比对,存在则更新,不存在则新增。此外,调度中心会为新注册的产品在Elasticsearch创建独立的索引,专门用于存放该产品下定时任务的执行日志。

3.2 服务调用

监控引擎定时轮询服务调度表,将处于就绪态的任务组装成"触发器"和"调度程序"添加到Quartz的调度器中,此时任务的状态变成了运行态。当检测到某个任务的触发时间来临后,Quartz调度器会立刻通知调度引擎。调度引擎首先会为本次的调度任务生成一个流水号(orderId),接着参照任务的调度配置,根据"HOST+PORT+产品URL+服务路径"格式拼装成完整的请求路径,并携带着orderId向第三方应用发起远程服务调用请求(Rest API)。

3.3 服务监听

调度中心客户端除了包含代理调度对象外,还包含了服务监听模块。服务监听模块本质上是一个自定义的环绕切面,监听了被托管的定时任务,在目标方法执行之前和之后分别采集日志信息,最后以异步的方式回传给监控引擎。

3.4 日志接入

调度中心启动后会自动生成一张用于记录所有应用下调度服务的索引(总表),注册中心会为每一个新接入的第三方应用在Elasticsearch中创建其独有的索引(子表),用于存放当前应用下服务的执行日志。调度引擎在发起远程服务调度之前,将请求调度日志记录到索引中,监控引擎在接收到执行结果反馈后,会根据流水号(orderId)更新对应的日志记录。

四. 技术架构

自研产品 · 调度中心

五. 数据存储

自研产品 · 调度中心

六. 触发方式

手动调用与自动调用
自研产品 · 调度中心

相关文章:

  • 2022-03-05
  • 2021-07-21
  • 2021-10-25
  • 2021-05-10
  • 2021-04-28
  • 2022-12-23
  • 2021-06-02
  • 2021-05-29
猜你喜欢
  • 2021-09-04
  • 2021-03-25
  • 2021-10-10
  • 2021-11-05
  • 2021-05-28
  • 2021-07-26
相关资源
相似解决方案