DolphinScheduler & K8s 在优路科技的实践
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资料