【用户案例】太美医疗基于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的团队积极参与社区活动,共同提升这个强大工具的能力和稳定性。

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Node.js】短链接

原文链接:Nodejs 第六十二章(短链接) - 掘金 (juejin.cn) 短链接是一种缩短长网址的方法,将原始的长网址转换为更短的形式。短链接的主要用途之一是在社交媒体平台进行链接分享。由于这些平台对字符数量有限制,长网址可…

MySQL-多表查询:多表查询分类、SQL99语法实现多表查询、UNION的使用、7种SQL JOINS的实现、SQL99语法新特性、多表查询SQL练习

多表查询 1. 一个案例引发的多表连接1.1 案例说明1.2 笛卡尔积(或交叉连接)的理解1.3 案例分析与问题解决 2. 多表查询分类讲解分类1:等值连接 vs 非等值连接等值连接非等值连接 分类2:自连接 vs 非自连接分类3:内连接…

OSPF防环文档

OPSF在区域内会产生俩类LSA:Router LSA ,Network LSA 路由器以自己为树根构建最短路径树 ,这里的最短路径树按两步形 成,第一步,仅考虑路由器和传输网络之间的连接。通过 Dijkstra 算法,根据链路状态数据…

doss攻击为什么是无解的?

这个让Google、亚马逊等实力巨头公司也无法避免的攻击。可以这么说,是目前最强大、最难防御的攻击之一,属于世界级难题,并且没有解决办法。 Doss攻击的原理不复杂,就是利用大量肉鸡仿照真实用户行为,使目标服务器资源…

解析大语言模型训练三阶段

大语言模型的训练过程一般包括3个阶段:预训练(Pre-training)、SFT(有监督的微调,Supervised-Finetuning)以及RLHF(基于人类反馈的强化学习,Reinforcement Learning from Human Feedb…

Mac的终端配置

Mac的终端配置 参考教程包管理工具 - Homebrew出现的问题用虚拟环境解决方案:直接将解释器的路径放过去错误方法:用find查找到虚拟环境安装的路径,其链接的是brew安装的python路径 编辑器没有报错,但是运行过程中仍然找不到pandas…

【动态规划-线性dp】【蓝桥杯备考训练】:乌龟棋、最长上升子序列、最长公共子序列、松散子序列、最大上升子序列和【已更新完成】

目录 1、乌龟棋 2、最长上升子序列 3、最长公共子序列 4、松散子序列 5、最大上升子序列和 1、乌龟棋 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物。 乌龟棋的棋盘只有一行,该行有 N 个格子,每个格子上一个分数(非负整…

【Springboot开发】后端代码基础框架

前言:主要介绍最基础的springboot开发架构 目录 1. overall2. 配置文件2.1 YAML2.2 properties2.3 配置文件加载顺序2.4 多配置文件 3. 代码包3.1 infrastructure3.1.1 persistence 3.2 application3.2.1 dto3.2.2 converter3.2.3 service 3.3 api3.3.1 vo3.3.2 req…

Django交易商场

Hello,我是小恒不会java 最近学习django,写了一个demo,学到了不少东西。 我在GitHub上开源了,提示‘自行查看代码,维护,运行’。 最近有事,先发布代码了,我就随缘维护更新吧 介绍: 定…

Harmony鸿蒙南向驱动开发-MIPI CSI

CSI(Camera Serial Interface)是由MIPI联盟下Camera工作组指定的接口标准。CSI-2是MIPI CSI第二版,主要由应用层、协议层、物理层组成,最大支持4通道数据传输、单线传输速度高达1Gb/s。 物理层支持HS(High Speed&…

随机过程-BS定理

随机偏微分方程相比普通偏微分方程具有额外的随机项,反映了其描述的现象具有随机性质

华为 2024 届校园招聘-硬件通⽤/单板开发——第一套(部分题目分享,完整版带答案,共十套)

华为 2024 届校园招聘-硬件通⽤/单板开发——第一套 部分题目分享,完整版带答案(有答案和解析,答案非官方,未仔细校正,仅供参考)(共十套)获取(WX:didadidadidida313,加我…

贪心算法|860.柠檬水找零

力扣题目链接 class Solution { public:bool lemonadeChange(vector<int>& bills) {int five 0, ten 0, twenty 0;for (int bill : bills) {// 情况一if (bill 5) five;// 情况二if (bill 10) {if (five < 0) return false;ten;five--;}// 情况三if (bill …

基于ubuntu22.04系统安装nvidia A100驱动与NVLink启用

1、官方仓库 针对驱动包下载认准nvidia官网 dpkg -i nvidia-driver-local-repo-ubuntu2204-550.54.15_1.0-1_amd64.deb apt update apt search nvidia-driver-5502、安装 根据步骤1apt search nvidia-driver-550查出版本&#xff1a;此驱动包封在nvidia-driver-local-repo-ub…

数字社会下的智慧公厕:构筑智慧城市的重要组成部分

智慧城市已经成为现代城市发展的趋势&#xff0c;而其中的数字化转型更是推动未来社会治理体系和治理能力现代化的必然要求。在智慧城市建设中&#xff0c;智慧公厕作为一种新形态的信息化公共厕所&#xff0c;扮演着重要角色。本文智慧公厕源头实力厂家广州中期科技有限公司&a…

设计模式(22):解释器模式

解释器 是一种不常用的设计模式用于描述如何构成一个简单的语言解释器&#xff0c;主要用于使用面向对象语言开发的解释器和解释器设计当我们需要开发一种新的语言时&#xff0c;可以考虑使用解释器模式尽量不要使用解释器模式&#xff0c;后期维护会有很大麻烦。在项目中&…

Python:如何对FY3D TSHS的数据集进行重投影并输出为TIFF文件以及批量镶嵌插值?

完整代码见 Github&#xff1a;https://github.com/ChaoQiezi/read_fy3d_tshs&#xff0c;由于代码中注释较为详细&#xff0c;因此博客中部分操作一笔带过。 01 FY3D的HDF转TIFF 1.1 数据集说明 FY3D TSHS数据集是二级产品(TSHS即MWTS/MWHS 融合大气温湿度廓线/稳定度指数/…

CSS-语法、选择器

&#x1f4da;详见 W3scholl&#xff0c;本篇只做快速思维索引。 概述 CSS 是一种描述 HTML 文档样式的语言。 有三种插入样式表的方法&#xff1a; 外部 CSS内部 CSS行内 CSS &#x1f4c5; 外部 CSS 外部样式表存储在.css文件中。HTML 页面必须在 head 部分的<link&g…

ORAN C平面 Section Extension 22

ORAN C平面Section扩展22用于ACK/NACK请求。除section type 7外&#xff0c;section扩展22可以用于从O-DU发送到O-RU的所有section type和section扩展。 对于一个section描述&#xff0c;O-DU可以使用section扩展22要求O-RU使用section type 8 C平面消息进行ACK/NACK反馈。关于…

React路由快速入门:Class组件和函数式组件的使用

1. 介绍 在开始学习React路由之前&#xff0c;先了解一下什么是React路由。React Router是一个为React应用程序提供声明式路由的库。它可以帮助您在应用程序中管理不同的URL&#xff0c;并在这些URL上呈现相应的组件。 2. 安装 要在React应用程序中使用React路由&#xff0c;…