写了一个适用于气象项目的任务流引擎

开发了很多年气象项目,后端的技术路线从开始的单体应用发展为现在的微服务架构,但是总的看来,气象后台最常见的内容并没有变,比如数据采集、定时数据处理、定时出图等。以前一直都是针对特定项目去做一些特定的定时任务,这样下来代码的复用率比较低,而且每次开发过程都需要从头写到尾,因此打算写一个通用的任务流引擎来做一些基础的工作,这样不仅可以支持单个任务的调度,也能支持一个从数据采集到图形绘制的完整任务流程配置。

开源的任务流引擎也有不少,但是大多体量较大,而且很多更适合单体应用,在微服务体系下不太容易集成,有些又是基于大数据架构(如Hadoop)进行调度,这些对于一般的气象项目来说稍微复杂,比如项目较小的时候是不可能有机器让我们弄个Hadoop的。另外就是项目开发人员水平不一,如果让每个开发人员都要学习很多附加知识才能开始去开发,那么整体进度就会变慢,因此我需要的是一个可以让开发人员只关注自己逻辑的一个微服务架构下的分布式任务流引擎。

因此,最终自己写了一个,该引擎具有以下特征:

1、完全集成在spring cloud框架下,可以方便的对接微服务体系,支持服务治理和数据监控等特性

2、基于消息的发布和订阅模式,使用kafka作为调度消息传播中间件

3、流程完全可追踪,每个任务流执行的每一步过程结果都可以进行回溯

4、任务流支持分支任务和分支任务合并

5、客户端采用插件式结构,增加新的任务处理功能只需要将实现了指定接口的jar包放到插件目录即可

6、服务端支持对客户端新增任务插件的自动发现

当然,目前还有点小小的遗憾,虽然客户端支持分布式部署和负载均衡,但是服务端目前是单点的,主要是考虑到分布式在任务无重复发布上比较难,后续可以考虑通过zookeeper的leader选举功能,选出一个leader进行任务分发,其余的作为热备份,因为服务端只做消息收发没有任务处理,因此能承载的吞吐量很大,所以单点加热备一般能够满足气象项目的常见需求了。

这样以后要写个数据采集,只需要简单的实现一下相关接口,然后把jar包丢到客户端插件目录就可以啦,完全不需要考虑其他的。

写了一个适用于气象项目的任务流引擎:等您坐沙发呢!

发表评论

点击正确的图片来提交评论:
快捷键:Ctrl+Enter