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

VOL 134

12

2020-06

今天距2021年202天

这是ITester软件测试小栈第134次推文

点击上方蓝字“ITester软件测试小栈“关注我,每周一五早上 07:30准时推送。

微信公众号后台回复“资源测试工具包”领取测试资源,回复“21天打卡”一起学习成长,打怪升级。

本文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所在容器或物理机当中的作业脚本和代码。

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

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

留言福利:

抽取截止至6月14日留言点赞最多的一位幸运er,可获得:漫画算法:小灰的算法之旅(Python篇)

(幸运er名单将在下周一推文的置顶留言处公布)


以上


That‘s all

更多系列文章

敬请期待

ITester软件测试小栈

往期内容宠幸

1.Python接口自动化-接口基础(一)


2.Python接口自动化-接口基础(二)


3.Python接口自动化-requests模块之get请求


4.Python接口自动化-requests模块之post请求


5.Python接口自动化之cookie、session应用


6.Python接口自动化之Token详解及应用


7.Python接口自动化之requests请求封装


8.Python接口自动化之pymysql数据库操作


9.Python接口自动化之logging日志


10.Python接口自动化之logging封装及实战

想获取更多最新干货内容

快来星标 置顶 关注

每周一、三、五 07:30见

<<  滑动查看下一张图片  >>


 后台 回复"资源"取干货

回复"21天打卡"一起打怪升级

测试交流Q群:727998947

点亮一下在看,你更好看

原文地址:https://www.cnblogs.com/ITester520/p/13203281.html