从定时任务到流程引擎,数据注入方式的演变

        媒资统一分发中心系统主要负责公司的生产的电影、电视剧等媒资元数据信息以及对应的介质实体文件地址信息,通过接口发送到三方系统。因三方系统接口类型多样性、媒资元数据信息传递格式的多样性和需求多变性,要求媒资分发中心有很高的灵活性,功能方面要有很强的扩展性。随着后期对接项目越来越多,又要求一个项目有需求变动,不能影响其它项目。自从2015年接手媒资数据分发业务以来,媒资分发中心经历了几次系统重构,刚接手时平台采用传统定时任务+条件确定执行流程的方案;第一次重构改为消息队列+组装配置流程+线程池+模板的方案;最近一次重构成流程引擎+消息队列的方式。


下面记录不同版本的方案以及问题

一、传统定时任务方式
本方案采用quartz定时器实现,从母公司直接copy过来,不再过多介绍。
1、新增项目时,需要在系统里添加新对接类型,在程序里判断项目类型,重新实现业务流程。
2、修改需求时,在对应项目的业务流程修改逻辑。
3、代码强偶合,任何修改都可能影响其它流程。
4、业务改动时,需要升级系统,暂停其它项目的注入。

5、基本没有灵活性和扩展性


二、生产流程水线方式

本方案采用工业生产流水线的思想,把媒资元数据注入流程拆分成多个单独的子功能,每个功能由单独线程实现,每个功能线程从MQ中读取数据,处理完后,放回MQ中,下个线程接着处理。把所有的线程用配置文件的方式,根据各线程读写MQ队列数据的关系串起来,组成一套数据处理流程生产线。整个系统共用一套生产线,所有分发域将要分发的数据都经过该生产线。分发域基本配置信息中,可以配置是否执行某个线程的功能,如果配置不执行,数据经过该线程,没有任何操作,直接写回MQ中。系统为每个分发域配置一个freemarker模板,用来生成注入报文;每个分发域单独线程注入,注入接口实现采用工厂模式,新增接口类型只需添加一个实现方法,某个分发域注入状态不影响其它分发域。

1、新增项目时,通过WEB新增报文freemarker模板,新增接口实现方法。正常情况下都是通过标准C2接口和HTTP POST,基本没有其它接口,因此也基本不需要新增接口。

2、修改需求时,在对应的功能线程中修改。

3、代码偶合较弱,新增项目基本只编写一个freemarker模板即可,新增、修改流程对其它项目影响较小
4、业务改动时,需要升级系统,暂停其它项目的注入。

5、灵活性和扩展性一般


三、流程引擎
本方案采用流程引擎和微服务的思想,基于springboot、zookeeper和MQ实现了流程制作、管理与执行的系统,此版本脱离媒资元数据分发业务,重命名为流程制作管理平台,整个平台分为流程制作管理平台和流程执行容器。前一个版本的功能线程进一步细分,拆分成粒度更小的独立功能,每一个小功能用注解或配置文件的方式标记为组件,注册到平台。接入项目时,根据项目具体流程,通过可视化流程制作页面用拖拽的方式,把一个个功能组件组装成业务处理流程,由管理平台页面控制执行流程在指定的容器中执行。流程制作管理平台已放在github上开源,地址是:https://github.com/cminirice/pm,想知道更多细节的朋友可以查看github上的说明。
1、新增项目时,针对项目的注入流程单独组装一套流程或者复制其它项目流程,每个项目一个流程,代码执行上互不影响。
2、修改需求时,只需修改相应的组件和流程。
3、代码偶合低,新增项目时只需要添加freemarker模板和流程,新增功能时,只需添加新组件,完全不影响其它项目。
4、业务改动时,修改或者新加相应的功能组件,重新修改流程,完全不影响其它项目。

5、灵活性和扩展性高


猜你喜欢

转载自blog.csdn.net/minimice/article/details/80680057