DolphinScheduler1.3.2源码分析(一)看源码前先把疑问列出来
1.谈谈如何看源码
个人觉得拿到一个开源的项目,首先要先使用一下。
如果是有页面的那种,可以先把测试平台部署起来,然后到处随意点点,然后用一下最基础的功能,走一遍基础的使用流程。不用担心会把系统弄坏,弄坏了说明没有配置好或者本身代码有bug,这时候可以尝试先自己解决一下,如果能解决是好的,如果不能解决,那就更好了,因为这个时候会激发出你的好奇心,好奇心会驱使你有更浓厚的兴趣去研究源码。
如果是没有页面的,比如服务器软件或者中间件等,那么也是先使用一下这个软件最基础的功能。
对这个软件有一些了解之后,我们就可以开始自己想想,如果是自己去实现这个软件的某个功能点,比如调度系统举例的话,调度系统是怎么拉起linux进程来执行程序的,执行完成程序后是如何获取结果和执行过程中的日志的。这些都可以自己想一想,想的时间越长,你会越好奇这个软件是怎么实现的。这个时候其实你就有了一个切入点,有个切入点去看代码,就像在一个陌生城市行走突然有了地图一样。你会把不相干的代码暂时跳过,只看对解决我当前的疑问有帮助的那些代码。这时候,一个有上千个文件的工程此时与你相关的就变成数十个了,你只需通过这个切入点来看明白这数十个对解决你当前疑惑有直接帮助的源代码文件就好了。
2.谈谈对DolphinScheduler平台的一些疑惑
最开始使用这个平台时候,我相信很多人和我一样,会先建立一个项目,然后拉一个最简单的shell节点先执行一下。执行成功后会生成一个成功的运行实例。实例点开是能看到此次执行的日志的。
就这么简单的一个流程,我就比较好奇在几个点:
1 )这个调度平台是怎么拉起一个linux进程的?
2 )这个调度平台如何获取执行的结果和日志的?
3 )这个调度平台的前后台是如何交互的?前台的一个shell节点存储在数据库是怎么样的一个结构。
4 )如果有很多的依赖,是如何存储和解决这些依赖的?
5 )这个号称分布式的调度系统,是如何保证高可用的?
以上这些是我最初的时候想到的一些疑惑,所以我就决定带着这些疑惑,作为一个个切入点,去解决掉,并要求自己一定要写为每个问题写一篇文章记录一下揭秘的过程。因为我相信我现在走的路,很多后来的人都会再走一遍,如果有走过的人写一下记录一下,应该会好很多吧。我们后边见~~~
DolphinScheduler1.3.2源码分析(一)看源码前先把疑问列出来的更多相关文章
- [源码分析] 从实例和源码入手看 Flink 之广播 Broadcast
[源码分析] 从实例和源码入手看 Flink 之广播 Broadcast 0x00 摘要 本文将通过源码分析和实例讲解,带领大家熟悉Flink的广播变量机制. 0x01 业务需求 1. 场景需求 对黑 ...
- NIO 源码分析(05) Channel 源码分析
目录 一.Channel 类图 二.begin 和 close 是什么 2.1 AbstractInterruptibleChannel 中的 begin 和 close 2.2 Selector 中 ...
- NIO 源码分析(02-1) BIO 源码分析
目录 一.BIO 最简使用姿势 二.ServerSocket 源码分析 2.1 相关类图 2.2 主要属性 2.3 构造函数 2.4 bind 方法 2.5 accept 方法 2.6 总结 NIO ...
- Spring Ioc源码分析系列--Ioc源码入口分析
Spring Ioc源码分析系列--Ioc源码入口分析 本系列文章代码基于Spring Framework 5.2.x 前言 上一篇文章Spring Ioc源码分析系列--Ioc的基础知识准备介绍了I ...
- k8s client-go源码分析 informer源码分析(3)-Reflector源码分析
k8s client-go源码分析 informer源码分析(3)-Reflector源码分析 1.Reflector概述 Reflector从kube-apiserver中list&watc ...
- NIO 源码分析(02-2) BIO 源码分析 Socket
目录 一.BIO 最简使用姿势 二.connect 方法 2.1 Socket.connect 方法 2.2 AbstractPlainSocketImpl.connect 方法 2.3 DualSt ...
- drf的基本使用、APIView源码分析和CBV源码拓展
cbv源码拓展 扩展,如果我在Book视图类中重写dispatch方法 -可以实现,在get,post方法执行之前或者之后执行代码,完成类似装饰器的效果 def dispatch(self, requ ...
- HashMap源码分析(二):看完彻底了解HashMap
上文讲到HashMap的增加方法,现在继续 上文链接 HashMap在上一篇源码分析的文章中,如果使用put的时候如果元素数量超过threshold就会调用resize进行扩容 1.扩容机制 想要了解 ...
- jQuery1.11源码分析(1)-----Sizzle源码概览[原创]
最近在啃jQuery1.11源码,上来就遇到Sizzle这个jQuery的大核心,虽然已经清楚了Sizzle的用途,先绕过去也没事,但明知山有虎偏向虎山行才是我们要做的. 本文面向的阅读对象:正在学习 ...
随机推荐
- linux awk基本语法命令总结
一.基本用法 文本内容准备 2 this is a test 3 Are you like awk This's a test 10 There are orange,apple,mongo 用法一: ...
- go语言实现99乘法表
Go语言学习笔记(99乘法表)-day01 通过for循环实现99乘法表 预期效果 源代码 for x :=1;x<10;x++{ for y :=1;x>=y;y++{ fmt.Prin ...
- Java高并发与多线程(一)-----概念
其实之前一直想专门写一篇,单独说一说Java的多线程与高并发,但是一直以来,都没有想到能够用什么比较有趣的表现形式去表达出来,而且网上充斥着很多类似的博客,有好的又不好的,有简介的有繁琐的,所以也一直 ...
- Socket粘包问题终极解决方案—Netty版(2W字)!
上一篇我们讲了<Socket粘包问题的3种解决方案>,但没想到评论区竟然炸了.介于大家的热情讨论,以及不同的反馈意见,本文就来做一个扩展和延伸,试图找到问题的最优解,以及消息通讯的最优解决 ...
- 【Flutter】容器类组件之Scaffold、TabBar、底部导航
前言 一个完整的路由页可能会包含导航栏.抽屉菜单(Drawer)以及底部Tab导航菜单等.Flutter Material组件库提供了一些现成的组件来减少开发任务.Scaffold是一个路由页的骨架, ...
- python学习笔记 | 顺序表的常规操作
''' @author: 人人都爱小雀斑 @time: 2020/3/11 8:46 @desc: 顺序表的相关操作 ''' class SequenceList: def __init__(self ...
- 【EXPDP/IMPDP】数据泵导入导出遇到目录没有权限问题
当执行数据泵导出的时候,报了如下错误: ORA-39002: invalid operation ORA-39070: Unable to open the log file. ORA-39087: ...
- eCATT使用前的配置
如果想在SAP中使用eCATT,必须做一下相关的配置才行,下面简单介绍这几步:1.SM30,输入表T000,然后点击维护,或者是进入事物SCC4,进入对应的clint属性编辑视图下,将CATT and ...
- SAP 修改表和表中数据
平时修改表中数据的方式有一下几种: 1.一般就是通过SE11或者是SE16进去,找到那条记录,然后将模式变成EDIT,然后修改保存. 2.通过SQL语句在程序中实现数据库表的修改操作 3.通过SE16 ...
- centos7安装docker、docker-compose、es7.3.0、kibana7.3.0
一.安装docker 1.更新yum包 sudo yum update 2.卸载旧版本(如果安装过旧版本的话) sudo yum remove docker docker-common docker- ...