Home

DolphinScheduler-4: 工作流的启动

如果要设计一套 Master-Worker 架构的任务调度系统,Master 的复杂度无疑更高一些。因为 Master 相当于系统的“大脑”,从宏观上管理着任务调度的准确性和稳定性。其中核心又在于需要准确的管理工作流的状态以及调度下一步的行为。 在了解 DolphinScheduler 的实现之前,我们不妨先思考几个任务调度的问题: 分布式的常见问题,例如如何避免同一个任务被不同 Master 实例分别启动?或者都没有启动任务? 工作流实例是由多个任务实例的 DAG 组成,先启动哪个?什么时候启动下一个? 任务应该发送到哪个 Worker 执行?发送 Worker 超时或者失败怎么处理,重试还是发送到其他 Worker? Worker 需要分组么?有什么好处? ...

Read more

DolphinScheduler-3: 工作流的生命周期

1. 任务状态 任务调度系统里,任务状态管理对准确性和可靠性至关重要。 准确性无需多言,例如工作流实例应该在何时初始化、DAG的算子应当是 WAIT(上游算子尚未完成) 还是 RUNNING(上游全部算子完成) 状态、工作流实例是否可以更新为 SUCCESS 状态。 可靠性主要是针对各种异常状态的管理:例如任务的容错、任务的重试。 在 Apache DolphinScheduler 的具体实现里,对于任务状态有明确的枚举值,状态之间的转换遵循固定规则。代码里也有类似 Trigger/Event/Action 等的概念,因此按照状态机的模型去阅读事半功倍。 2. DolphinScheduler里的任务状态 理论上,任务的状态有提交、运行、成功、失败等。 实际状态...

Read more

DolphinScheduler-2: 日志

1. 日志的作用 对架构RD而言,对模块的了解不应当仅仅局限于正常流程本身,而是能够分析各种异常场景,提前添加对应的日志和Metrics等信息。例如日志的格式、位置,日志级别能否Change on-the-fly等,目的是能够通过日志分析流量、追查问题。 日志有两种: write-ahead logging,例如leveldb笔记之2:日志 diagnostic logs,例如glog源码解析一:整体结构 这篇笔记想要谈的是第2种。 任务调度系统除了模块自身的日志,还需要打印不同任务的日志,日志互不影响。 举个例子,ds-worker 模块日志有两个appender: WORKERLOGFILE、TASKLOGFILE. WORKERLOGFILE 负责输...

Read more

DolphinScheduler-1: Master、Worker的线程模型

Master、Worker是DolphinScheduler最重要的两个模块,Master负责任务的调度,Worker负责任务的执行。 DolphinScheduler 官网的这张图概括了整体的流程: 注:图片基于V1.3.0,跟当前略有出入 1. 线程模型 任务提交过程中,使用到了众多线程,其中最重要的单线程、线程池,如图所示: DolphinScheduler 的线程模型总的来说: 串联了多个生产者-消费者,队列使用内存队列 线程定义了独立的名字区分 Master-Worker 之间通过 Netty 通信 2. Master线程模型 定时调度的处理入口类是class MasterSchedulerBootstrap extends BaseDaemo...

Read more

意识并且利用自己的专注力-读《为什么精英都是时间控》

与其他时间管理的书不同的是,作者是一名神经科医生,对列举的时间管理方法会有一些激素上的介绍,比如脑源性神经营养因子、多巴胺、血清素等。 以下是我读完这本书之后的一点想法: 一天之计在于晨,早上是专注力最高的时间,应当用来做一些专注性工作,比如创作、阅读、方案制定等;作者身边的很多日本人都是早上先喝茶看报纸、看电子邮件等,我意识到自己早上到了公司也是先会看看帖子、新闻,需要改正。 作者身边的很多美国人认为5点之后应当是和家人度过的美好时光,晚上和家人共进晚餐,所以工作时间里要拼命工作,好在5点之前把工作完成,这是美国人习以为常的工作方式。 杂念是专注力的天敌,解决办法就是把杂念记下来,这样头脑中再闪现出相关杂念的时候,只要看一眼自己写的“工作安排”,杂念就会立刻消失,人...

Read more

原来这就是贝叶斯统计-读《统计学关我什么事》

1. 说得清楚 这是一本科普贝叶斯统计学的书,我一直觉得这类书籍很难写。正如我在博客about里写的:“从以为自己了解到能够给别人讲清楚,还有很长的一段距离。”,当能够表的足够清楚,给大部分人都能讲明白的时候,说明是从各个角度都已经完全理解了。 2. 贝叶斯统计 关于统计学,上学时我们最开始学习的是概率,刚开始的概念还比较容易理解,比如从壶里取一个球,根据已知条件判断球的各种的颜色概率。 不过往后就开始学习“概率的概率”,比如取出白球可能有多种概率:0.1、0.2、…、1.0,不同概率的概率是多少?这块就就有点绕了。理论上可以继续说“概率的概率的概率”,直到大脑处理不了更深的堆栈。 这个有点像如果你能预测五分钟后会发生什么,那么你就能预测“你预测五分钟后会发生什么”,理论上你...

Read more

不算笔记的笔记-读《品人录》

《万历十五年》里,黄仁宇先生讲了六个人:朱翊钧、张居正、申时行、海瑞、戚继光、李贽。 《大明王朝的七张面孔》里,张宏杰先生讲了七个人:朱元璋、朱棣、海瑞、魏忠贤、张献忠、吴三桂、郑成功。 前两本的时间还只在明朝,到了《品人录》,时间跨越更大,从汉到清,易中天先生却只选了五个人: 哪五个人?为什么是这五个人?有什么共同点么?为什么都有海瑞? 我觉得历史是个很有意思的东西,你去研究或者评价历史上的某个人,前提是这个人“有记可循”。是皇家正史也好,是稗官野史也罢, 所以历史上值得记录的往往是重要的人或事,大的如二十四史,小的如《丝绢全书》(见《显微镜下的大明》)。 你不可能凭空杜撰出来历史,但是你现在读到的历史却可能是杜撰出来的,真伪难辨。 有时候历史学家的重任是分辨历史,有时...

Read more

如何读史-读《史记的读法》

之前读《万历十五年》时,印象最深刻的一句话是: “但是用视而不见的态度抹去遮盖这些事实,就是不忠实于历史;对一个英雄人物隐恶扬善,也并不是真正的推崇。” 这段话说的是戚继光,历史课本里,我们记住的是「抗倭名将」、「民族英雄」,我们需要回答的是戚继光抗倭有什么历史意义,是什么性质的战争。 然而课本里没有告诉我们的,是戚继光的晚年凄凉、英雄末路,是曾重金购买美女送给张居正、想吃煮猪头了从百里之外走马传至。 当然,这并不影响戚继光成为一个伟大的将领,反而让人觉得更加的真实,放到当时的历史环境下,这么做一点都不奇怪。这大概也是“戚继光-孤独的将领”,那一章题目的由来。 如果之前读《史记》总是读不下去,《史记的读法》这本书会非常合适,我觉得这本书像是在讲如何读史记,又像是在讲如何读历史,...

Read more