任务调度平台

背景

以数据汇总项目为例,是以Linux cron table形式 执行python脚本,问题比较多。小组及部门也需要一个分布式的任务调度平台。基于开源XXL-JOB 二次开发。

内容

  1. 满足小组业务需要二次定制开发

 主要实现功能

在原框架分布式任务调度的基础上

  • 可以使用注解自动注册job
  • 实现执行器自动注册job

应用

hexin-job(调度中心,任务管理平台)

区间汇总项目

背景

  1. 由于区间指标的数据量较大;取数时可能会出现mongo查询数据量过大报错,计算时间太长导致取数超时等问题,从而影响性能。需要将这些区间指标数据进行汇总处理。
  2. **原项目文档** [http://172.20.0.52/wiki/index.php/DataQueryProxy数据源-Aggregate](http://172.20.0.52/wiki/index.php/DataQueryProxy%E6%95%B0%E6%8D%AE%E6%BA%90-Aggregate)

现状

  1. 当前业务的实现是以python结合数据库,在单服务器上做crontable计算数据汇总。
  2. 几条主的业务:
  • 更新/reload 月度汇总数据
  • 更新/reload 历史最值数据
  • 更新/reload 分时数据
  • 更新/reload 接口每日数据

问题

  • 性能瓶颈

    • python 代码不能合理发掘机器资源
  • 安全问题

    • 单机部署,故障后比较麻烦
  • 维护性差

    • 需要代码侵入,SQL更改
  • 扩展实现困难

    • 指标新的计算方式难以扩展

解决方案

  1. 将业务重构成Java版,以Java庞大的生态资源解决上述问题。
  2. 应用名:datacollect

设计流程

  • 应用框架结构

    • 基于现有应用服务还是新起?
    • 基于现有服务可以资源共用,节省成本

      • 新起服务耦合性低,维护起来更灵活
  • 业务实现的整体流程

    • 配置表的设计

      • 原表

        • index_name,start_date,end_date,func,filter,db_name,day_tbl_name,month_tbl_name,status,source_name,time_span
      • 改表

        • 指标名、时间?、function、汇总后存入的db_name、table_name、定时cron、区间、指标名+计算方式+汇总区间(作为job name)
        • 指标流程记录表
    • 与任务调度平台的结合

      • 读配置表,组合成job,注册调度中心
      • 任务调度job的维度

        • function的维度写handler(没必要,function 可以下沉到业务逻辑的方法中)
        • 按时间区间,基于原代码流程(比较保险,能发现隐藏的业务细节)
        • cron+table_name+区间区分注册job
    • 数据源的切换 mongo 到 接口

      • 需确认新数据源的情况
      • 调用及使用
    • job 具体的计算

      • 业务逻辑是否需要多线程
      • 如果多线程怎么实现
  • 日常运维

    • 配置表的增删改
  • 容错的ops工具

    • 指标错误数据支持重跑
    • 异常问题排查解决

      • 日志处理
      • 调度平台提供调度监控

job实现

  • 应用部署初始化的时候,读配置表注册job

    • 配置表:

      • 指标名、起止时间、计算方式、汇总区间、定时cron、汇总后存入的db_name、table_name、指标名+计算方式+汇总区间(作为job name)
    • 注册job

      • 指标名+计算方式+汇总区间(作为job name)
      • 汇总区间作为handle
  • JobHandle实现:指标指定的时间区间从指定的数据源取数据做汇总计算后更新到指定的库

    • 拿到指标名、计算方式、汇总区间。尝试逻辑中取值
    • 以上边为条件查出所有配置的所有数据 。SQL服务接口
    • 对时间分割
    • 按时间限制条件从新数据源取要汇总的数据 从datacore取数据量大问题
    • 对数据按配置func运算,对取出来的多条数据整合出一条数据
    • 将这条数据按时间限制更新到指定mongo库表
    • 取数计算的部分尝试使用时间区间+股票code做线程区分,多线程跑

数据配置

目前内网所用 mysql数据库

  • 10.0.32.58:3306/iwc_data_collect
  • username=qnateam
  • password=123456

测试所用 mongo数据库

  • 10.0.32.58:10002/backtest

基本流程

  • 可以在所做的平台配置指标汇总配置,可做基本的增删改查

  • 配置在mysql数据库上的指标会在应用启动时加载

  • 应用启动时将加载的配置作为job按配置的cron注册到调度中心

  • 调度中心会定时调度job执行指标数据汇总

  • 汇总会按照配置到mongo数据库,并有执行记录

  • 根据指标汇总执行记录中存的objectId

  • 根据objectId可以在数据汇总平台查到这条mongo数据
    另附:

  • 调度中心配置的job可以手动主动执行

  • 目前测试,自动注册到调度中心未开启自动执行cron。可开启

测试环境平台地址: