Saturn简介及架构介绍

泄露秘密 提交于 2020-03-19 13:40:40

3 月,跳不动了?>>>

整理自官方文档。

Saturn:一个分布式作业调度平台。据悉Saturn平台已经平稳运行,承载着唯品会核心系统的全部定时任务的调度,监控,配置,经受住了生产环境的各种考验。

简介:分布式定时任务的调度,取代传统的Linux Cron/Spring Batch Job的方式,做到全域统一配置,统一监控,任务高可用及分片并发处理。Saturn基于当当Elastic Job代码基础上由唯品会Venus体系自主研发的任务调度系统。

特性:

  • 支持基于事件和时间触发
  • 人工指定资源分配策略+自动平衡策略结合
  • 任务开发语言不受限制,支持Shell(PHP,Bash, Python...)作业以及Java作业
  • 支持一机一分片的本地化模式任务调度
  • 任务按分片并行执行
  • 框架和业务代码隔离,零依赖
  • 分片的调度按负载均衡分布
  • 可视化管理
  • 支持秒级任务触发
  • 可视化监控和报警
  • 支持容器化(Docker)部署

术语定义:

术语 解释
作业(Job)和作业分片 作业(Job)是可以独立运行的脚本(shell作业)或者具备某项功能的函数实现(java、消息作业)。作业可并发执行在多个执行节点(Executor)上,作业分片定义了作业并发执行的数量以及执行编号。比如作业分片为2,则表示作业最多可以并发执行在2个执行结点上,执行编号为0和1。作业分片调度指将作业分片指派给执行结点。比如A作业有5个分片(分片0,1,2,3,4),一共有两个执行结点E1和E2,将0,1,2指派给E1;3,4指派给E2。
Namespace 域(saturn称之为Namespace)代表一组特定的执行结点和作业。作业必须而且只能属于某一个特定的域。一个域下通常有若干个执行结点(每个执行结点都运行在不同的独立的机器上),通过启动参数指定执行结点的-namespace将执行结点加入到某个域。执行结点必须而且只能属于某一个特定的域。域下的全部执行结点功能是对等的,域下的任何一下执行结点均有能力执行域下的全部作业,换言之,作业可以在域下任何一个执行结点执行。
组织名 每个namespace可以属于一个组织
Saturn 定时任务调度系统
执行结点(Executor) 执行结点(Executor)是调用并执行作业的程序。它通过定时(quartz)驱动来触发调用事件,并最终调用作业的执行入口(shell脚本或者函数实现)。执行结点只会处理指派给它的作业分片。
控制台(Console) 统一配置界面,可以使用控制台来查看作业状态,执行结点状态和执行日志,添加、删除作业,修改作业属性。

 

总体设计:

编号 说明
1 支持多种作业类型(Shell作业/Java作业)
2 支持作业HA,负载均衡和失败转移
3 支持弹性动态扩容
4 支持Job Timeout处理
5 支持统一监控和告警
6 支持作业统一配置
7 支持资源隔离和作业隔离

说明:Saturn的基本原理是将作业在逻辑上划分为若干作业分片,通过作业分片调度器将作业分片指给特定的执行节点,执行节点通过quertz出发执行作业的具体实现(以shell为例,则为shell脚本),在执行的时候,会将分片序号和参数传入,如下图所示,作业的实现逻辑分析分片序号和分片参数,并以此为依据来调用具体的实现(比如一个批量处理数据库的作业,可以划分0号分片处理1-10号数据库,1号分片处理11-20号数据库)。

 

系统逻辑架构图

执行节点:

负责作业的触发(定时),作业执行时,结果上报,日志上报,告警上报,监控日志写入等功能。可独立运行在业务服务器,也可与业务代码运行在同一个jvm。使用Java开发,提供jar包和可运行的工程两种方式供业务方使用,是业务作业接入saturn最主要的组件。

控制台:

负责作业的统一配置,包括作业的添加、删除,作业属性配置,作业状态查看,执行日志查看,执行节点监控等功能,控制台单独部署,提供web应用给全域共用,业务接入方根据申请的权限控制对赢得业务作业。

作业分片调度器:

Saturn的“大脑”,其基本功能是将作业分片指派到执行节点,通过调整分配算法和分配策略,可以将作业合理的安排到合适的执行节点,从而实现HA,负载均衡,动态扩容,作业隔离,资源隔离等治理功能。作业分片调度器为后台程序,单独部署;它是公共资源,所有域共用同一套作业分片调度器。接入作业后,会自动接受作业分片调度器的调度。

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!