00:00
嗯,好了各位,那我们继续往下进行,下边呢,咱们一块儿来看一下这个dolphin sc的核心架构啊,OK,那首先大家看一下这块是不是已经列出来了DS当中的一些核心的角色呀,对吧?OK,好,那咱接下来呢,就来看一看这些角色都有啥?呃,咱们这样看啊,我们从底下往上看,这么去看啊,来一个一个来,首先我们先看第一个,也就是UI。UI其实是啥呢?说白了就是user interface对吧?那这块指的其实就是我们这个系统的前端,看它是用来干什么的呀,其实非常简单,就是用来提供各种可视化操作界面的,哎,我前面讲过,刀分子在这是不是一个可视化的调度工具啊,对吧?我们几乎所有的操作都是在web页面上去完成的,所以说呢,这个UI是不是就用来给咱们提供这个可视化的操作界面的?没错吧,各位,好了,那这个其实相对比较简单啊,来,我们继续往上走,再来看倒数第二一个,也就是这个API接口层,OK,那这个API接口层它指的是什么呢?那其实非常简单,它就是用来处理我们这个前端的请求的。好,那继续往下走,那这儿呢,提到了一个alert服务,诶这个非常关键,那这个alert指的是什么呢?叫做告警,对吧?那它的作用就是提供告警相关服务,诶同学们,咱们先来分析分析这个告警指的是什么?
01:22
为什么这个调度工具它需要提供告警服务呢?诶,这个道理很简单,来大家想一想啊,首先咱们需要先明确一下,就是我们数据仓库当中的整个工作流程通常是在什么时候跑的。大家应该知道对吧,是不是通常是在晚上跑啊,对吧。能理解吧,各位,OK,为什么是在晚上跑呢?道理很简单,因为我们数仓每天计算的数据都是什么时候的,都是前一天的,对吧?能理解吧,OK,那你是不是必须得保证前一天的数据得完事之后咱们再做统一的处理,对不对?那前一天的数据什么时候能完事儿,什么时候能完事前一天的数据那不就是在,诶,比如说24点的时候才能完事嘛,对吧?那完了之后我是不是得到了24点之后才能计算前一天的数据,对吧?所以说通常我们离线出仓的计算任务都是在晚上去报的。
02:11
好,那你想一下同学们,你说咱们这些计算任务啊,你说他每天在执行的时候都是那么的顺利吗?都说一下就能成功吗。诶,其实不是这样的,对吧,是不是我们机群对吧,可能会有很多的突发情况对吧?比如说机资源不足对不对,比如说机器出现宕机的一个问题对吧,等等啊是不是都可能会导致啥都可能会导致我们这个任务是不是计算中途就失败了呀,对吧?那同学们想一想,如果这个计算任务对吧在中途失败了,那你想一想,你说他后边的任务还能继续往下跑吗?肯定是不能的,这是有依赖关系的,对吧,你这完不成,那你下边也没法跑啊对不对,好,那你想想,如果说那我们这个离线输仓的计算任务跑到一半了,对吧,但是你没有管它,你不知道,那你到了第二天,你说上班的时候,诶,你发现诶这个任务跑到一半失败了,你说我到了第二天我再恢复还来得及吗。
03:03
可能就来不及了,对吧,为啥,因为我们很可能我后边其他同事对吧,在等着你这块出结果呀。那那样同学们,OK,那你结果第二天上班之后,你才发现这个结果没算出来,你这时候再让他恢复,再让他去接着跑,那其实就来不及了,为啥?因为离线入仓的任务,我不是说一个小时俩小时就能跑完的,对吧,我可能需要很长时间,对不对,那这个可能就会耽误人家的使用,对吧?所以说同学们,那这会儿咱们得怎么做呢?你得做到这样的一点啊,就你这个计算任务对吧,中途失败之后,你得及时的去通知咱们这个相关的开发人员,对吧?好了,那你这个出问题了,你收到通知之后,你立马去给他修复,对吧,修复之后让他赶紧接着跑。啊是你得保证一个这样的时效性的一个问题,这个一定要注意啊,那所以说那这个告警服务对于我们这种调度工具而言,是不是非常重要的呀,对吧?诶你失败了,你就得赶紧报警啊是那所以说从这大家也能知道啊,就是我们做离线的,基本上你都是要去安排这个值班的啊是这样的,你这个组里边对吧,你比如说轮流去做对吧,你这周你值班,下周他值班,对不就晚上出了问题,你得赶紧起来修复。
04:10
这个大家应该是能够理解到的啊,行了,那完之后呢,我们继续往上走,上面呢,再来看一下这个组kper,呃,组kper它的这个作用其实非常简单,就是干啥呢?哎,其实大家都知道我们整个dolphin sctter它是一个什么,是一个分布式的,是可扩展的对吧?是能够自动容错的这样的一个这个调度工具能理解吧?OK,好,那我这个分布式对不对,那我是不是需要进行一些协调啊,对吧?OK,那由谁来协调的,就由组kper来进行协调。好了,那我们接下来呢,继续往上看,咱们看这俩,这个是我们刀分盖当中最为关键的两个角色,这两个非常重要啊,来咱们一个看,先看第一个master,它是干什么用的。首先这个里边提到了一个概念,说master呢,它采用的是无中心设计理念。什么叫做无中心?同学们。
05:01
所谓无中心,就是说OK,那我这几个角色,他们是完全平等的,没有主次之分,这叫无中心。啊,是这样的,OK,好,那我们这个master服务呢,其实采用的就是这种所谓的完全平等的无中心的这个设计理念,OK,在DS当中,Master呢,我们是可以配置多个的。能理解吧,OK,那这多个master OK,那他们呢,是能够同时工作的,能理解吧?诶是这样的,OK,好,那它跟我们这个,比如说HDFS那个name node它不一样,同学们大家都知道HDFS当中name node是不是咱们也可以配置多个呀,对吧?但是你那个name node它是无中心吗?不是name note,你甭管配一个对吧,工作的是不是只有一个,一个active对吧?另外的是不是都是stand对吧?那你这个是不是有主有次之分?能理解吧,OK啊好,那它不叫无中心,而master这边呢,人家是一个真正的无中心化设计,那我比如说我配置三个master,好,那我这三个master同时都是可以工作的。
06:06
能理解吧,诶这个大家要稍微的体会一下,来我们继续往下走,那master它主要是干什么的呢?来我们往后看,这已经说了啊,他说master呢,主要负责dag任务的切分,对不对,任务的提交,任务的监控。能理解吧,这是master它的一个主要的工作。好了,那我给大家简单的解释一下啊,这里边它具体做啥的,其实很简单,首先dag说白了就是就是一个一个的工作流,对,因为DS是不是就是用来调度工作流的呀,对吧?诶我道调度工作流了,OK,好,那master它负责的作用呢,就是诶拿到一个工作流之后,我要对这个工作流进行什么进行拆分,因为你整个工作流当中是不是包含了多个的任务啊,对吧?好,那它需要根据依赖关系呢,对这个任务呢,进行一个一个切分,好那切分完之后它要干啥呢?是不是得提交这个任务啊,对吧?好,我问一下大家,你说他把任务提交给谁?
07:01
其实想到不影响肯定是提交给worker吧,能理解吧,因为你看他的名字,你就知道worker应该是用来真正执行任务,真正干活的那个,对吧?那所以说这些任务呢,最终是会提交到worker去执行的,好了,那完之后呢,继续往下走,这个任务监控指的是什么?很简单,任务监控其实就是说这个意思啊,那你想一想,你要是使用一个调度工具去调度一个工作流的时候,你说你关心不关心我这个任务的执行进度?应该挺关心的,对吧,我可能时刻都想看到,OK,这个工作流执行到哪一步了,对吧?哪成功了,哪失败了,我可能时刻都想看到对不对?好,那所以说master这边呢,就提供了一个任务监控的功能,诶他会实时的去监控这个工作流到底执行到哪一步了,能解,然后呢,他会把这个执行进度反映在我们这个web UI上面,由我们能够实时的监控到这个任务的执行进度,好了,那这就是master他负责的主要工作,诶你会发现同学们啊,Master他其实对标的是谁。
08:02
或者是他负责的对象是谁。他负责的对象是工作流。能理解吧,Master呢,会负责一个工作流啊,能理解吧,OK,好,我们继续往下走,再看这个worker。沃ER是干什么的呢?刚才说了,沃ER其实说白了就是真正的执行任务的,对吧?能理解吧?OK,好,那玩它也是这种无中心的一个设计理念,也就是说你也可以配置多个worker,那多个worker之间也是完全平等的,能够同时工作的啊啊,那继续往下走,那worker说白了他干啥呢?哎,就是用来真正的去执行这个任务的,OK啊,好了,你会发现啊,那你想一想,Worker它对标的是谁?或者说他服务的对象是谁?Worker对标的,哎,或者说他服务的对象呢,实际上是一个一个的具体的任务,对吧?OK,同学们,我这儿提到了两个概念,一个呢叫做工作流,一个叫做任,呃,给大家明确一下,这看咱们达成一个共识啊,工作流指的是什么?是一个这样的从前到后的对吧,由多个任务组成的流程,这叫一个工作流。
09:06
能理解好,那我这个所谓的任务指的是什么呢?是你这个工作流的组成部分对吧?这都叫一个一个的任务,诶,这叫工作流,中间呢,这个叫做任务,这一点大家给他搞清楚啊,这样的好了,那master对标的是工作流,他负责的对象是工作流,而worker呢,它对标的是任务,能理解吧,它负责的是一个任务的具体执行,好了这一块儿大家一定要给他搞清楚,行了,那截止到现在呢,那这几个角色,那他们的一个基本介绍我就说完了,大家呢,应该对这几个角色有一个初步的认识了啊,但是说实话呢,咱们只是简单的把这些文字读一读,大家呢,可能对这些呃角色对吧,它的一个作用理解的不是那么的深刻,那所以接下来呢,咱们这样,我下面呢,有一个架构图,诶,我结合一个dophin sc对吧,它具体的工作流程啊,去给大家演示一下,那整个DS当中每个组件它的具体的作用是什么,来咱们一块来看一下啊,大家现在看到的呢,就是一个dolphin schedule的核心。
10:06
构图。然后大家可以看一下啊,就这里边是不是就已经涵盖了我们刚刚所讲到的DS的核心的角色呀,对吧,来一个一个看一下啊,那首先大家看到了这儿是不是有一个UI啊,对吧?诶,这是前端的操作界面对不对,那这个呢是什么?是API server,这是它后台的一个是不是接口啊对吧?好了,那接下来继续往下进行,那这个是什么?对,咱们看到了有master对不对,那这块是什么呢?是worker。然后呢,这个呢是组K,那这个呢是alert server,那其实除此之外呢,这还用到了关系型数据库database对不对,那这就是我们看到的DS的所有的角色,好,那咱们接下来呢,就来看一看这个DS这几个角色之间到底是如何进行,哎这个哎配合对吧,如何进行工作的,OK,好,那现在呢,我以一个这样的例子给大家去说明一下,一个什么例子呢?我们就以一个咱们使用dophin sc的一个流程。
11:01
就咱们怎么用它呀,正常用是不是就是定义工作流对吧,执行工作流对不对,我们以这样的一个例子对吧?哎去体会一下DS这些角色之间到底是如何,哎交互如何工作的,好了,那现在咱们就开始啊,比如说你现在想用DS对吧,去进行工作流的调度,你首先要干什么?首先我们是不是得在他的这个UI界面去干啥,去定义工作流啊,对吧,你得告诉他,OK,我这儿呢,工作流里边有哪些任务对不对,那这些任务之间有什么依赖关系,你是不是得把这些东西先声明了对吧?好,那这时候你就得在UI页面进行操作好,操作完之后呢。操作完之后,那你想想你需要干啥。你是不是需要去对它进行一个保存。对不对,你工作定义完之后,你得保存啊,对吧?好,那保存的时候怎么做呢?肯定是这么去做啊,是不是肯定是你UI对吧?前端把这个你的配置信息对不对,通过一个请求发送到哪,发送到我的接口啊,对吧?能理解发到API serve这个接口层对吧?那发给他之后谁再去把信息存到数据库里边呢?是不是肯定是由API接口层把数据存到这个数据库当中啊,对吧?我这里边提到的工作流源数据指的就是啥?指的就是咱们工作流对吧?有哪些任务,这些任务之间的依赖关系是什么?诶就是这些信息OK,它会保存在数据库里边。
12:19
好了,那现在这个工作流是不是就已经来到了数据库当中了?好,那我们继续往下进行统计,那你说接下来咱们要干啥?接下来你是不是得配置定时对吧?好,配完定时之后,到点之后,那你说这个得得干啥,到点之后这个工作流是不是就得开始跑了呀,对吧?能理解吧,同学们,OK,好,那我现在问一下大家,你说这个工作流开始跑对不对?哎,这个到点了对吧?已经要开始跑了对吧?那谁去负责这个工作流的执行呢?对吧,到点之后谁去负责这个工作流的执行呢?谁呀,是不是由master负责呀,对吧?前面讲过master server的服务对象,那就是工作流嘛,能理解吧?OK,那到点了之后要执行的工作流,那肯定是由master去负责这个工作流来执行的,好,那我现在的问题是什么啊?
13:07
Master咱这是配了多个呀,对吧,而且这多个master是什么,是所谓的无中心化的一个设计思想,对不对,也就是他们之间是完全平等的,那也就是什么呢?也就是说是不是我这多个master理论上都可以怎么做都可以去负责这个工作流吧,因为他说是平等的嘛,对吧?好了,那现在咱们的问题是什么呢?我这儿来了一个工作流,那到底由谁来负责这个工作流的执行呢?对吧,到点了对吧,到底由谁来负责这个工作流的执行呢?谁来负责,诶让他负责,哎让他负责,让他负责这个合适吗?都不合适,对吧,为啥,因为你这就不叫无不叫平等了,对吧,你就不叫无中心化了,对不对?OK,谁负责,这个怎么决定。诶,最合理最公平的方式,大家说应该是什么?是不是应该是让这几个master他们去抢啊,对吧,能解吧,谁抢到算谁的,这是是不是就是平等的呢?对吧,好了,OK,那这边他们具体是怎么做的,实际上这样的,你会发现每个master所当中都会有一个扫描线程。
14:12
啊OK,他会定时的去扫描这个数据库当中有没有需要执行的工作流,那如果那他们发现了一个,诶需要执行的工作流了,对吧,到点了对吧,哎,需要执OK,那诶谁抢到那就算谁的。OK,那这就是一个所谓的哎,无中心化的一个设计啊,这一点呢,大家稍微的体会一下就行了啊是这样的啊好了,那假如说我现在呢,有一个master对不对,那OK,那他接收到这个呃任务了,或者他抢到一个这个工作流了,对吧?OK,那接下来需要干啥呢?是不是就可以去干啥呀,去切分这个工作流来对吧?好,他需要把工作流切成一个具体的任务对吧,一个一个具体的任务,然后这个任务给谁说将来需要下发到这个worker去执行了,对吧?好了,那现在那假如说已经拿到工作流了啊,然后呢,已经抢到呃工里了,然后呢,对这个任务已经切分好了对吧?切好之后需要干啥呢?是不是就得去提交任务了对吧?OK,他会把这个任务呢,分发到这个多个worker去执行。
15:12
OK,好,那worker接收到任务之后呢,他需要先给咱们这个master一个AC,对吧?能理解吧,先给master c卡表示表示我已经接收到了,好,接收到之后呢,那worker现在就可以干啥了,诶,就可以,哎,真正的去执行这些任务了,你会发现下边我这列出来的是什么啊,是DS所支持的任务类型,诶你看它支持的任务类型其实非常丰富啊,有什么?有shell脚本对吧,有一个单独的circle语句,诶map任务,SPA任务,Link任务这些它都是支持的,当然除此之外还有很多的其他的一些任务啊,他也都是支持的。支持任务类型可以说是非常非常的丰富啊,好了,那完之后我们继续往下进行啊,那我们这个worker呢,对吧,他在执行完这些任务之后呢,他会怎么样呢?他会向我们的master呢,来时刻的报告自己的进度,能有我现在完成到哪一步了,对吧?我哪步成功了,哪步失败了,其实都会反馈给这个master server能理吧?好,那你想一想master server之后,接收到这个反馈信息之后,你说他会怎么做?
16:12
诶很简单,他会把这个任务的执行进度对吧?每个任务的执行状态会给他存到数据库当中,好,那你想一想,是不是只要存到数据库里边之后,那我们就能干干啥了,我们是不是能在UI界面对吧,去查看这些任务的这个执行进度来,对吧?它怎么做呢?很简单,你在这儿,比如说我点击这个任务的这个执行进度,诶那个页面对不对,然后呢,是不是会给后台发送相应的请求,那完之后呢,APS serve是不是会去请求我们这个相应的任务的执行状态啊对吧?之后是不是就能在UI页面给咱们呈现这个任务的执行进度了,对不对,它是这样的一个流程啊好了,那这就是我们,诶这个,呃,一个基本上比较完整的使用流程了。啊,是这样的啊,好了,那我们再继续往下进行。然后大家稍微的注意一下啊,就是你会发现啊,我们这个每个worker server对吧,是不是下边都跟着一个log server对吧?好,那这个log server是干什么的?很简单,Log server是用来提供任务的执行日志的,好大家想想,你说我们这个DS调度工作流的时候,是不是有可能会出现比如说某个任务执行失败了,对吧?注意啊,我现在再说任务,再说任务,大家要把这个任务当做一个特殊的概念去对待啊,任务指的是什么?指的是这个工作流当中的一个任务。
17:32
能理解吧,指的是工作流里边的一个步骤,相当于是这是我这个任务的特殊含义啊,我现在再说任务指的就是它啊,是这样的,好了,那我们继续往下进行,那你说我们执行工作流的时候,是不是某个任务可能会失败啊,对吧?好了,那你想想,你说失败之后咱们肯定得干啥,你肯定得排错吧,对吧,怎么排错,是不是看日志能理解吧,那理论上这个日志咱们去哪儿看同学们。任务在哪执行,日志是不是就得去哪看呀,对不对,任务在哪执行,任务正常是不是得在worker执行啊,对吧,好了,但是你要知道,那我这个worker是不是有多个呀,对吧,那我每个任务在哪个worker执行,这是不是不是固定的呀,对吧?他在哪个worker执行的可能都有。
18:12
是这个道理吧,那所以说我要想去看日志,那我要去worker这边看,那是不是相对比较麻烦呀,对吧,那所以在这儿呢,Worker这边他给咱们提供了一个什么呢?提供了一个日志服务。能理解吧,OK,你不管想看哪个任务的日志,你都能怎么做呢?都能够在UI页面上面去查看,能理解吧,OK,那完了之后他会自己去调用API server,这个API呢,会自己去请求相应的work上面的日志服务,能理吧,你你不管想看哪个任务对吧?哎,他都会自己去根据你这个任务执行的节点去找到相应的日志给咱们呈现在UI页面上。一会我们这个DS这边呢,咱们查看日志也是非常方便的,都在UI页面查看就行了,哎,特别方便啊,好了,那我们继续往下进行。这个玩意儿之后呢,现在就只剩下这个alert server的作用,对吧,那它的作用前面讲过,那它能干啥呀,它是不是能够去进行这个告警啊,对吧,那出错之后呢,它会把这个呃告警信息保存在数据库里边,同时呢,会给我们外界发送这个告警信息。
19:14
是这样的,好了,那这就是DS它的一个核心的架构,那其实那这整个核心架构咱们看完之后呢,主K的作用咱们没有过多的去说,对吧,那现在咱们简单的说一下啊,同学们,我们来看一看,往上走往上走。他说了啊,那系统中的master server worker server呢,是不是都会通过这个组K来进行,诶集群的管理和容错呀,对吧,你想啊,那每个master,每个worker它都是什么,都是多个对不对。能能能理解吧,各位OK啊好了,那完之后他们在启动之后呢,都会向诶这个组K进行注册,能理解吧?诶那我组开这个节点上面有你就能说明你现在运行的是正常的,对吧?那如果没有你呢,说明你这个节点已经挂掉,那里也就是说是不是组K上面能够反映出来我这些worker对不对,他们是不是执行的他们运行的一个状态啊对吧,你在就说明你是OK的,你不在了,那说明你挂了对不对,OK,好,那既然它能够实现这样的一个功能,那所以说我们的master worker是不是就可以借助它去进行集群的管理和容错了,对吧,我就知道谁挂了谁没挂对不对,是这样的啊好了,那同时大家注意观察,咱们这还有这样的一句话。
20:21
什么话?他说master呢?他会去监控其他的master和worker的健康状态,OK,好,那我们来分析分析他为什么要去做这个监控啊,来,我们还是老规矩,把这个图打开,咱们照着图说一下啊。稍微等一下来,同学们你分析分析,你说为什么master他会去监控其他的master和worker的状态,当时他怎么监控的?同学们肯定是借助组kper监控的,对吧?是这个道理吧?同学们,每个master是不是都可以访问主K班,都可以看到这个注册的节点?能理解吧,他是通过组K去监控其他master和其他worker的状态,你说为什么他要监控啊?
21:00
这个是为了干啥?很简单,其实是为了容错。是这个道理吧,什么意思?你比如举例子啊,我这个master对吧,那我在这是不是有多个对不对?OK,那你想想,假如说其中一个master挂了。能理解吧,那那你说我这应该怎么做呢。我这个挂了之后,是不是其他的master得去接手他的工作才行啊,对吧,因为每个master是不是都可能会负责一部分的工作流。没吧,哎,是这,那你挂了之后,别的另外的master得去尝试的接手他的工作才行,对吧?好了,那怎么去接手呢?很简单,那所有的master对吧,都实时的监控着其他的master的一个健康状态,只要有一个挂了,那另外诶两个master是不是就可以去接手他的工作了,对吧?那由谁去接手他的工作呢?那其实还是一个先到先得的一个啊这样的一个工作机制,对吧?那谁先抢到这个master的工作对吧,那谁就负责。是这样的啊,OK,好,那同时那你想想,你说master监控worker的这个健康状态,它的作用是什么呢?那worker是不是也可能会挂呀,对吧,Worker挂了之后,那我这个master就会将比如说诶这个worker上面的任务是不是转移到其他worker去执行啊。
22:09
对不对,是这样的一个逻辑啊,这块大家稍微体会一下就行了,也就是说组kper其实主要是为了进行这个,呃,这个集群管理,对吧,或者说辅助我们的master去完成这个,呃,集群的这个容错的对不对,那这就是组K的一个核心的作用啊,行了,同学们,那截止到现在DS的核心架构,诶,我们就说完了。
我来说两句