T 摘要 ·

本文通过介绍DolphinScheduler on Kubernetes 在优路科技的实践,阐述了DolphinScheduler如何在云原生时代,更好地助力企业实现高效的数据调度解决方案。

讲师介绍

李文禾,重庆优路科技书香事业部大数据组及创新组负责人 & Apache DolphinScheduler Committer,文禾也是 DolphinScheduler 对 K8s 实现的主要作者。

10 月 24 日的易观A10数据智能峰会 - 开发者日上,来自优路科技的李文禾同学带来了题为《DolphinScheduler & K8s 在优路科技的实践》的分享。以下是分享视频:

1

前言

关于优路

重庆优路科技有限公司成立于2010年,以建设移动互联网科技创业加速器为突破,夯实互联网科技发展基础;以增强孵化能力为重点,打造一个全新的平台。重庆优路延伸的公司主要有重庆可兰达科技有限公司、重庆优启科技有限公司、重庆市九吨科技有限公司等互联网创新型公司。

关于产品

想必大家可能对优路科技的产品没那么熟悉,但优路旗下有App Store日历类排名第一、几亿人在用的万年历黄历等APP,您的手机上是否也装有这款黄历APP呢?

2

 介绍Kubernetes

Kubernetes是什么

Kubernetes 是一个开源项目,用于统一管理容器化的应用集群。

Kubernetes 负责在大规模服务器环境中管理容器组(Pod)的扩展、复制、健康,并解决 Pod 的启动、负载均衡等问题。

Kubernetes 最初是 Google 发布的,现在已经被多家大公司支持,例如 Microsoft, RedHat, IBM, Docker。

Kubernetes的架构

Kubernetes集群中有2种角色:

1、一个是 Master 作为集群的管理节点,负责管理集群,提供集群的资源数据访问入口

a)、API Server 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制;

b)、Controller Manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;

c)、Scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上,同时 etcd 保存了整个集群的状态;

2、一个是 Node 用来承载被分配 Pod 的运行,是 Pod 运行的宿主机

a)、Kubelet 负责维护容器的生命周期,同时也负责 Volume 和 Network 的管理;

b)、Container Runtime 负责镜像管理以及 Pod 和容器的真正运行时 Kube-Proxy 负责为 Service 提供 Cluster 内部的服务发现和负载均衡

Kubernetes的特点

Kubernetes的应用场景

1、持续集成及自动化部署

系统会自动构建、测试并准备代码变更,以便将其发布到指定环境的过程,包括开发环境、预发布环境、生产环境等。自动化部署解决了手动部署既慢又容易出错,并且无法跟上部署环境中不断增加的部署目标数量。

2、应用微服务化

随着业务的发展,许多应用中有很多相同业务逻辑的重复代码,且单个应用为了给其他应用提供接口,增加了很多不属于该应用的逻辑,导致应用边界模糊,功能归属混乱。因此出现开发、测试、部署、维护愈发困难。

由于我司技术栈不统一,采用微服务(Microservices)进行改造将面临一些问题:

1、开发人员要处理分布式系统的复杂性;

2、服务之间的分布式通信问题;

3、服务的注册与发现问题;

4、服务之间的分布式事务问题;

5、服务管理的复杂性,服务的编排;

Istio是一个用于连接/管理以及安全化微服务的开放平台,提供了一种简单的方式用于创建微服务网络,并提供负载均衡、服务间认证以及监控等能力,并且关键的一点是并不需要修改服务本身就可以实现上述功能

Istio主要提供以下功能:

1、流量管理:控制服务之间调用的流量和API调用,使得调用更可靠,并使网络在恶劣情况下更加健壮;

2、可观察性:获取服务之间的依赖,以及服务调用的流量走向,从而提供快速识别问题的能力;

3、策略执行:控制服务的访问策略,不需要改动服务本身;

4、服务身份和安全:为网格中的服务提供可验证身份,并提供保护服务流量的能力,使其可以在不同可信度的网络上流转等

3

介绍DolphinScheduler

DolphinScheduler是什么

Apache DolphinScheduler是一个分布式去中心化,易扩展的可视化DAG工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用

DolphinScheduler的架构

DolphinScheduler的特点

DolphinScheduler的应用场景

1、数据同步

业务早期的时,没有复杂的数据统计与分析,可以在数据库中进行数据查询及统计来,或者借助于第三方平台。随着业务的增长,数据库压力越来越大,况且常规 OLTP 数据库并不适合做数据分析,因此需要自建 OLAP 数据库,如:ClickHouse 。当接入的数据库越来越来多,各个数据库中的数据需要相互依赖,那么需要把依赖的数据进行数据同步。

数据同步的几种方式:

1)基于数据库日志的数据同步

2)基于Sqoop的数据同步

3)基于Datax的数据同步

4)基于Databus的数据同步

5)基于Gobblin的数据同步

6)基于FlinkX的数据同步

7)基于Apache NIFI的数据同步

8)基于StreamSets的数据同步

考虑到以上这些工具要么活跃度不高且关注的人数不是很多,要么太重量级了,要么都缺少监控和任务配置调度管理。因此结合公司的具体情况,再加上对实时的需求量不高,选定了较轻量级的 DataX 作为数据同步的工具,但是就面临了一个问题,任务调度的问题,那个时候 DolphinScheduler 还么问世呢,最后选择了 Airflow 。

在使用Airflow的过程中,出现过以下问题:

1)部署及集群扩容相较于复杂及麻烦;

2)通过Python代码绘制DAG,当任务数及依赖增多后,不便于维护;

3)当任务量多的时,容易造成卡死。

那么 DolphinScheduler 的出现解决了我司的哪些问题呢?

1)部署及集群扩容简单,本身我司也对 DolphinScheduler 做了一定的定制化;

2)流程可视化,并且可以通过拖拽的方式来绘制DAG;

2、数据处理

虽然 DolphinScheduler 本身可以执行 Jar 、Python 程序。对于我们来说,DolphinScheduler 就是一个任务管理平台,因此我们的整个架构,DolphinScheduler 职责只是做定时调度。像数据处理、数据爬取等都是交于Kubernetes中执行的。

那么我们使用DolphinScheduler的流程是怎样的呢?

1)编写数据处理逻辑,并提交代码到Gitlab上;

2)Gitlab触发Runner,然后进行代码测试、编译、打包;

3)在Runner中调用DolphinScheduler API并根据配置生成任务;

4)DolphinScheduler 定时调度生成的任务,并通过Spark-Client提交任务到Kubernetes上。

4

  结束语

Kubernetes 解决了部署、维护、滚动升级及高可用的问题(也就是自动化运维),同时也解决了开发、测试、生产的运行环境不一致的问题。因此研发人员的重心着重在产品研发上,而不是在运维上,这也是我们的主旨:快速试错、结果导向。

DolphinScheduler 主要是解决了数据同步任务需要人员编码的问题,让不会编码的人员也能够快速进行任务配置,提高开发人员及业务人员的工作效率,同时由于自定义简单相较于简单,很容易对 DolphinScheduler 高度定制化,不需要重复造轮子。

5

参与贡献

参与 DolphinScheduler 社区有非常多的参与贡献的方式,包括文档、翻译、布道、答疑、测试、以及代码等,此外也极其欢迎各种实践文章,DolphinScheduler开源社区非常期待您的参与。

贡献第一个PR(文档、代码) 我们也希望是简单的,试想如果是一个新人一上来就贡献1个改了几十个文件的 PR 将会对参与 review 的伙伴的心理造成多大的摧残,????

如何参与贡献链接:https://dolphinscheduler.apache.org/zh-cn/docs/development/contribute.html

文档github地址:https://github.com/apache/incubator-dolphinscheduler-website

来吧,DolphinScheduler开源社区需要您的参与,为中国开源崛起添砖加瓦吧,哪怕只是小小的一块瓦,汇聚起来的力量也是巨大的

DolphinScheduler's Github Repo 传送门

↓↓↓

https://github.com/apache/incubator-dolphinscheduler

喜欢️ DolphinScheduler 的话,别忘了 Star 收藏一下哟~

点击“阅读原文”获取会议PPT资料

最新文章

  1. js学习之类型识别
  2. Modern Operating Systems(Ⅰ)——2014.12.15
  3. word里的代码格式,使之有底纹的效果
  4. glup Browsersync
  5. baidu时光轴_使用window.scroll实现的
  6. [scalability] Find all documents that contain a list of words
  7. 左移运算符<<
  8. Android tcpdump抓包应用实现
  9. JavaScript关于js垃圾回收
  10. javascript的BOM,DOM对象
  11. linux(centos)上安装mysql教程,为需要远程登录的用户赋予权限
  12. Redis数据类型String
  13. 日志收集-Elk6
  14. python 小练习 6
  15. LVM逻辑卷
  16. yii配置访问路由权限配置
  17. Servlet中forward和redirect的区别
  18. 版本管理工具git与svn简介
  19. DDMS_Threads的简单使用
  20. python之函数用法basestring

热门文章

  1. 设计并实现加法器类 Adder
  2. MQ 简介
  3. Hadoop入门学习笔记(二)
  4. 「ARC138E」Decreasing Subsequence(n logn 做法)
  5. nginx 部署前端资源的最佳方案
  6. ABP框架之——数据访问基础架构(下)
  7. 机械硬盘和ssd固态硬盘的原理对比分析
  8. charles(CA证书)的app端安装
  9. Leetcode 不同路径系列
  10. JDBC:批处理