美文网首页互联网架构
分布式调度系统数据设计

分布式调度系统数据设计

作者: liuhailong | 来源:发表于2019-04-19 23:59 被阅读4次

一、概述

按目前的设计,每个集群(cluster)为一个业务部门服务,完全属于这个业务部门。

同时可以存在多个集群,提供统一的控制台集中管理这些集群。

集群不可以跨IDC,但可以在同城IDC、甚至异地IDC设置影子集群,调度系统自动同步配置。

当前IDC调度集群整体故障时,可以手动或自动拉起同城影子集群,实现跨IDC高可用。

二、数据结构

采用树形存储。

1. namespace

根目录下,为namespace,同一业务部门下可能分业务组,不同业务组使用不同的namespace,形如:com.nucc.clearing。

/ {namespace}
       /config
       /runtime

namespace下,分两个子节点:config和runtime。

config下存放配置信息,静态的,可以通过控制台界面或调用api修改。

runtime下存放运行时信息,包括:当前存活节点信息、正在执行中的Job状态等。

2. config

/{namespace}/config
       /job
             /{jobName} |data: jobConfig,json格式,形如{jobCron:xx,overload:x,state:暂停,preferNodes:xx}
      /node
             /{nodeName}|data: nodeInfo,json格式,形如{ip:xx, port:xx,state:正常}

config下,分两个子节点:job和node。

job下保存多个job的配置信息,以jobName为key,节点上保存数据,json格式,保存job详细配置信息。

node下保存多个节点信息,这里保存的配置的节点信息,以界面配置或配置文件为准,和节点是否在线无关,其中state也是配置的状态,不是实时状态。

3. runtime

/{namespace}/runtime
       /job
              /{jobName}
      /node
              /{nodeName}

同config类似。

4. job runtime

/{namespace}/runtime/job/{jobName}
       /availableNodes
             /{nodeName1}
             /{nodeName2}
       /instance
             /{jobInstanceId} |data: {startAt:xx, node:xx, state:x, childrenCount:x,retryCount:x}
             /children
                    /{childInstanceId1} |data: {state:running, startAt:xx, node:xx}
                    /{childInstanceId2} |data: {state:running, startAt:xx, node:xx}

5. node runtime

/{namespace}/runtime/node/{nodeName}
         /job
               /{jobName1}
               /{jobName2}
         /jobInstane
               /{jobInstaceId}
               /{childJobInstaceId}

三、生命周期

1. job

(1)starting

(2)updating

(3)stopping

  以上事件都会触发任务分配:根据任务preferNodes配置和overload,生成job和node映射关系。

  完成后更新config、runtime中相关节点。

  主节点执行,选主期间不能操作。

2. job instance

(1)starting

如果是普通任务,创建instance节点。

如果是dynamic类型的子任务,在children下创建节点。

如果是sharding类型的子任务,在children下创建节点。

(2)running

状态改为running,提交到raft存储。

(3)finishing

子任务正常完成,提交状态更新,触发父任务finishing操作,检查是否整体完成(时间相近的检查合并执行)。

子任务抛异常,提交更新状态,触发父任务finnishing操作。需通过界面或调用api手动重新执行。

子任务执行超时,触发故障转移,更新重试次数。

如普通任务整体完成,则删除{instanceName}节点。

3. node config / runtime

(1)joining

(2)leaving

  以上事件都会触发任务分配:根据任务preferNodes配置和overload,生成job和node映射关系。

  完成后更新config、runtime中相关节点。

  主节点执行,选主期间不能操作。

  leaving会触发故障转移。

  /{namespace}/runtime/node/{nodeName}/jobInstance下的任务实例都会触发retry操作。

相关文章

  • DolphinScheduler容错源码分析之Master

    最近产品上选择使用DolphinScheduler作为大数据的任务调度系统。作为分布式调度系统DolphinSch...

  • 分布式调度系统数据设计

    一、概述 按目前的设计,每个集群(cluster)为一个业务部门服务,完全属于这个业务部门。 同时可以存在多个集群...

  • hadoop入门(初识yarn)

    分布式计算设计原则:移动计算,而不是移动数据。配置计算机调度系统yarn和计算引擎Map/Reduce。 插入配置...

  • 学习《左耳听风》专栏

    构建分布式系统的核心技术:1、全栈系统监控;2、服务/资源调度;3、流量调度;4、状态/数据调度; 一个好的监控系...

  • zookeeper 实现分布式锁

    简介 zookeeper为分布式系统调度框架, 用于解决分布式应用中数据管理问题,比如同步锁,分布式应用配置管理等...

  • 分布式网络数据抓取系统设计与实现

    分布式网络数据抓取系统设计与实现 1、分布式网络数据抓取系统说明 (1)深入分析网络数据(金融、教育、汽车类)爬虫...

  • hadoop

    hadoopHDFS : 分布式文件系统,存储海量的数据MapReduce : 并行处理框架,实现任务的分解与调度...

  • 大数据开发:数据平台调度系统设计及产品选型

    在大数据处理场景下,数据平台的调度系统设计非常关键,而市场上主流的开源产品也非常多,从架构层面来说,对于调度系统设...

  • 分布式任务调度系统设计

    一、思路 任务调度器、任务执行器、任务 任务调度器不关心业务逻辑,只关心任务的触发策略、失败策略、路由策略、阻塞处...

  • Hadoop、Hbase、Hive三者关系

    Hadoop本质上是:分布式文件系统(HDFS) + 分布式计算框架(Mapreduce) + 调度系统Yarn搭...

网友评论

    本文标题:分布式调度系统数据设计

    本文链接:https://www.haomeiwen.com/subject/epvhgqtx.html