【用户案例】太美医疗基于Apache DolphinScheduler的应用实践

大家好,我叫杨佳豪,来自于太美医疗。今天我为大家分享的是Apache DolphinScheduler在太美医疗的应用实践。今天的分享主要分为四个部分:

  • 使用历程及选择理由
  • 稳定性的改造
  • 功能定制与自动化部署
  • 运维巡检与优化

使用历程及选择理由

公司介绍

我们是一家专注于生命科学产业的运营平台公司,致力于提供医疗行业解决方案。

file

作为一家基于AI大数据云平台的药品全生命周期解决方案商,我们提供从药物研发到上市的全流程服务。我们的服务范围涵盖医药研发、药物警戒、医药预警等多个领域。

服务与技术平台

在提供服务的过程中,特别是在药物警戒服务方面,我们依赖数据的调度及ETL清洗,这让我们与Apache DolphinScheduler结缘。我们的平台架构底层基于Hadoop生态体系,负责大数据的开发、调度,并最终输出相关的报表和接口服务。

file

在调度平台方面,我们采用了Apache DolphinScheduler和Airflow,其中Airflow是较早的大数据开源调度平台之一。

为何选择DolphinScheduler

选择Apache DolphinScheduler作为我们的技术平台是在2020年一个医药营销平台项目开始时做出的决策。

我们对Airflow、Azkaban和Apache DolphinScheduler进行了综合比较和验证。考虑到我们的平台主要是基于SQL进行调度,类似于ERP平台的场景,最终选择Apache DolphinScheduler作为我们的统一技术平台。

经过三年的发展,我们再次受到社区的邀请,分享在不同场景下使用Apache DolphinScheduler的经验及相关的优化经验。

升级历程

自2020年开始使用Apache DolphinScheduler以来,太美医疗经历了几个重要的升级阶段:

  • 2020年:正式引入Apache DolphinScheduler,标志着我们开始系统地整合大数据处理流程。
  • 2021年:使用Apache DolphinScheduler 1.3.3版本替代Airflow,成为公司统一的调度平台。
  • 2022年:随着Apache DolphinScheduler 2.0版本的发布,我们引入了钉钉告警等便利性功能,以提升开发团队的工作效率。
  • 2023年:面对庞大的任务量和工作流定义(4000+定义,日调度量2万+),我们从2.0版升级至3.0.1版,并进行了自动化改造,以应对日益增长的维护挑战。

这一升级历程不仅反映了太美医疗对Apache DolphinScheduler技术的深度探索,也体现了我们对开源技术持续优化和改进的承诺。

实现的成果

通过不断的技术升级和改造,我们在Apache DolphinScheduler的应用实践中取得了显著成果:

  • 部署规模:我们在国内外部署了多套DolphinScheduler,覆盖了SQL节点、Spark节点、Shell类型节点等多种作业类型。
  • 调度能力:我们的工作流定义达到了4000+,日调度量超过2万+,展现了强大的调度能力。
  • 自动化与集成:实现了与Git的集成,支持复杂任务的自动创建和快速部署到新集群环境。
  • 环境管理:构建了一套完整的环境管理策略,包括测试(Test)、用户接受测试(UAT)和生产(PROD)环境的同步调度,有效降低成本,提升效率。
  • 稳定性优化:即使在低配的集群环境下,也保证了稳定的调度性能,并通过定期巡检功能维持大数据集群的稳定运行。

稳定性改造详解

在Apache DolphinScheduler的应用过程中,稳定性是我们极为重视的一点。

面对环境和资源的限制,如何通过技术改造提升系统的稳定性,是我们需要解决的关键问题。

稳定性的难点

  • 资源限制与宕机问题:在资源受限的情况下,系统很容易出现宕机,尤其是当集群较小的时候。
  • 任务提交过多导致堵塞:在高并发场景下,大量任务提交可能导致系统无法按时完成调度,特别是对于需要在特定时间完成的任务(如T+1任务)。
  • 偶发性问题:包括主键依赖重复和SQL节点偶发性调度问题,以及开发过程中对Git同步开发的需求。

改造措施

针对上述难点,我们进行了以下几方面的改造:

file

  • 优化配置与资源利用:调整启动参数,将内存配置从4G降低到128M和1G,保证服务稳定运行同时最大化资源利用。
  • 调整masterworker的参数,如拉取命令的数量和准备执行的任务数量,以适应四核8G的小型集群环境。
  • 自动巡检与告警:增加自动巡检功能,及时发现并告警处理问题,减少手动干预,提升稳定性。
  • 调度策略优化:对于核心任务,选择更稳定的调度模式,比如使用shell模式代替SQL节点,确保任务的稳定执行。

  • 内存与CPU参数优化:针对内存和CPU的配置进行优化,确保系统在低资源环境下也能稳定运行。

改造成果

通过上述改造,我们实现了以下成果:

  • 提升系统稳定性:系统在三台4核8G的小型集群环境下能稳定运行,日常稳定调度3000+任务,显著减少了宕机和调度失败的情况。
  • 优化资源使用:服务启动和运行时占用的内存明显降低,提高了资源利用效率。
  • 改善开发体验:针对开发流程,通过自动化和优化调度策略,减少了开发和运维过程中的困难,提高了开发效率。

自动化创建DAG的背景与实践

随着任务量的增长和调度依赖的复杂性提升,手动维护DAG变得越来越困难。我们面临的挑战包括:

任务依赖复杂:高复杂度的依赖关系使得手动配置容易出错。

发布流程繁琐:从测试到生产的发布流程涉及多步骤的人工操作,效率低下且容易出错。

跨环境部署困难:面对医疗行业对本地化部署的需求,传统的导入导出方式不适应快速部署的需求。

代码管理与规范:统一的代码管理和规范审核对于保持代码质量至关重要。

针对以上背景,我们采取了自动化改造,目标是通过自动化工具和流程,简化DAG的创建、管理和发布过程,实现跨环境的快速部署,同时保持代码的统一性和质量。

设计方案与实践

我们的改造方案包括:

file

自动化DAG生成:开发了工具自动根据业务需求生成DAG,减少人工编写和维护的负担。

统一代码管理:通过Git实现代码的版本控制和团队协作,确保代码质量和一致性。

简化发布流程:通过自动化脚本和工具,简化从测试到生产的DAG发布流程,提高效率并减少错误。

file

通过这些措施,我们不仅提升了调度系统的稳定性和资源利用效率,也改善了开发和运维的工作流程,为未来面对更大规模的任务调度和复杂的业务需求提供了坚实的基础。

改造方案与成果

为了提高工作效率,确保与Apache DolphinScheduler社区版本的兼容性,并简化后续的升级过程,我们采取了一种以插件形式进行改造的方法,基于Apache DolphinScheduler 3.0版本进行了自动化任务流创建的实现。

改造方案设计

我们的改造方案核心思路是利用Apache DolphinScheduler提供的API,通过一个外部Java程序,自动读取MySQL中存储的配置信息,进而自动创建工作流所需的所有依赖流。主要步骤包括:

  • 配置信息存储:将所有需要的配置信息存放在MySQL数据库中,这包括工作流名称、节点名称、任务的来源(Git地址)、任务类型(计算任务、同步任务等)以及数据源类型和实例。

  • 简化任务流创建:原计划通过解析SQL创建任务流的方案由于工作量大,后续改为直接在任务中配置前置节点依赖,简化了创建过程。

  • 任务修改类型处理:在上线新任务时选择“新增”,旧任务更新时选择“更新”,并配合全局变量的使用,来管理任务的变更。

  • 工作流与节点依赖关系定义:通过配置文件明确NODE节点的前置依赖关系,实现整个工作流节点的串联。

成果与反馈

改造后的系统实现了通过配置即可自动生成DAG的目标,极大地简化了工作流的创建和管理过程。主要成果包括:

file

快速创建和部署:只需通过配置SQL脚本,就能创建相应的工作流和任务子节点,实现了快速部署的目标。

提高开发效率:开发团队可以更便捷地创建任务和部署到各个环境,无需手动进行复杂的配置和部署流程。

保持与社区同步:采用插件化的改造方式,避免了直接修改源代码的需要,使得系统更容易与Apache DolphinScheduler社区版本保持同步,便于后续的升级和功能获取。

自动化运维巡检

运维工作中存在一系列的挑战,主要包括任务失败的及时告警、多项目任务巡检、以及对任务完成情况的准确把握等问题。

为了应对这些挑战,我们在Apache DolphinScheduler的使用和改造过程中,实施了一系列的自动化运维措施。

自动化运维改造

通过利用Apache DolphinScheduler的元数据信息,我们实现了一个自动推送功能,每天定时将生产调度报告发送到指定的钉钉群中。这个报告包括了所有任务的运行情况,如哪些任务成功,哪些任务失败,极大地方便了运维团队及时掌握任务的执行情况。

对于运维任务失败的情况,我们增强了告警机制,确保在任务出现问题时能够及时通知到运维团队,使他们能够迅速响应和处理问题。

版本选择建议

尽管Apache DolphinScheduler作为一个开源调度工具在市场上表现优异,但像所有开源项目一样,它也存在一些问题和Bug。

我们希望通过与社区的持续沟通和交流,不仅能减轻运维团队的负担,也能贡献我们的经验和改进建议给社区,共同推动Apache DolphinScheduler项目的进步。

我们鼓励所有使用Apache DolphinScheduler的团队积极参与社区活动,共同提升这个强大工具的能力和稳定性。

本文由 白鲸开源科技 提供发布支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/530056.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

搭建前后端的链接(java)

搭建前后端的链接(java) 一.前提 1.1 javaEE 搭建前后端的链接首先需要用到javaEE,也就是java企业版,也就是java后端(后端javaSE) 利用javaEE和前端交互,javaSE和数据库交互,javaSE和javaEE之间再进行交互就实现了前后端的交互…

(源码+部署+讲解)基于Spring Boot + Vue的车位租赁系统设计与实现

前言 💗博主介绍:✌专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2024年Java精品实战案例《100套》 🍅文末获取源码联系🍅 🌟…

Mysql-数据库集群的搭建以及数据库的维护

一、数据库的维护 1.数据库的备份与恢复 1&#xff09;备份指定数据库 #mysqldump -u root -p zx > ./zx.dump 2&#xff09;备份所有库 #mysqldump -u root -p --all-databases > ./all.dump 3)恢复所有库 #mysql -u root -p < ./all.dump 4)恢复指定数据库 #mysq…

最新剧透前沿信息GPT-5或将今年发布

GPT2 很糟糕 &#xff0c;GPT3 很糟糕 &#xff0c;GPT4 可以 &#xff0c;但 GPT5 会很好。 PS:GPT2 很糟糕,3 很糟糕,4 可以,5 很可以。 如果想升级GPT4玩玩&#xff0c;地址 今年发布的具有推理功能的 GPT5不断发展&#xff0c;就像 iPhone 一样 Sam Altman 于 17 日&am…

超级详细的 Maven 教程(基础+高级)

1. Maven 是什么 Maven 是 Apache 软件基金会组织维护的一款专门为 Java 项目提供构建和依赖管理支持的工具。 一个 Maven 工程有约定的目录结构&#xff0c;约定的目录结构对于 Maven 实现自动化构建而言是必不可少的一环&#xff0c;就拿自动编译来说&#xff0c;Maven 必须…

《论文阅读》构建情感共识并利用未配对数据生成共情对话 ACL 2021

《论文阅读》构建情感共识并利用未配对数据生成共情对话 ACL 2021 前言简介模型构架损失函数实验结果前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来的是《Constructing Emotion Consensus and Utilizing …

我的创作纪念日❤2024/4/9

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

《前端面试题》- CSS - CSS选择器的优先级

行内样式1000 d选择器100 属性选择器、class或者伪类10 元素选择器&#xff0c;或者伪元素1 通配符0 参考网址&#xff1a;https://blog.csdn.net/jbj6568839z/article/details/113888600https://www.cnblogs.com/RenshuozZ/p/10327285.htmlhttps://www.cnblogs.com/zxjwlh/p/6…

uniapp 地图分幅网格生成 小程序基于map组件

// 获取小数部分 const fractional function(x) {x Math.abs(x);return x - Math.floor(x); } const formatInt function(x, len) {let result x;len len - result.length;while (len > 0) {result 0 result;len--;}return result; }/*** 创建标准分幅网格* param …

unity数组

数组的定义 动态初始化:在定义数组时只指定数组的长度&#xff0c;由系统自动为元素赋初值的方式。 静态初始化:定义数组的同时就为数组的每个元素赋值 数组的静态初始化有两种方式 1、类型门数组名new 类型[]{元素&#xff0c;元素&#xff0c;…}; 2、类型[数组名{元素&am…

SSL数字证书

SSL数字证书产品提供商主要来自于国外&#xff0c;尤其是美国&#xff0c;原理和使用操作系统一样&#xff0c;区别在于SSL数字证书目前无法替代性&#xff0c;要想达到兼容性99%的机构目前全球才3-4家&#xff0c;目前国内的主流网站主要使用的是国际证书&#xff0c;除了考虑…

爬虫 新闻网站 以湖南法治报为例(含详细注释) V4.0 升级 自定义可任意个关键词查询、时间段、粗略判断新闻是否和优化营商环境相关,避免自己再一个个判断

目标网站&#xff1a;湖南法治报 爬取目的&#xff1a;为了获取某一地区更全面的在湖南法治报的已发布的和优化营商环境相关的宣传新闻稿&#xff0c;同时也让自己的工作更便捷 环境&#xff1a;Pycharm2021&#xff0c;Python3.10&#xff0c; 安装的包&#xff1a;requests&a…

K8S哲学 - kubectl

Kubectl is the Kubernetes cli version of a swiss army knife, and can do many things. Kubernetes coordinates a highly available cluster of computers that are connected to work as a single unit k8s production-ready. 概念 kubectl 和 Kubernetes API 区别

使用Docker Registry-v2搭建镜像仓库详细教程

我们使用docker来部署私有化镜像仓库… 1、下载 registry:v2 镜像 docker pull registry:22、在私有仓库所在的主机目录新建一个文件夹&#xff0c;用于持久化保存仓库中的镜像 mkdir -p /opt/registry3、启动registry镜像 使用docker镜像启动私有仓库容器服务&#xff0c;…

【azure笔记 1】容器实例管理python sdk封装

容器实例管理python sdk封装 测试结果 说明 这是根据我的需求写的&#xff0c;所以有些参数是写死的&#xff0c;比如cpu核数和内存&#xff0c;你可以根据你的需要自行修改。前置条件&#xff1a; 当前环境已安装python3.8以上版本和azure cli并且已经登陆到你的账户 依赖安…

网络基础三——IP协议补充和Mac帧协议

全球网络及网段划分的理解 ​ 根据国家组织地区人口综合评估进行IP地址范围的划分&#xff1b; ​ 假设前8位用来区分不同的国家&#xff0c;国际路由器负责全球数据传输&#xff0c;子网掩码为IP/8&#xff1b;次6位区分不同的省份&#xff0c;国内路由器负责全国数据的传输…

【CSS】MDN

一、CSS构建 1.1 CSS选择器 1.1.1 元素选择器 标签不区分大小写 示例&#xff1a; span {background-color: yellow; }1.1.2 通用选择器 选择文档中所有内容&#xff0c;重置样式表中使用较多 鉴于div:first-child&#xff08;代表所有的div元素&#xff0c;并且是第一个…

杨辉三角形(蓝桥杯,acwing)

题目描述&#xff1a; 下面的图形是著名的杨辉三角形&#xff1a; 如果我们按从上到下、从左到右的顺序把所有数排成一列&#xff0c;可以得到如下数列&#xff1a; 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 6, 4, 1, ... 给定一个正整数 N&#xff0c;请你输出数列中第一次出现…

OpenAI曾转录100万小时视频数据,训练GPT-4

4月7日&#xff0c;纽约时报在官网发布了一篇名为《科技巨头如何挖空心思&#xff0c;为AI收集数据》的技术文章。 纽约时报表示&#xff0c;OpenAI曾在2021年几乎消耗尽了互联网有用的文本数据源。为了缓解训练数据短缺的难题&#xff0c;便开发了知名开源语音识别模型Whispe…

Windows完全卸载MySQL后再下载安装(附安装包)

目录 友情提醒第一章&#xff1a;如何完全卸载干净mysql教程&#xff08;三个步骤完全卸载&#xff09;1&#xff09;步骤一&#xff1a;卸载程序2&#xff09;步骤二&#xff1a;删除文件3&#xff09;步骤三&#xff1a;删除注册表信息 第二章&#xff1a;下载软件两种方式1&…