点击蓝字 关注我们


用户案例 | 珍岛集团
珍岛集团致力于打造全球领先的智能营销云平台,在国内率先推出的Marketingforce(营销力)平台,专注于人工智能、大数据、云计算在数字营销及企业数字化智能化领域的创新与实践,面向全球企业提供营销力软件及服务,以一站式智能营销生态助力企业进行数字化转型。
之前,珍岛集团使用完全开源的Apache DolphinScheduler任务调度框架,随着业务的发展,以及数据集成平台和GMA,算法计算平台越来越多的业务需求,开源版本的Apache DolphinScheduler已经不能完全满足需求,迫切地需要对Apache DolphinScheduler做一些定制化的开发。以下是珍岛集团团队最近一年在开源版本的基础上进行的优化和改进。
业务需求
01
技术方面
期待简单易用,低代码的方式; Plug-in足够多,能够符合各业务模块需求; 活跃的开源社区,优秀的人才; 技术栈能够和珍岛现有各业务模块高度吻合; 后期新建业务模块时,不需要过多的二次开发。
02
业务方面
对调度系统的稳定性要求高; 高并发情况下,任务能够正常执行。
架构设计

二次开发实践
01
MQ解耦



02
用户自定义邮件
03
DataX on K8S与在本地运行的融合
夜间定时任务多,并发量大,在该时间段内需要的资源多,但是日间需要资源相对少很多,如果使用K8S可以释放出来给其他模块使用; DataX节点运行在worker 机器上,并发大的时候,资源使用率陡增,参数设置不正确,可能会导致OOM 的情况,交给K8S运行可保证其稳定性; worker应该只做提交任务的工作,而不是负责具体任务的运行; 减少给予worker的配置资源。消耗资源小的可以运行在本地,消耗资源大的运行在k8s上。
04
DataX改造
解耦DataX的reader和writer 的生成方式 支持动态更新自定义模版,原先的DataX类型任务,开启自定义模版,保存后存储的信息就固定了。如果数据源的账号密码或者其他信息改变。再次执行还是历史保存的信息。
05
加密指定类型的日志信息
Apache DolphinScheduler 优化实践
今年Apache DolphinScheduler刚上线时,我们发现某些项目的SUB_PROCESS节点,明明已经运行完毕,但是还是运行中的状态。通过排查发现父流程实例的失败策略为结束,并且选择并行策略。当subprocess类型节点很多的时候,一部分子流程实例已经运行成功,但是subprocess 在父流程中的任务实例还未更新成完成状态,此时一个subprocess 类型节点失败了,父流程会杀死所有存活的任务实例,所有存活的subprocess关联的子流程实例会被强制更新为ready stop 状态,导致父流程中的任务实例无法更新,所以一直显示提交成功,或者运行中状态。对此,添加subprocess 任务状态的判断条件,即可解决此问题。#14169 当任务有有问题,会造成死循环,疯狂打日志,最后磁盘打满,Apache DolphinScheduler不再执行任务的问题,同时编辑画布导致任务死循环报错的问题。对此,建议当业务出现问题时跳出死循环,以此减少日志疯狂打印,避免磁盘刷满的问题。#13045 #13053 Switch类型的任务,当switch的分支的扭转,再次交合时,执行的流程不符合预期。对此,当Switch 节点执行后续节点的分析出现了问题,可以将不该跳过执行的节点放入了skipTaskNodes中,修改switch的编排逻辑,以此解决该问题。#14537 针对当任务执行后,只会在执行完成后更新pid的问题,我们新增一个事件类型,在进程阻塞等待任务执行完毕之前,通过netty 将pid 传递给master 并及时更新到数据库。#13201 此外,在参数调优上,我们还调整了quartz 框架的org.quartz.jobStore.misfireThreshold参数,可以在夜间承载更多的并发。 还修改了check4timeOut的超时时间,以便能够减少日志大小,减少磁盘消耗。
用户收益
用户简介
致谢
感谢韩玉林,顾琦琦,以及珍岛运维部和数据平台部的协助与优化意见 感谢Radeity,ruanwenjun,以及DolphinScheduler 社区的帮助与建议
作者简介
伏长海
珍岛集团开发工程师
Apache Dolphinscheduler Contributor


文章转载自海豚调度,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




