兴业证券基于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月上半月刊)

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

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

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

相关文章

【JavaWeb】Http请求与响应

文章目录 Http 请求与响应一、Http 请求格式1、请求行2、请求头3、请求体(post请求才有) 二、HttpServletRequest1、获取 请求行 信息2、获取 请求头 信息3、获取 请求参数 信息 三、Http 响应格式1、响应行2、响应头3、响应体(正文&#xff…

杨辉三角

题目 给定一个非负整数 numRows&#xff0c;生成杨辉三角的前 numRows 行。 在杨辉三角中&#xff0c;每个数是它左上方和右上方的数的和。 示例: 输入: 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1] ]参考答案 class Solution { public:vector<vector<int>…

Centos 下载和 VM 虚拟机安装

1. Centos 下载 阿里云下载地址 centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云 2. VM 中创建 Centos 虚拟机 2.1 先打开 VM 虚拟机&#xff0c;点击首页的创建新的虚拟机 2.2 选择自定义&#xff0c;然后点击下一步。 2.3 这里默认就好&#xff0c;继续选择下一…

JavaWeb学习——Maven高级使用学习

一、分模块设计与开发 1、分模块设计原因 Maven 的分模块设计主要有以下几个原因&#xff1a; 1. 模块化管理&#xff1a;在大型项目中&#xff0c;代码量通常会非常大&#xff0c;如果将所有的代码都放在一个模块中&#xff0c;会使得项目结构复杂&#xff0c;不利于代码的管…

大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

【安全科普】学完网络安全出去能做什么工作?

想要了解学完网络安全工程师就业班后&#xff0c;出去能做什么工作&#xff0c;这个时候会分甲方或是乙方&#xff0c;看个人更偏向哪个岗位。 甲方指的是政府、海关、税务机构、高校及其他国有银行、商业银行&#xff0c;以及移动运营商&#xff08;如中国移动、中国联通、中…

【前缀和算法】--- 进阶题目赏析

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 算法Journey 本篇我们来赏析前缀和算法的进阶题目。 &#x1f3e0; 和可被K整除的子数组 &#x1f4cc; 题目解析 和可被k整除的子数组 &#x1f4cc; …

线性回归算法详解

目录 线性回归算法 线性回归方程 误差项分析 似然函数求解 线性回归求解 梯度下降算法 下山方向选择 梯度下降优化 梯度下降策略对比 学习率对结果的影响 代码实现 线性回归算法 线性回归是回归算法中最简单、实用的算法之一&#xff0c;在机器学习中很多知识点都是…

【网络】数据链路层协议——以太网,ARP协议

目录 1.局域网转发 2.MAC地址 2.1.什么是MAC地址 2.2.Mac地址的作用 2.3.MAC地址和IP地址的区别和联系 3.以太网协议 4.MTU&#xff0c;IP MTU&#xff0c;MSS 4.1.MTU 4.2. IP MTU 4.3. MSS 4.4. 区别及联系 5.局域网的数据碰撞 5.1.局域网内通信过程 5.2.数据碰…

宏集MIRO-L230工业路由器: 一站式全球联网解决方案

在日益互联的世界中&#xff0c;全球覆盖的稳定连接已成为业务成功的关键因素。宏集非常高兴地向您介绍我们的最新创新产品——MIRO-L230工业路由器&#xff0c;这是一款为现代企业量身定制的LTE路由器&#xff0c;为用户带来前所未有的稳定连接体验。 宏集MIRO-L230工业路由器…

墨兰:花语寓意、神秘传说与独特魅力全解析

在繁花似锦的植物世界中&#xff0c;墨兰宛如一位优雅的隐士&#xff0c;静静地散发着独特的魅力。它那婀娜的身姿和淡雅的芬芳&#xff0c;仿佛在诉说着一个个古老而神秘的故事。当我们凝视着墨兰&#xff0c;不禁会被它那独特的气质所吸引&#xff0c;想要探寻它背后隐藏的花…

电容的分类

电容作为电子产品中不可或缺的元件&#xff0c;其种类繁多&#xff0c;各具特色。以下是电容的主要分类、作用及优缺点概述&#xff1a; 一、电容的分类 电容的分类方式多样&#xff0c;常见的分类方式包括按结构、用途、电解质类型及制造材料等。 按结构分类&#xff1a; 固…

C++编程-递归算法1

目录 先言 关于递归算法 例题一 题目描述 算法分析 标准程序 代码分析 例题二 题目描述 算法分析 标准程序 例题三 题目描述 算法分析 标准程序 代码分析 例题四 题目描述 标准程序 代码分析 后言 先言 从今天开始&#xff0c;我们将新的算法——递归&…

大二必做项目贪吃蛇超详解之中篇游戏设计与分析

贪吃蛇系列文章 上篇win32 中篇设计与分析 文章目录 贪吃蛇系列文章1. 地图1. 1 <locale.h>本地化1. 2 类项1. 3 setlocale函数1. 4 宽字符的打印1. 5 地图坐标 2. 蛇身和食物3. 数据结构设计4. 游戏流程设计5. 核心逻辑实现分析5. 1 游戏主逻辑5. 2 GameStart5. 2. 1 S…

145. 利用 Redis Bitmap实践: 用户签到统计

文章目录 一、Redis Bitmap简介二、Bitmap 的主要应用三、Go使用Redis实现签到统计用户签到查询用户签到状态统计今年累计签到天数统计当月的签到情况 总结 在现代应用程序中&#xff0c;用户签到是一个常见的功能。我们通常使用 MySQL 数据库来存储用户的签到记录。然而&#…

Go入门:gin框架极速搭建图书管理系统

Go入门:gin框架极速搭建图书管理系统 前言 本项目适合 Golang 初学者,通过简单的项目实践来加深对 Golang 的基本语法和 Web 开发的理解。 项目源码请私信,欢迎前往博主博客torna.top免费查看。 项目结构 D:. ├─ go.mod ├─ go.sum │ ├─ cmd │ └─ main │ …

Docker 容器编排之 Docker Compose

目录 1 Docker Compose 概述 1.1 主要功能 1.2 工作原理 1.3 Docker Compose 中的管理层 2 Docker Compose 的常用命令参数 2.1 服务管理 2.1.1 docker-compose up &#xff1a; 2.1.2 docker-compose down &#xff1a; 2.1.3 docker-compose start &#xff1a; 2.1.4 docker…

OpenCV绘图函数(7)从一个椭圆定义中提取出多边形的顶点坐标函数ellipse2Poly()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 近似一个椭圆弧为一个多边形线。 函数 ellipse2Poly 计算近似指定椭圆弧的多边形线的顶点。它被 ellipse 函数所使用。如果 arcStart 大于 arcEn…

景芯SoC A72实战反馈

先说结论&#xff1a; 内容非常全面&#xff0c;讲解到位&#xff0c;会有专门的工程师一对一答疑&#xff0c;整个项目跑下来提升非常大&#xff0c;绝对物超所值&#xff01; 一些细节&#xff1a; 本人微电子专业研一在读&#xff0c;有过两次简单的数字芯片流片经历&…

spring security 相关过滤器

Spring Security 提供了 30 多个过滤器。默认情况下Spring Boot 在对 SpringSecurity 进入自动化配置时&#xff0c;会创建一个名为 SpringSecurityFilerChain 的过滤器&#xff0c;并注入到Spring容器中&#xff0c;这个过滤器将负责所有的安全管理&#xff0c;包括用户认证、…