兴业证券基于Apache DolphinScheduler的应用实践

2024-08-31 10:28

本文主要是介绍兴业证券基于Apache DolphinScheduler的应用实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文 / 兴业证券股份有限公司 刘洋  石良生  柳君  李致琪

本文来源于网络,如有侵权,请联系删除

任务调度平台,扮演着自动执行预设任务的重要角色,是业务开展过程中不可或缺的一环。随着业务规模的不断扩展,兴业证券每日需要进行数以万计的任务调度,因此,优化和提升任务调度平台的性能与稳定性至关重要。本文通过分析兴业证券自身任务调度现状,对分布式任务调度技术进行解析与探索,并总结了统一分布式任务调度平台的实践经验。

file

兴业证券金融科技部

总经理助理    刘洋

建设统一分布式任务调度平台的必要性

在兴业证券早期,任务调度平台由项目组各自构建并维护,这在业务规模未产生爆发式增长前,尚能够满足日常的业务需求。但随着近年来业务量的迅猛增长,这种分散式管理的弊端开始逐渐显现,导致开发成本日益增加、运维复杂度与日俱增。与此同时,由于各调度平台自身功能不完善而导致的问题也日益突出。任务依赖管理及任务并发控制能力上的欠缺,给业务的正常开展带来了一定的隐患。基于以上问题,现有的任务调度平台迫切需要进行统一和整合,以提升系统的稳定性和高效性。通过构建一个统一分布式任务调度平台,技术人员可以实现任务集中管理、统一监控和高效运维,从而降低运维成本,提高开发效率,确保数据的准确性和一致性(见图1)。

file

图1  分散式部署VS集中式部署

平台的建设目标

经过对现有任务调度平台的优缺点进行调研分析后,统一分布式任务调度平台被期冀于实现以下目标和能力。

**1.基础功能要求。**一是高可用性与稳定性:在部分节点故障时能无缝调度任务,确保业务流程不受干扰。二是告警机制成熟性:支持多种告警方式,并允许通过插件进行扩展。三是租户隔离机制:任务对不同租户进行权限隔离,确保数据安全和操作的精确性。四是丰富的任务类型:支持多种任务类型,并允许通过插件进行扩展。五是跨环境配置兼容性:支持测试环境和生产环境间一键配置迁移,避免手动修改配置。六是支持多维度任务调度:同时支持函数调度和进程调度,进程调度支持对任务的交付、部署及管理。

**2.扩展与功能增强。**一是资源线性扩展:通过水平扩展计算资源保持服务的高稳定性。二是动态任务调度:根据资源利用率、任务优先级等因素,动态调整调度策略。三是日志管理与分析:提供日志收集、存储和查询功能,便于快速定位和解决潜在问题。四是安全性与权限控制:确保数据的安全性和完整性,实施严格的权限控制。

**3.用户体验与集成性。**一是直观的任务编排工具:提供易用的可视化编排界面,减少依赖关系引起的错误。二是可扩展的API接口:允许第三方系统无缝集成,扩展平台功能和应用场景。

**4.性能与监控。**一是性能监控与调优:实时监控关键性能指标,并根据监控结果进行针对性的优化。二是任务执行即时监控:提供直观的任务执行状态展示,帮助运维人员快速响应、处理异常。

**5.故障处理与并发控制。**一是故障转移机制:在节点故障时,确保任务能够无缝转移到其他可用节点。二是并发控制策略:根据任务类型限制最大并发数,避免因并发数过高导致的性能问题。

平台的技术方案

鉴于任务调度平台的复杂性和高昂的建设成本,兴业证券决定基于现有的成熟开源分布式任务调度平台进行深度定制开发,以满足特定的技术需求。经过对市场上成熟的开源产品进行详细调研和对比分析,DolphinScheduler被挑选成为了统一分布式任务调度平台的技术原型。兴业证券通过在其基础上进行定制化二次开发,对其部分功能进行了功能增强以及逻辑优化,实现对公司特定业务场景的最佳匹配。

平台能力建设。(1)系统架构(见图2)。统一分布式任务调度平台架构设计的核心目标是保证平台在分布式环境下的高可用及数据一致性。平台主要由三个核心组件构成:API-Server,用于接收各类API请求;Master-Server,负责任务的智能分发以及集群节点的心跳监控;Worker-Server,专注于执行分配的任务。这三个组件均具备水平扩展能力,从而确保了系统始终维持高可用状态。

file

图2  系统架构设计

在功能上,为了支持Java方法任务调度,Worker-Server下游设置了Batch-Server层级用于远程执行Java任务。通过集成Batch-ServerSDK,项目组应用便能成为Batch-Server,轻松获取调度执行Java方法任务的能力。同时,该层级同样支持故障转移,确保任务执行的连续性与稳定性,避免因单点故障而影响整个系统的运行。项目组可以在Batch-Server上引入持久化模块,以数据库、缓存、文件等多种方式对任务执行结果进行持久化,实现无感前提下的幂等性,严格保证Java任务不会因为网络波动或其他外部因素而被重复执行,进而极大地增强了任务执行的稳定性和可靠性。

(2)故障转移实现。统一分布式任务调度平台在保障平台整体服务连续性的同时,也专注于保障具体任务的执行稳定性。

当负责执行任务的Worker-Server节点宕机时,Master-Server能够通过Worker-Server注册在ZooKeeper上的心跳节点及时感知到具体Worker-Server的下线行为,随即将该Worker-Server上正在执行的任务重新分发至其他存活的Worker-Server,实现任务故障转移,保障任务的正常执行。Java任务与其他任务类型相比,显得更为特殊。由于其执行节点并非Worker-Server,而是Batch-Server,因此常规任务类型的故障转移逻辑对其并不适用。

当负责执行Java任务的Batch-Server节点宕机时,负责分发此次任务的Worker-Server可通过ZooKeeper上的心跳节点感知到此次调度的Batch-Server下线,随即挑选集群内另一台可用的Batch-Server发起任务调度。Batch-Server在任务执行过程中使用了分布式锁机制,即使是由于网络波动而引起的Batch-Server的“虚假下线”也不会造成多台Batch-Server上重复执行同一任务,从而确保了任务执行的高效、稳定(见图3)。

file

图3  Batch-Server“虚假下线”时的故障转移实现

当负责此次Java任务分发的Worker-Server节点宕机时,Master-Server会先按照常规故障转移逻辑,挑选另一台存活的Worker再次进行Java任务分发。在此过程中,新的Worker-Server会将任务回调地址由宕机的Worker-Server地址更改为本机地址,从而确保Batch-Server在任务完成后的回调请求能够被准确无误地发送至新的Worker-Server,而不是已经下线的Worker-Server,造成任务执行状况异常。新的Worker-Server在分发环节会随机挑选一台可用的Batch-Server进行调度,但是由于先前的Batch-Server仍持有分布式锁,因此本次调度并不具有实际效果,不会引起任务的重复执行(见图4)。

file

图4  Worker-Server宕机时的故障转移实现

凭借精心设计的故障转移逻辑,统一分布式任务调度平台实现了对任务执行可靠性的保证,确保任务在各种极端情况下依然能够被正确处理。

(3)监控能力集成。在日常开发和运维过程当中,开发人员和运维人员更关注的是那些执行出现异常的工作流和任务。他们需要快速定位指定时间范围内的异常工作流和任务,对问题展开排查。

为了满足这一需求,平台配备了工作流监控与任务监控功能。这些功能能够提供给定时间范围和特定条件下工作流和任务的执行状态统计信息,帮助运维人员迅速定位出现问题的工作流或任务。此外,监控页面还支持仅关注某一收藏组下的工作流和任务,这样用户就可以屏蔽非重要信息,专注于关键任务。用户只需在工作流定义和任务定义菜单下将特定工作流或任务添加到所选收藏组,随后在监控页面选择监控该收藏组即可,从而极大地方便了用户过滤和关注指定工作流和任务。

(4)事件驱动整合(见图5)。任务调度平台的核心在于实现任务的精准调度,即根据预设的逻辑条件驱动相应任务的逻辑执行。驱动逻辑执行的方式主要分为三种:请求驱动、时间驱动和事件驱动。这三种方式在触发机制和语义表达上具有各自的特点。

file

图5  事件驱动架构应用

事件驱动是通过事件发布者发布特定事件,从而去触发事件订阅者执行相应的处理逻辑。在事件驱动架构中,事件发布者无需关心订阅者的数量和处理方式。事件订阅者通过从事件总线中拉取事件来触发相应的逻辑。

常见的分布式任务调度平台均支持以API请求驱动和定时任务时间驱动两种方式触发任务逻辑,但在事件驱动方面则稍显不足。为弥补这一短板,平台在API-Server、Master-Server和Alert-Server中集成了兴业证券事件驱动SDK,可赋予它们强大的事件发布和订阅功能。

经过集成优化,API-Server能够精准处理事件总线中任务调度相关的主题事件,灵活触发对应的任务调度逻辑;Master-Server在完成工作流和任务执行后,能够迅速将执行结果上报至性能分析平台,实现高效的数据流转;而Alert-Server则能在告警事件触发时迅速发布任务调度告警事件,为多个下游系统提供及时的告警处理支持。事件驱动架构的引入,不仅显著降低了任务调度平台与其他系统之间的耦合度,还极大地提升了系统间交互的灵活性和响应速度。

思考与展望

经过不断的建设和大力推广,统一分布式任务调度平台已顺利跨越两大重要里程碑:“系统开发完成”与“生产投入使用”。任务调度平台的核心功能已完成开发并成功部署至生产环境,为公司的日常运营提供了坚实的技术支撑。目前,首批项目组已成功将他们的调度任务迁移至该平台,每日执行的任务量已达万条,充分证明了平台的稳定性和高效性。预计到2024年年底,调度平台的月执行任务数将会实现百万级的飞跃。这一规模的迅速壮大,将为公司带来更加统一、高效式的任务调度管理,大幅减少重复建设的成本支出,同时缩短交付周期,为公司的持续发展筑牢根基。

通过对开源分布式任务调度平台进行定制化开发,兴业证券成功打造了一个集调度与监控功能于一身、为开发与运维团队量身定制的企业级分布式任务调度解决方案。未来,平台将致力于对以下关键领域的能力进行持续迭代与扩展,以适应日益复杂多变的业务场景,并为公司业务的蓬勃发展提供坚实支撑。一是深度融合DevOps流程:计划引入DevOps流水线插件,以简化用户操作,使其能够将构建完成的制品一键上传至调度平台,并快速转化为特定类型的调度任务。这能够帮助实现进程任务调度的便捷化,进一步缩短软件交付周期,并显著提升开发效率,助力公司更快速地响应市场变化,提升竞争力。二是支持扩展多种任务类型:不断丰富平台所支持的任务类型,为项目组提供更加多样化的调度选项,以满足不同业务场景下的灵活需求。由于每个项目组都有其独特的业务逻辑和调度要求,为此平台将会提供更加丰富、更加精细化的调度选项,确保项目组能够根据自己的实际需求,选择最合适的任务类型进行调度。

(此文刊发于《金融电子化》2024年7月上半月刊)

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

这篇关于兴业证券基于Apache DolphinScheduler的应用实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1123639

相关文章

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

zoj3820(树的直径的应用)

题意:在一颗树上找两个点,使得所有点到选择与其更近的一个点的距离的最大值最小。 思路:如果是选择一个点的话,那么点就是直径的中点。现在考虑两个点的情况,先求树的直径,再把直径最中间的边去掉,再求剩下的两个子树中直径的中点。 代码如下: #include <stdio.h>#include <string.h>#include <algorithm>#include <map>#

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

AI行业应用(不定期更新)

ChatPDF 可以让你上传一个 PDF 文件,然后针对这个 PDF 进行小结和提问。你可以把各种各样你要研究的分析报告交给它,快速获取到想要知道的信息。https://www.chatpdf.com/

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。