- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
Dolphin在平安的重构及落地经验
展开查看详情
1 . 2021 Dolphin在平安的 架构重构及落地经验 讲师
2 .目录 CONTENTS 01 缘起 02 调研 03 重构 04 落地 展望
3 .01 - 背景 缘起 - 需求分析
4 .使用背景 业务支持 公司商业版替换 调度 基础框架整合 大数据平台规划
5 .需求分析 拖拽dag 任务可视化 任务分片 需求 简单易用 高频短任务 自定义扩展
6 .02 - 选型 调研 - 需求分析
7 .调研 业界已有产品 dag自定义不方便 扩展性性不友好
8 .架构分析
9 .测试 高频短任务执行延迟,Command表积压
10 .积压分析 producer command consumer
11 .任务执行分析 任务执行过程: 因为任务是以dag工作流的形式执行,实际执行的是任务链。 Master执行command,解析每个dag节点依赖的任务, 每个任务通过rpc交付work节点执行, 同步等待执行结果。 问题: 同步等待依赖的任务结果,如果任务执行时间稍长,容易耗尽master线程资源, 进一步加剧任务堆积阻塞 解决思路: 任务异步回调结果,减少master线程轮询
12 .Master组件分析 Master主要做四件事: 1. Quartz生成command 2. Command获取 3. DAG解析 4. 任务分发 任务触发与分发
13 .任务触发分析 任务触发过程: 1.基于Quartz扫描trigger表触发生成command,放入command表 2.master节点拿到zk锁,从command表获取command(默认一个) ,提交线程池后释放zk锁 Quartz问题: 1.同时只有一个quartz实例获取悲观锁获取job 2.没有负载均衡 3.频繁扫表,不适合大量短任务 4.多节点解决高可用,但没有解决任务分片问题,不能水平扩展 Master组件问题和quartz类似
14 .思考 1. 如何减少扫表,任务如何并发触发 2. 任务如何减少阻塞
15 .03 - 任务触发 重构 - 任务执行
16 .任务触发 延时消息借鉴: QMQ
17 .触发设计 day.lo hour.lo triggerMsg g dispatch g linklist 3600 1 2 timeWheel delayQueue 3 4…..3599
18 .任务执行 triggerEvent processInstanceEvent taskPreEvent taskExecEvent nextTask taskCompleteEvent processInstanceCompl eteEvent
19 .整体架构 Api i Api Delay(m) Delay(s) db event event event callBack mq Zk event event cluster alert core core core logserver logserver logserver client client client
20 .04 - - 迁移 任务分片 落地 - 结果传递 - 工作组管理 - 日志清理 - client
21 .迁移 旧 新 1.业务相关任务。特定时间段逐步分批迁移 2.非业务相关任务。测试后统一迁移
22 .任务分片 taskInstance pretaskExecEvent taskInstance taskInstance _3 _1 taskInstance _2 taskExecEvent
23 .结果传递 ProcessInstance taskInstance _3 taskInstance_1 taskInstance_2
24 .工作组管理 ui api zk core core 1. Api动态管理 2. Zk维护活跃ip,掉线踢出工作组
25 .日志清理 生成日志路径时按月归档: /month/processeInstanceId/taskInstanceId/log 后续日志云接入,根据id直接跳转查询
26 .client 1. 统一任务执行接口 2. 异步回调结果 3. 工作流创建api
27 .05 - k8s结合 展望
28 .K8s结合 gitlab 1 3 jenkins dolphin api 2 4 5 imagehub dolphin core k8s pod
29 . THANKS! Ending