EasyScheduler的架构原理及实现思路

  • 时间:
  • 浏览:1
  • 来源:幸运飞艇APP下载_幸运飞艇APP官方

WorkerServer也采用分布式无中心设计理念,WorkerServer主要负责任务的执行和提供日志服务。WorkerServer服务启动时向Zookeeper注册临深冬点,并维持心跳。

##### 该服务含有 :

对于启动新Master来打破僵局,似乎有点差强人意,于是大伙提出了以下你是什么方案来降低你是什么 风险:

流程实例:流程实例是流程定义的实例化,还不能 通过手动启动或定时调度生成

WorkerServer

FileAppender主要实现如下:



ZooKeeper Master容错完成刚刚则重新由EasyScheduler中Scheduler程序运行池调度,遍历 DAG 找到”正在运行”和“提交成功”的任务,对”正在运行”的任务监控其任务实例的情形,对”提交成功”的任务都要判断Task Queue中是是不是刚刚指在,刚刚指在则同样监控任务实例的情形,刚刚不指在则重新提交任务实例。

在早期调度设计中,刚刚越来越优先级设计,采用公平调度设计得话,会遇到先行提交的任务之完会和后继提交的任务一块儿完成的情形,而非要做到设置流程刚刚任务的优先级,因此大伙对此进行了重新设计,目前大伙设计如下:

中心化思想设计指在的什么的现象:

}

}

提供任务队列的操作,目前队列也是基于Zookeeper来实现。刚刚队列中存的信息较少,太少担心队列里数据太少的情形,实际上大伙压测过百万级数据存队列,对系统稳定性和性能没影响。

TaskLogFilter实现如下:

优先级 :支持流程实例和任务实例的优先级,刚刚流程实例和任务实例的优先级不设置,则默认是先进先出

ZooKeeper服务,系统中的MasterServer和WorkerServer节点都通过ZooKeeper来进行集群管理和容错。另外系统还基于ZooKeeper进行事件监听和分布式锁。

大伙也原本基于Redis实现过队列,不过大伙希望EasyScheduler依赖到的组件尽量地少,好多好多 最后还是加在了Redis实现。

刚刚工作流含有 任务失败达到最大重试次数,工作流就会失败停止,失败的工作流还不能 手动进行重跑操作刚刚流程恢复操作

本文从调度出发,初步介绍了大数据分布式工作流调度系统--EasyScheduler的架构原理及实现思路。

Master Scheduler程序运行池一旦发现任务实例为” 都要容错”情形,则接管任务并进行重新提交。

注意:Master Scheduler程序运行池在获取Command的刚刚是FIFO的最好的办法执行的。

刚刚Web(UI)和Worker不一定在同一台机器上,好多好多 查看日志非要像查询本地文件那样。有你是什么方案:

补数:补历史数据,支持区间并行和串行你是什么补数最好的办法

class TaskLogFilter extends Filter

调度最好的办法: 系统支持基于cron表达式的定时调度和手动调度。命令类型支持:启动工作流、从当前节点刚刚刚刚刚刚开始执行、恢复被容错的工作流、恢复暂停流程、从失败节点刚刚刚刚刚刚开始执行、补数、调度、重跑、暂停、停止、恢复等候程序运行池。其中 恢复被容错的工作流恢复等候程序运行池 你是什么命令类型是由调度结构控制使用,结构无法调用



上图中MainFlowThread等候SubFlowThread1刚刚刚刚刚开始,SubFlowThread1等候SubFlowThread2刚刚刚刚刚开始, SubFlowThread2等候SubFlowThread3刚刚刚刚刚开始,而SubFlowThread3等候程序运行池池有新程序运行池,则整个DAG流程非要刚刚刚刚刚开始,从而其中的程序运行池就说 能释放。原本就形成的子父流程循环等候的情形。此时除非启动新的Master来增加程序运行池来打破原本的”僵局”,因此调度集群将非要再使用。

系统的前端页面,提供系统的各种可视化操作界面,详见系统使用手册帕累托图。

API接口层,主要负责解决前端UI层的请求。该服务统一提供RESTful api向结构提供请求服务。

接口包括工作流的创建、定义、查询、修改、发布、下线、手工启动、停止、暂停、恢复、从该节点刚刚刚刚刚刚开始执行等等。

依赖:系统不单单支持 DAG 简单的前驱和后继节点之间的依赖,一块儿还提供任务依赖节点,支持流程间的自定义任务依赖

这里首真难区分任务失败重试、流程失败恢复、流程失败重跑的概念:

MasterServer

邮件告警:支持 SQL任务 查询结果邮件发送,流程实例运行结果邮件告警及容错告警通知

@Override

public FilterReply decide(ILoggingEvent event) {

DAG: 全称Directed Acyclic Graph,简称DAG。工作流中的Task任务以有向无环图的形式组装起来,从入度为零的节点进行拓扑遍历,直到无后继节点为止。举类式 下图:

定时调度:系统采用 quartz 分布式调度器,并一块儿支持cron表达式可视化的生成

按照不同流程实例优先级优先于同4个 多 流程实例优先级优先于同一流程内任务优先级优先于同一流程内任务提交顺序依次从高到低进行任务解决。

于是大伙选着了第你是什么最好的办法来解决程序运行池严重不足的什么的现象。

接下来说正题,大伙将工作流中的任务节点分了你是什么类型。

以/流程定义id/流程实例id/任务实例id.log的形式生成日志

提供告警相关接口,接口主要包括告警你是什么类型的告警数据的存储、查询和通知功能。其中通知功能又有邮件通知SNMP(暂未实现)你是什么。

注意:刚刚” 网络抖动”之完会使得节点短时间内选着选着离开和ZooKeeper的心跳,从而指在节点的remove事件。对于你是什么 情形,大伙使用最简单的最好的办法,那就说 节点一旦和ZooKeeper指在超时连接,则直接将Master或Worker服务停掉。

每4个 多 业务节点都还不能 配置失败重试的次数,当该任务节点失败,会自动重试,直到成功刚刚超过配置的重试次数。逻辑节点不支持失败重试。因此逻辑节点里的任务支持重试。

任务实例:任务实例是流程定义中任务节点的实例化,标识着具体的任务执行情形

MasterServer采用分布式无中心设计理念,MasterServer主要负责 DAG 任务切分、任务提交监控,并一块儿监听其它MasterServer和WorkerServer的健康情形。

MasterServer服务启动时向Zookeeper注册临深冬点,通过监听Zookeeper临深冬点变化来进行容错解决。

失败策略:对于并行运行的任务,刚刚有任务失败,提供你是什么失败策略解决最好的办法,继续是指不管并行运行任务的情形,直到流程失败刚刚刚刚刚开始。刚刚刚刚刚开始是指一旦发现失败任务,则一块儿Kill掉正在运行的并行任务,流程失败刚刚刚刚刚开始

其中Master监控好多好多 Master和Worker的目录,刚刚监听到remove事件,则会根据具体的业务逻辑进行流程实例容错刚刚任务实例容错。

在对调度系统架构说明刚刚,大伙先来认识一下调度系统常用的名词

具体实现是根据任务实例的json解析优先级,因此把流程实例优先级_流程实例id_任务优先级_任务id信息保指在ZooKeeper任务队列中,当从任务队列获取的刚刚,通过字符串比较即可得出最都要优先执行的任务

中心化的设计理念比较简单,分布式集群中的节点按照角色分工,大体上分为你是什么角色:

任务类型: 目前支持有SHELL、SQL、SUB_PROCESS、PROCEDURE、MR、SPARK、PYTHON、DEPENDENT,一块儿计划支持动态插件扩展,注意:其中子 SUB_PROCESS 也是4个 多 单独的流程定义,是还不能 单独启动执行的

服务容错设计依赖于ZooKeeper的Watcher机制,实现原理如图:

EasyScheduler使用ZooKeeper分布式锁来实现同一时刻非要一台Master执行Scheduler,刚刚非要一台Worker执行任务的提交。

流程定义:通过拖拽任务节点并建立任务节点的关联所形成的可视化DAG

容错分为服务宕机容错和任务重试,服务宕机容错又分为Master容错和Worker容错你是什么情形