This will delete the page " java分布式任务调度 唯品会,分布式定时任务调度系统Saturn安装部署"
. Please be certain.
简介
Saturn (定时任务调度系统)是唯品会自主研发的分布式的定时任务的调度平台,目标是取代传统的Linux Cron/Spring Batch Job/Quartz的方式,做到全域统一配置,统一监控,任务高可用以及分片。目前该平台己平稳运行1年,承载着唯品会核心系统的全部定时任务的调度,监控,配置,经受住了生产环境的各种考验。 开源版本系唯品会生产使用的saturn核心,去除了唯品会的认证,监控,告警系统等依赖,可独立部署安装使用。
**系统特性 ** 任务负荷,动态均衡
66d9c26678
.png
Saturn 给每个任务的每个分片一个负荷值,即权重。比如任务 A 每个分片的权重都是 30,任务 B每个分片的权重都是 10,在进行资源调度的时候,Saturn 可以根据分配给不同机器的总负荷值,来做一个均衡。比如说机器 1 的负荷值是 60,机器 2 的负荷值也是 60,虽然机器 1 只负责了两个任务分片,机器 2 却负责了四个任务分片,通过任务负荷来达到资源均衡的效果。 !https://img-blog.csdnimg.cn/img_convert/66d9c266788c5cd524a4e8da3155298d.png 优先列表
资源自动分配时存在一个问题,若任务非常重要如唯品会的双订单任务,或者订单处理的问题非常重要,这时机器应该如何处理?
ce786d2112
.png
对此唯品会引入了优先列表概念,开发和运维人员可以给某些任务分配一些优先运行的机器列表,当优先机器任务存在的时候,只会在这些机器运行,只有当这些机器全部不在了,任务才会被迁移到其他的机器上运行,满足订单部门提出的场景化需求。
本地模式
b8c9d32833
.png
有些情况下,任务的分配是不可预知的,比如唯品会在商品售卖前,会全量扫描在售商品图片,这个任务要进行大量的图片处理,这时通常就不会让这个任务跟其他任务共享资源。另外 Saturn 支持容器化,可以在高峰期自动扩展到 150 个节点去执行某个任务,然后在低谷期自动缩回到 20 个节点,这就是 Saturn 本地模式的一种场景。
探索与演进
唯品会任务调度系统也经过了长期的探索, 2012 年之前采用 Crond 服务,2014 年开始使用Quartz、 Spring Batch 和各团队的个性化方案,但会遇到任务没法监控,任务出问题了不知道和成本高昂等情况,因此唯品会在 2016 年开始实行全部定时任务,并统一到 Saturn 平台。
目前 Saturn 产生的价值是:有 66 个业务应用系统在使用,包括订单、支付、库存、用户、财务等售卖相关的核心系统,每天有 350 个执行节点执行任务,每天执行任务 2000 万多次,相当于网站的全部的流量。这表明 Saturn 并不是一个纸上谈兵的产品,它已经承受住了唯品会大规模使用场景的考验。
架构设计
术语定义
47c2f583f2
.png
系统逻辑架构
1fd1f8c95a
.png
执行结点
负责作业的触发(定时),作业执行,结果上报,日志上报,告警上报,监控日志写入等功能。可独立运行在业务服务器,也可与业务代码运行在同一个JVM。 使用java开发,提供jar包和可运行的工程两种方式供业务方使用,是业务作业接入saturn最主要的组件。
控制台
负责作业的统一配置,包括作业添加、删除,作业属性配置,作业状态查看,执行日志查看,执行结点监控等功能。 控制台单独部署,提供WEB应用给全域共用,业务接入方根据申请的权限控制对应的业务作业。
作业分片调度器
Saturn的”大脑“,其基本功能是将作业分片指派到执行结点。通过调整分配算法和分配策略,可以将作业合理地安排到合适的执行结点,从而实现HA,负载均衡,动态扩容,作业隔离,资源隔离等治理功能。 作业分片调度器为后台程序,单独部署;它是公共资源,所有域共用同一套作业分片调度器。接入作业后,会自动接受作业分片调度器的调度。
部署
控制台console部署
准备工作
1, 安装zookeeper(>=3.4.6)jdk(>=1.7)并启动zookeeper
console部署
1, 准备域配置json文件
域配置json文件用于定义saturn系统中的组织名,namespace,以及ZK的连接串,格式如下:1
2
3
4
5
6
7{
"nameAndNamespace":"/name/namespace",
"zkAddressList":"ip:port,ip:port,..."
}
把它保存在某个路径,比如/apps/saturn/config/regcenter.json
2, 配置环境变量1export REG_CENTER_JSON_PATH=/apps/saturn/config/regcenter.json
3 启动saturn console1java -DSATURN_CONSOLE_LOG=/apps –jar saturn-console-master-SNAPSHOT.jar &
注意,如果是在生产环境启动console,建议增加一些JVM启动参数:1
2
3
4
5
6#for jdk1.7:
-Xmx2G -Xms2G -XX:PermSize=256m-XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly-XX:CMSInitiatingOccupancyFraction=75 -XX:+ExplicitGCInvokesConcurrent-Xloggc:${HOME}/gc_zk.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps-XX:ErrorFile=${HOME}/hserr%p.log -XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=${HOME}
#for jdk1.8:
-Xmx2G -Xms2G -MetaspaceSize=256m-MaxMetaspaceSize=512m -XX:+UseConcMarkSweepGC-XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75-XX:+ExplicitGCInvokesConcurrent -Xloggc:${HOME}/gc_zk.log -XX:+PrintGCDetails-XX:+PrintGCDateStamps -XX:ErrorFile=${HOME}/hserr%p.log-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${HOME}
executor部署
准备工作
1,安装jdk(>=1.7)
executor部署
1,配置zookeeper链接地址环境变量1export VIP_SATURN_ZK_CONNECTION=zkip:2181
2,启动executor1
This will delete the page " java分布式任务调度 唯品会,分布式定时任务调度系统Saturn安装部署"
. Please be certain.