微服务任务调度平台(SIA-TASK)

2020 年 2 月 10 日

微服务任务调度平台(SIA-TASK)

背景

无论是互联网应用或者企业级应用,都充斥着大量的批处理任务。常常需要一些任务调度系统帮助开发者解决问题。随着微服务化架构的逐步演进,单体架构逐渐演变为分布式、微服务架构。在此的背景下,很多原先的任务调度平台已经不能满足业务系统的需求。于是出现了一些基于分布式的任务调度平台。这些平台各有其特点,但各有不足之处,比如不支持任务编排、与业务高耦合、不支持跨平台等问题。非常不符合新一代微服务架构的需求,因此宜信公司开发了微服务任务调度平台(SIA-TASK)。

SIA 是宜信公司基础开发平台 Simple is Awesome 的简称,SIA-TASK(微服务任务调度平台)是其中的一项重要产品,SIA-TASK 契合当前微服务架构模式,具有跨平台,可编排,高可用,无侵入,一致性,异步并行,动态扩展,实时监控等特点。

项目简介

SIA-TASK 是任务调度的一体式解决方案。对任务进行元数据采集,然后进行任务可视化编排,最终进行任务调度,并且对任务采取全流程监控,简单易用。对业务完全无侵入,通过简单灵活的配置即可生成符合预期的任务调度模型。

SIA-TASK 借鉴微服务的设计思想,获取分布在每个任务执行器上的任务元数据,上传到任务注册中心。利用在线方式进行任务编排,可动态修改任务时钟,采用 HTTP 作为任务调度协议,统一使用 JSON 数据格式,由调度中心进行时钟解析,执行任务流程,进行任务通知。

关键术语

  • 任务(Task): 基本执行单元,执行器对外暴露的一个 HTTP 调用接口 ;

  • 作业(Job): 由一个或者多个存在相互逻辑关系(串行 / 并行)的任务组成,任务调度中心调度的最小单位 ;

  • 计划(Plan): 由若干个顺序执行的作业组成,每个作业都有自己的执行周期,计划没有执行周期 ;

  • 任务调度中心(Scheduler): 根据每个的作业的执行周期进行调度,即按照计划、作业、任务的逻辑进行 HTTP 请求 ;

  • 任务编排中心(Config): 编排中心使用任务来创建计划和作业 ;

  • 任务执行器(Executer): 接收 HTTP 请求进行业务逻辑的执行 ;

  • Hunter:Spring 项目扩展包,负责执行器中的任务抓取,上传注册中心,业务可依赖该组件进行 Task 编写。

微服务任务调度平台的特性

  • 基于注解自动抓取任务,在暴露成 HTTP 服务的方法上加入 @OnlineTask 注解,@OnlineTask 会自动抓取方法所在的 IP 地址,端口,请求路径,请求方法,请求参数格式等信息上传到任务注册中心 (zookeeper),并同步写入持久化存储中,此方法即任务 ;

  • 基于注解无侵入多线程控制,单一任务实例必须保持单线程运行,任务调度框架自动拦截 @OnlineTask 注解进行单线程运行控制,保持在一个任务运行时不会被再次调度。而且整个控制过程对开发者完全无感知。

  • 调度器自适应任务分配,任务执行过程中出现失败,异常时。可以根据任务定制的策略进行多点重新唤醒任务,保证任务的不间断执行。

  • 高度灵活任务编排模式,SIA-TASK 的设计思想是以任务为原子,把多个任务按照执行的关系组合起来形成一个作业。同时运行时分为任务调度中心和任务编排中心,使得作业的调度和作业的编排分隔开来,互不影响。在我们需要调整作业的流程时,只需要在编排中心进行处理即可。同时编排中心支持任务按照串行,并行,分支等方式组织关系。在相同任务不同任务实例时,也支持多种调度方式进行处理。

微服务任务调度平台设计

SIA-TASK 主要分为五个部分:

  • 任务执行器

  • 任务调度中心

  • 任务编排中心

  • 任务注册中心(zookeeper)

  • 持久存储(Mysql)

    sia_task1.png

SIA-TASK 的主要运行逻辑:

  1. 通过注解抓取任务执行器中的任务上报到任务注册中心

  2. 任务编排中心从任务注册中心获取数据进行编排保存入持久化存储

  3. 任务调度中心从持久化存储获取调度信息

  4. 任务调度中心按照调度逻辑访问任务执行器

sia_task2.png

UI 预览

首页提供多维度监控

  • 调度器信息:展示调度器信息(负载能力,预警值),以及作业分布情况。

  • 调度信息:展示调度中心触发的调度次数,作业、任务多维度调度统计。

  • 对接项目统计:对使用项目的系统进行统计,作业个数,任务个数等等。

index.png

调度监控提供对已提交的作业进行实时监控展示。

  • 作业状态实时监控:以项目组为单位面板,展示作业运行时状态。

  • 实时日志关联:可以通过涂色状态图标进行日志实时关联展示。

scheduling-monitoring.png

任务管理:提供任务元数据的相关操作

  • 任务元数据录入:手动模式的任务,可在此进行录入。

  • 任务连通性测试:提供任务连通性功能测试。

  • 任务元数据其他操作:修改,删除。

Task-management.png

user-handbook_taskMg5.png

Job 管理:提供作业相关操作

  • 任务编排:进行作业的编排。

  • 发布作业: 作业的创建,修改,以及发布。

  • 级联设置:提供存在时间依赖的作业设置。

Job-management.png

日志管理

user-handbook_log1.png

  • 本地日志:日志界面简洁,查询快速;日志提供 7 天的调度日志,以供快速查询。

本文转载自宜信技术学院网站。

原文链接: http://college.creditease.cn/detail/249

2020 年 2 月 10 日 21:00 550

评论

发布
暂无评论
发现更多内容

SpringBoot 使用 jasypt 对配置项进行加密

hungxy

Java springboot jasypt

企业架构框架之DoDAF

Winfield

企业架构

MySQL 大表优化方案

Bruce Duan

MySQL优化

第七周总结

Karl

LeetCode 144. Binary Tree Preorder Traversal

liu_liu

算法 LeetCode

技术革新产业变革新动能

CECBC区块链专委会

MinIO 简介和搭建一个对象存储服务

耳东

Minio store Object store

ARTS打卡 第8周

引花眠

ARTS 打卡计划

MyBatis几种好用的写法

Bruce Duan

MyBatis标签

Mybatis二级缓存,你确定要用么?

xcbeyond

mybatis 二级缓存 一级缓存

性能测试

满山李子

极客大学架构师训练营

JVM系列之:详解java object对象在heap中的结构

程序那些事

Java JVM GC JOL

波士顿动力狗 SPOT 权威购买指北

早睡蟒

Python 人工智能 深度学习 波士顿动力 机械狗

Apache BeanUtils和Spring BeanUtils剖析

Bruce Duan

BeanUtils 浅拷贝和深拷贝

如何保证消息不丢失?处理重复消息?消息有序性?消息堆积处理?

Bruce Duan

消息队列 保证消息不丢失 处理重复消息 消息有序性 消息堆积处理

什么?还没有自己的域名?

北漂码农有话说

架构师训练营 -- 第七周学习总结

花花大脸猫

分布式锁用 Redis 还是 Zookeeper?

xcbeyond

redis zookeeper 分布式锁

压测工具

Karl

LeetCode 565. Array Nesting

liu_liu

算法 LeetCode

Newbe.Claptrap 框架入门,第二步 —— 简单业务,清空购物车

newbe36524

容器 微服务架构 Reactive .net core ASP.NET Core

week7 总结 性能测试

a晖

两个指针缩小范围算法,CQRS 命令查询职责分离模式 John 易筋 ARTS 打卡 Week 09

John(易筋)

ARTS 打卡计划

自从用完Gradle后,有点嫌弃Maven了!速度贼快!

xcbeyond

maven Gradle

第六周总结

Karl

架构师训练营作业 (第七周)

默默

写一个 web 性能压测工具

橙子

使用HSDB 查看jvm内存

引花眠

IDEA 插件: EasyCode 一键生成所需代码

Bruce Duan

idea插件 easycode 生成代码

ARTS 05 - 使用 Ecto.Migration 来做数据库迁移

jerry.mei

算法 ARTS 打卡计划 学习总结 函数式编程 Elixir

架构师训练营——请简述 CAP 原理

橙子

微服务任务调度平台(SIA-TASK)-InfoQ