• 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

    点亮一下在看,你更好看

  • 相关阅读:
    INV接口管理器
    取会计科目之数字
    两个有用的oracle数据库运算:intersect和minus运算
    弹出“FRM40400:事务完成:已应用和保存X条记录
    JSP连接数据库
    javaScript JSP HTML Java CSS 注释
    Android开发环境搭建全过程
    用JAVA 实现“生产者-消费者”问题
    路由器如何当交换机使用
    validateJarFile jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet
  • 原文地址:https://www.cnblogs.com/ITester520/p/13203281.html
Copyright © 2020-2023  润新知