EasySchedulerr大数据调度系统架构分析

导语

EasyScheduler是易观平台自主研发的大数据分布式调度系统。主要解决数据研发ETL 错综复杂的依赖关系,而不能直观监控任务健康状态等问题。EasyScheduler以DAG流式的方式将Task组装起来,可实时监控任务的运行状态,同时支持重试、从指定节点恢复失败、暂停及Kill任务等操作。

背景

任务调度系统在大数据平台当中是一个核心的基础设施,由于数据处理流程常常具有很长的依赖链条,因此依赖单机的crontab等单纯依赖时间调度的方式,往往存在很大的弊端,如依赖不清晰,出错难以查找等问题,因此,我们调研了市面上流行的调度系统

鉴于易观日处理数据30TB,复杂的 ETL依赖关系,我们开发了易观自己的大数据分布式调度系统EasyScheduler。

总架构设计

EasyScheduler设计围绕四个服务展开,UI、Web、Server和Alert。

  • UI : 使用易观封装的Vue及jsplumb组件开发
  • Web:使用SpringBoot提供Rest Api和UI分离交互
  • Server : Scheduler调度及分布式任务执行引擎
  • Alert:告警微服务

以下将详细介绍Server的设计思想和遇到的问题

去中心化vs 中心化

中心化思想

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

  • Master的角色主要负责任务分发并监督Slave的健康状态,可以动态的将任务均衡到Slave上,以致Slave节点不至于“忙死”或”闲死”的状态。
  • Worker的角色主要负责任务的执行工作并维护和Master的心跳,以便Master可以分配任务给Slave。

中心化思想设计存在的问题:

  • 一旦Master出现了问题,则群龙无首,整个集群就崩溃。为了解决这个问题,大多数Master/Slave架构模式都采用了主备Master的设计方案,可以是热备或者冷备,也可以是自动切换或手动切换,而且越来越多的新系统都开始具备自动选举切换Master的能力,以提升系统的可用性。
  • 另外一个问题是如果Scheduler在Master上,虽然可以支持一个DAG中不同的任务运行在不同的机器上,但是会产生Master的过负载。如果Scheduler在Slave上,则一个DAG中所有的任务都只能在某一台机器上进行作业提交,则并行任务比较多的时候,Slave的压力可能会比较大。

去中心化


去中心化设计里,通常没有Master/Slave的概念,所有的角色都是一样的,地位是平等的,全球互联网就是一个典型的去中心化的分布式系统,联网的任意节点设备down机,都只会影响很小范围的功能。
去中心化设计的核心设计在于整个分布式系统中不存在一个区别于其他节点的”管理者”,因此不存在单点故障问题。但由于不存在” 管理者”节点所以每个节点都需要跟其他节点通信才得到必须要的机器信息,而分布式系统通信的不可靠行,则大大增加了上述功能的实现难度。

实际上,真正去中心化的分布式系统并不多见。反而动态中心化分布式系统正在不断涌出。在这种架构下,集群中的管理者是被动态选择出来的,而不是预置的,并且集群在发生故障的时候,集群的节点会自发的举行"会议"选举新的"管理者"主持工作。最典型的案例就是ZooKeeper及Go语言实现的Etcd。

EasyScheduler的去中心化是Master/Worker注册到Zookeeper中,实现Master集群和Worker集群无中心,并使用Zookeeper分布式锁来选举其中的一台Master或Worker为“管理者”来执行任务。

分布式锁实践

EasyScheduler使用Zookeeper分布式锁来实现同一时刻只有一台Master执行Scheduler,或者只有一台Worker执行任务的提交。
获取分布式锁的核心流程算法如下:


EasyScheduler中Scheduler线程分布式锁实现流程图:

线程不足,循环等待问题

  • 如果一个DAG中没有子流程,则如果Command中的数据条数大于线程池设置的阈值,则直接流程等待或失败。
  • 如果一个大的DAG中嵌套了很多子流程,如下图:

    则会产生“死等”状态。MainFlowThread等待SubFlowThread1结束,
    SubFlowThread1等待SubFlowThread2结束,SubFlowThread2等待SubFlowThread3结束,而SubFlowThread3等待线程池有新线程,则整个DAG流程不能结束,从而其中的线程也不能释放。这样就形成的子父流程循环等待的状态。此时除非启动新的Master来增加线程来打破这样的”僵局”,否则调度集群将不能再使用。

对于启动新Master来打破僵局,似乎有点差强人意,于是我们提出了以下三种方案来降低这种风险:

  1. 计算所有Master的线程总和,然后对每一个DAG需要计算其需要的线程数,也就是在DAG流程执行之前做预计算。因为是多Master线程池,所以总线程数不太可能实时获取。
  2. 对单Master线程池进行判断,如果线程池已经满了,则让线程直接失败。
  3. 增加一种资源不足的Command类型,如果线程池不足,则将主流程挂起。这样线程池就有了新的线程,可以让资源不足挂起的流程重新唤醒执行。

注意:Master Scheduler线程在获取Command的时候是FIFO的方式执行的。

于是我们选择了第三种方式来解决线程不足的问题。

容错设计

EasyScheduler容错设计依赖于Zookeeper的Watcher机制,实现原理如图:

Master监控其他Master和Worker的目录,如果监听到remove事件,则会根据具体的业务逻辑进行流程实例容错或者任务实例容错。

Master容错流程图:

ZooKeeper Master容错完成之后则重新由EasyScheduler中Scheduler线程调度,遍历 DAG 找到”正在运行”和“提交成功”的任务,对”正在运行”的任务监控其任务实例的状态,对”提交成功”的任务需要判断Task Queue中是否已经存在,如果存在则同样监控任务实例的状态,如果不存在则重新提交任务实例。

Worker容错流程图:

Master Scheduler线程一旦发现任务实例为” 需要容错”状态,则接管任务并进行重新提交。

注意:由于” 网络抖动”可能会使得节点短时间内失去和zk的心跳,从而发生节点的remove事件。对于这种情况,我们使用最简单的方式,那就是节点一旦和zk发生超时连接,则直接将Master或Worker服务停掉。

Logback和gRPC实现日志访问

由于Web和Worker不一定在同一台机器上,所以查看日志不能像查询本地文件那样。有两种方案:

  • 将日志放到ES搜索引擎上
  • 通过gRPC通信获取远程日志信息
    介于考虑到尽可能的EasyScheduler的轻量级性,所以选择了gRPC实现远程访问日志信息。

我们使用自定义Logback的FileAppender和Filter功能,实现每个任务实例生成一个日志文件。
FileAppender实现如下:

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

过滤匹配以TaskLogInfo开始的线程名称:

总结

本章从调度出发,介绍了易观自主研发的大数据分布式调度系统。
EasyScheduler在易观数据平台起着中流砥柱的作用。本章着重介绍了EasyScheduler的架构原理及实现思路。

EasySchedulerr大数据调度系统架构分析相关推荐

  1. 当我们在聊「开源大数据调度系统Taier」的数据开发功能时,到底在讨论什么?

    原文链接:当我们在聊「开源大数据调度系统Taier」的数据开发功能时,到底在讨论什么? 课件获取:关注公众号__ "数栈研习社",后台私信 "Taier"__ ...

  2. 荔枝机器学习平台与大数据调度系统“双剑合璧”,打造未来数据处理新模式!...

    点击上方 蓝字关注我们 ✎ 编 者 按 在线音频行业在中国仍是蓝海一片.根据 CIC 数据显示,中国在线音频行业市场规模由 2016 年的 16 亿元增长至 2020 年的 131 亿元,复合年增长率 ...

  3. 大数据调度系统为什么选型Apache DolphinScheduler ?

    table of contents 一 .背景 二 .定位 三 .案例 四 .竟品对比 五 .DolphinScheduler简介 六 .社区发展 七.性能数据参考 一 .背景 今天跟客户聊天的时候, ...

  4. 大数据实时处理系统架构

    系统基本架构 整个实时分析系统的架构就是先由电商系统的订单服务器产生订单日志, 然后使用Flume去监听订单日志,并实时把每一条日志信息抓取下来并存进Kafka消息系统中, 接着由Storm系统消费K ...

  5. Hadoop的优势及大数据平台系统架构典型行业应用场景

    扩容能力强:Hadoop可以部署在数百台并行运行的廉价服务器集群,能提供成百上千TB的数据节点上运行的高度可扩展的存储与计算平台. 成本低:Hadoop可以通过普通廉价的服务器集群分布式处理数据,从而 ...

  6. 承载每天10万级任务的数据调度系统的架构是如何设计的

    消息:分布式工作流任务调度系统Apache DolphinScheduler开源地址:https://github.com/apache/incubator-dolphinscheduler , 欢迎 ...

  7. 贝壳大数据OLAP平台架构演进

    分享嘉宾:肖赞 贝壳 资深工程师 编辑整理:赵冬生 出品平台:DataFunTalk 导读:随着大数据的持续发展及数字化转型的兴起,大数据OLAP分析需求越来越迫切,不论是大型互联网企业,还是中小型传 ...

  8. DT时代商业革命,大数据金融行业应用发展分析

    导读 从IT时代到DT时代,本文将从金融行业大数据发展现状.市场规模及前景.数据类型分析.应用场景.实际案例等方面简要分析大数据在金融行业应用发展. IT时代是以自我控制.自我管理为主,而DT(Dat ...

  9. 大数据平台网站日志分析系统

    1:大数据平台网站日志分析系统,项目技术架构图: 2:大数据平台网站日志分析系统,流程图解析,整体流程如下: ETL即hive查询的sql; 但是,由于本案例的前提是处理海量数据,因而,流程中各环节所 ...

  10. 大数据平台日志存储分析系统解决方案

    大数据平台日志存储分析系统是在大数据平台下,针对业务系统产生的日志记录进行存储和分析.日志数据来自ElasticSearch存储的日志历史数据,并将需要存储和分析的日志数据从ElasticSearch ...

最新文章

  1. Spring - 同一个类中的方法互相调用,注解失效问题的分析和解决(转)
  2. Web服务集成CRM的应用
  3. SQL SERVER 2005中如何获取日期(一个月的最后一日、一年的第一日等等)
  4. 前端返回的json中文变问号
  5. Linux性能分析工具与图形化方法
  6. Extjs 数据代理
  7. comparator 多个条件控制_JUnit5学习之四:按条件执行
  8. nginx 常用命令 保持启动 重载 开机启动等
  9. D3、EChart、HighChart绘图demol
  10. go导出mysql中的excel表,MySQL导出数据,并转存到Excel表格中
  11. 2021年全年详细工作日、周末、节假日数据表sql_excel
  12. 初学者如何快速入门深度学习?
  13. C++解决八数码问题
  14. Vue中级指南-02 如何在Vue项目使用富文本
  15. PDF转Word教程
  16. 最简单开启三星a6sUSB调试模式的方法
  17. Elasticsearch教程(19) 详解mapping之keyword
  18. java在regedit找不到_Windows找不到文件regedit打不开注册表的解决办法
  19. swing 鼠标事件
  20. linux系统深度评测,真国产,深度linux系统评测第二集

热门文章

  1. xp系统怎么关闭wmi服务器,WinXP系统如何启用WMI服务,小编教你WinXP系统如何启用WMI服务...
  2. 简单三步搭建电影网站 :排除MacCMS10登录故障 3-3
  3. 土方回填施工方案范本_土方回填施工方案.doc.docx
  4. 【生活】驾照C1-科三手册
  5. python调用函数出现未定义_python中函数调用中的“未定义”参数
  6. HTML CSS——层叠
  7. 在Web中使用jsmpeg.js低时延播放RTSP视频流(海康、大华)方案 - vue-jsmpeg-player
  8. 7.数据归档(Archiver)
  9. word文档中怎么输入公式符号
  10. 用户、角色和权限关系