Apache DolphinScheduler分布式易扩展的可视化DAG工作流调度系统

本次分享涵盖如下6个主题:

  • Apache DolphinScheduler用户及社区现状
  • Master/Slave架构
  • 去中心化架构设计
  • NIO框架Netty问世
  • 容错设计
  • 未来架构规划
展开查看详情

1.Apache DolphinScheduler -分布式易扩展的可视化DAG工作流调度系统 本产品保密并受到版权法保护 Confidential and Protected by Copyright Laws

2. 自我介绍 乔占卫( journey) 现任易观大数据平台技术专家,Apache DolphinScheduler PPMC。 DolphinScheduler核心开发者之一。经历 了DolphinScheduler从0到1的开发、开源及贡献给Apache孵化器的整个历程。 2020-7-28 数据驱动精益成长 2

3. 目录 CONTENTS 01 用户及社区现状 02 Master/Slave架构 03 去中心化架构设计 04 NIO框架Netty问世 05 容错设计 06 未来架构规划 2020-7-28 数据驱动精益成长 3

4. PART 1 用户及社区现状 2020-7-28 数据驱动精益成长 4

5. DolphinScheduler 部分用户案例(排名不分先后) 2020-7-28 数据驱动精益成长 5

6. DolphinScheduler 社区情况 易观 头条 阿里 腾讯 京东 滴滴 华为 平安 360 小米 陌陌 观远 多点 同程 中移动 趣加 荔枝 贡献者分布 2020-7-28 数据驱动精益成长 6

7. PART 2 Master/Slave架构 2020-7-28 数据驱动精益成长 7

8. 经典的Master/Slave架构 2020-7-28 数据驱动精益成长 8

9. 经典Master/Slave架构的问题? 1,Master单点问题 ? 2,DAG切分在Master OR Slave ? 第一个问题:可以借鉴HDFS NameNode HA架构设计,引入 Zookeeper通过Active Master选举 第二个问题:如果DAG在Master切分,则一个流程是一个DAG,一 个DAG占用一个线程,单Master流程并发会有问题 如果DAG在Slave切分,则预示着一个DAG的所有的任务只能在一台 Slave上进行提交 声明:Master/Slave架构并不是不能解决这些问题,比如说Spark standalone,就是Master/Slave架构,一样有DAG的Stage划分, 架构过于复杂 2020-7-28 数据驱动精益成长 9

10. PART 3 去中心化架构设计 2020-7-28 数据驱动精益成长 10

11. 去中心化 去中心化,不是不要中心,而是由节点来自由选择中心、自由决定 中心。简单地说,中心化的意思,是中心决定节点。节点必须依赖 中心,节点离开了中心就无法生存。在去中心化系统中,任何人都 是一个节点,任何人也都可以成为一个中心。任何中心都不是永久 的,而是阶段性的,任何中心对节点都不具有强制性 比如 Eureka(Peer to Peer架构)、Zookeeper(Leader选举) 2020-7-28 数据驱动精益成长 11

12. DolphinScheduler最初架构 2020-7-28 数据驱动精益成长 12

13. 引入Zookeeper Zookeeper常用功能: 1,服务注册中心,临时节点 2,元数据管理,持久化节点 3,Watcher监听回调,Curator 4,分布式锁(Master选举) 2020-7-28 数据驱动精益成长 13

14. 引入Zookeeper 2020-7-28 数据驱动精益成长 14

15. 最初架构的问题? 优点: 1,Peer to Peer 架构 2,只有DB和Zookeeper的网络通信,基础架构稳定 缺点: 1,任务高延迟,Zookeeper作为Master/Worker通信队列,不适 合实时写 2,实时查询DB,数据库压力大 3,分布式锁,如果有较多的客户端频繁的申请加锁、释放锁,对于 ZK 集群的压力会比较大 2020-7-28 数据驱动精益成长 15

16. PART 4 NIO框架Netty问世 2020-7-28 数据驱动精益成长 16

17. Netty线程模型 优化点: Netty默认就是一个IO线程 无锁串行化处理各个客户端 的请求,处理完一个返回了 响应,再处理下一个请求 Processor线程中再加一层 Handler线程池。将Netty Server的两层线程模型修 改为三层线程模型 2020-7-28 数据驱动精益成长 17

18. 1.3.x架构改进 2020-7-28 数据驱动精益成长 18

19. 1.3.x 主流程活动图 2020-7-28 数据驱动精益成长 19

20. PART 5 容错设计 2020-7-28 数据驱动精益成长 20

21. Master容错 注意: Master容错就是容流程 DAG,让宕机MasterB上 的流程DAG转移到其他机 器上 2020-7-28 数据驱动精益成长 21

22. Worker容错 注意: Worker容错主要是是kill任 务,任务在其他机器上重新 提交 2020-7-28 数据驱动精益成长 22

23. PART 6 未来架构规划 2020-7-28 数据驱动精益成长 23

24. Master线程模型 2020-7-28 数据驱动精益成长 24

25. Api通信Master,Master/Worker通信Alert 注意: 1,Alert SPI插件化告警,正在做 2,Alert作为一个服务,Master需要告警,调用 Alert服务,可选择消息直接发送过去,或者比如 说要发送数据量的信息,预将信息放到一个共享存 储位置,比如说HDFS,然后Alert模块再根据存储 数据路径告警 2020-7-28 数据驱动精益成长 25

26. 容错 Zookeeper 在工程实践的过程中经常会发生的一个现象就是 Zookeeper 客户端”假死”,所谓的”假死”是指如果 Zookeeper 客户端机器负载过高或者正在进行 JVM Full GC, 那么可能会导致 Zookeeper 客户端到 Zookeeper 服务端的心 跳不能正常发出,一旦这个时间持续较长,超过了配置的 Zookeeper Session Timeout 参数的话,Zookeeper 服务端就 会认为客户端的 session 已经过期从而将客户端的 Session 关 闭。”假死”有可能引起分布式系统常说的双主或脑裂 (brain- split) 现象。 2020-7-28 数据驱动精益成长 26

Apache DolphinScheduler(原EasyScheduler)是一个分布式工作流任务调度系统,主要解决错综复杂的依赖关系,而不能直观监控任务健康状态等问题。同类作品有oozie、Azkaban等,欢迎对比,哈哈