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资料
DolphinScheduler & K8s 在优路科技的实践的更多相关文章
- Spark Shuffle调优原理和最佳实践
对性能消耗的原理详解 在分布式系统中,数据分布在不同的节点上,每一个节点计算一部份数据,如果不对各个节点上独立的部份进行汇聚的话,我们计算不到最终的结果.我们需要利用分布式来发挥Spark本身并行计算 ...
- JVM参数调优:Eclipse启动实践
本文主要参考自<深入理解 Java 虚拟机>.这本书是国人写的难得的不是照搬代码注释的且不是废话连篇的技术书,内容涵盖了 Java 从源码到字节码到执行的整个过程,包括了 JVM(Java ...
- 看MySQL的参数调优及数据库锁实践有这一篇足够了
史上最强MySQL参数调优及数据库锁实践 1. 应用优化 1.2 减少对MySQL的访问 1.2.1 避免对数据进行重复检索 1.2.2 增加cache层 1.3 负载均衡 1.3.1 利用MySQL ...
- K8S集群Master高可用实践
K8S集群Master高可用实践 https://blog.51cto.com/ylw6006/2164981 本文将在前文基础上介绍k8s集群的高可用实践,一般来讲,k8s集群高可用主要包含以 ...
- 挑战海量数据:基于Apache DolphinScheduler对千亿级数据应用实践
点亮 ️ Star · 照亮开源之路 GitHub:https://github.com/apache/dolphinscheduler 精彩回顾 近期,初灵科技的大数据开发工程师钟霈合在社区活动的线 ...
- 开源有魔力 - DolphinScheduler 的 Apache 之路
关于 Apache DolphinScheduler社区 Apache DolphinScheduler(incubator) 于17年在易观数科立项,19年3月开源, 19 年8月进入Apache ...
- SparkShuffle调优原理和最佳实践
在网络层,互联网提供所有应用程序都要使用的两种类型的服务,尽管目前理解这些服务的细节并不重要,但在所有TCP/IP概述中,都不能忽略他们: 无连接分组交付服务(Connectionless Packe ...
- 《Hadoop学习之路》学习实践
(实践机器:blog-bench) 本文用作博文<Hadoop学习之路>实践过程中遇到的问题记录. 本文所学习的博文为博主“扎心了,老铁” 博文记录.参考链接https://www.cnb ...
- 一款不错的 Go Server/API boilerplate,使用 K8S+DDD+CQRS+ES+gRPC 最佳实践构建
Golang API Starter Kit 该项目的主要目的是使用最佳实践.DDD.CQRS.ES.gRPC 提供样板项目设置. 为开发和生产环境提供 kubernetes 配置.允许与反映生产的 ...
随机推荐
- python之生成器与模块
目录 生成器对象 自定义range方法 生成器表达式 模块 简介 模块的导入方式 第一种:import ... 第二种:from ... import ... 补充 生成器对象 生成器对象其实本质还是 ...
- React设置proxy后依旧报CROS错误
1.判断表单数据是否为后端接收的类型 POST GET2.axios自动转换问题 手动添加标头这份表单数据包括了files (二进制数据)而标头显示是JSON格式 不符 所以报CROS 更多文章请移步 ...
- Java概论——JavaSE基础
Java概论 Java特性和优势 简单性 面向对象 可移植性 高性能:即时编译 分布式:可处理TCP/IP协议的一些东西 动态性:通过反射机制使其具有动态性 多线程:良好的交互性和实时性 安全性:防病 ...
- 从零开始构建并编写神经网络---Keras【学习笔记】[1/2]
Keras简介: Keras是由纯python编写的基于theano/tensorflow的深度学习框架. Keras是一个高层神经网络API,支持快速实验,能够把你的idea迅速转换为结果, ...
- 【ASP.NET Core】配置应用程序地址的N多种方法
下面又到了老周误人子弟的时间,今天要误大伙的话题是:找找有多少种方法可以设置 ASP.NET Core 应用的地址,即 URL. 精彩马上开始! 1.UseUrls 方法 这是一个扩展方法,参数是可变 ...
- Redis - 读写模式 - 缓存一致性
Cache Aside Pattern(旁路缓存模式) 读:从cache中读取数据,若读取到则直接返回:cache中不存在则去database中读取,然后更新到cache. 写:先更新database ...
- Jmeter跨线程组获取token(彻底解决因格式token报错)
将token设置为全局变量网上方式方法千千万,但是你就是获取token会失败,不是提示格式错误,就是提示无法获取token,没安装Jmeter的可以查看前两期教程,有详细介绍 在工作当中如果仅仅是一个 ...
- 写selenium常用到的js代码
selenium可以运行JavaScript代码,可以用一些JavaScript来辅助编写Selelnium代码. 1.scrollIntoView - 向下拉滚动条,使得某元素可见 IWebElem ...
- mybatis查询mysql 数据库中 BLOB字段,结果出现乱码
起因 mybatis-plus 通过Mapper 查询数据,映射出来的BLOB字段中的yml数据中文是乱码的 --- DefaultValue: '' Formula: '' HintContent: ...
- webpack中文api
1. 简介 1.Plugins://插件 webpack has a rich plugin interface.Most of the features are internal plug ...