前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Saturn分布式调度之系统架构简介

Saturn分布式调度之系统架构简介

作者头像
ITester软件测试小栈
发布2020-06-17 14:53:12
3.8K0
发布2020-06-17 14:53:12
举报
文章被收录于专栏:全栈测试

本文2657字,阅读约需7分钟

在系统需要运行大量耗时定时任务的场景下,单使用类似Quartz或者Spring Task等定时任务框架无法满足对并发处理性能、监控管理及运维拓展的要求,以下,介绍公司使用过的分布式定时任务调度框架Saturn。

Saturn简介

1

简介

Saturn 任务调度系统是唯品会开源的一个分布式任务调度平台,取代传统的Linux Cron/Spring Batch Job的方式,做到全域统一配置,统一监控,任务高可用以及分片并发处理,更重要的是其还支持容器化技术,同时Saturn中的任务不仅支持Java,还支持Shell脚本,目前Saturn已经在Github上开源。

2

架构

Saturn定时任务调度的最小单位是分片,即任务的一个并行执行单元。Saturn的基本任务就是将任务分成多个分片,并将每个分片通过算法调度到对应的Executor上去执行。

3

特性

  • 支持多种语言作业,语言无关(Java/Go/C++/PHP/Python/Ruby/shell);
  • 支持秒级调度;
  • 支持作业分片并行执行;
  • 支持依赖作业串行执行;
  • 支持作业高可用和智能负载均衡;
  • 支持异常检测和自动失败转移;
  • 支持多个集群部署;
  • 支持弹性动态扩容;
  • 支持优先级和权重设置;
  • 支持docker容器,容器化友好;
  • 支持cron时间表达式;
  • 支持多个时间段暂停执行控制;
  • 支持超时告警和超时强杀控制;
  • 支持灰度发布;
  • 支持异常、超时和无法高可用作业监控告警和简易的故障排除;
  • 支持失败率最高、最活跃和负荷最重的各域各节点TOP10的作业统计;

4

专业术语

组织名:每个namespace可以属于一个组织。

作业(Job)和作业分片:作业(Job)是可以独立运行的脚本(shell作业)或者具备某项功能的函数实现(java、消息作业)。作业可并发执行在多个执行节点(Executor)上,作业分片定义了作业并发执行的数量以及执行编号。

(Namespace):代表一组特定的执行结点和作业,作业必须而且只能属于某一个特定的域。一个域下通常有若干个执行结点,执行结点必须而且只能属于某一个特定的域。域下的全部执行结点功能是对等的,域下的任何一下执行结点均有能力执行域下的全部作业,换言之,作业可以在域下任何一个执行结点执行。

执行结点(Executor):是调用并执行作业的程序,它通过定时(quartz)驱动来触发调用事件,并最终调用作业的执行入口(shell脚本或者函数实现),执行结点只会处理指派给它的作业分片。

控制台(Console):统一配置界面,可以使用控制台来查看作业状态,执行结点状态和执行日志,添加、删除作业,修改作业属性。

Saturn架构

1

原理

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

2

场景

有时候由于测试业务的需要,我们需要按照工作流的方式去调度作业:JobA调度成功后调度 JobB, JobB调度成功后调度 JobC。Saturn提供这个能力,我们称之为作业编排。作业编排将作业形成一个有向无环图,按照图的顺序依次调用。

3

组成

Saturn包括两大部分,Saturn Console和Saturn Executor。

Saturn Console是一个GUI,用于作业/Executor管理,统计报表展现,系统配置等功能。它是整个调度系统的大脑:将作业任务分配到各Executor。为了实现Console的高可用性。希望Console有多台服务器所组成,只需要在多台不同的服务器的环境变量中指定相同的VIP_SATURN_CONSOLE_CLUSTER即可,至于VIP_SATURN_CONSOLE_CLUSTER的值可以自行指定,只是一个集群标识而已。

Saturn Executor是执行任务的Worker:按照作业配置的要求去执行部署于Executor所在容器或物理机当中的作业脚本和代码。

今日问题:在电商项目中,你是如何进行压力测试的?

(欢迎在下方留言区发表你的看法)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ITester软件测试小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作业(Job)和作业分片:作业(Job)是可以独立运行的脚本(shell作业)或者具备某项功能的函数实现(java、消息作业)。作业可并发执行在多个执行节点(Executor)上,作业分片定义了作业并发执行的数量以及执行编号。
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档