浅谈如何进行技术选型 (以工作流引擎技术选型为例说明)
在研发过程中,我们会面临各种技术抉择。应该如何选择?选择哪种技术?为何选择这种技术?我们不认真考虑的话,往往会说不清道不明。下面根据常用的技术选型套路,来说明如何进行技术选型。文中以工作流引擎技术选型为例详细说明。
(一)了解内部情况,确定问题范围
不确定“问题”就无所谓“解”。我们分析了解到电子政务领域的各种活动中,工作流程无处不在。我们系统包括综合办事系统、联合审批系统、社区事件管理等的业务审批,都存在各式各样的业务流程。我们对主要业务流程进行分析,了解各产品部门对流程控制要求。当前工作流程管理、控制上主要存在三大问题:
1、 流程逻辑与其它业务逻辑耦合,对业务流程的修改“伤筋动骨”
2、业务流程可视化程度低,可管理程度低
3、流程过程数据缺乏有效的记录
工作流引擎技术就是主要为解决这三大问题。
(二)研究外部发展,跟踪业界动态
研究外部技术领域的发展,主要关注相关业界规范的发展及主要厂家对规范支持情况。我们了解到BPMN2.0是业务流程最新规范。BPMN2.0定义了业务流程的元模型和执行语义,解决了存储、交换和执行的问题。BPMN目前已经被广泛接受,各大厂商都支持BPMN标准定制出各自的工作流引擎。业务流程规范近年的发展情况及主要厂商实现情况如下:
(注:工作流技术选型在2013年)
(三)锁定目标,定义效果
结合内部现状和外部发展,我们就可以基本锁定要解决问题范围,进而细化出我们的“解”需要达到的目标与效果。我们要在现有开发平台集成成熟的工作流技术,统一实现业务流程控制逻辑,使业务系统不需要关心业务流程控制,而专注于自身业务功能的开发,加快业务系统的建设。我们要实现目标和效果主要有:
1、 统一控制流程逻辑,使之与业务逻辑脱离
2、 具备开放性和可扩展能力:基于业界标准规范BPMN2.0;支持自定义流程,方便与业务表单整合关联。
3、 可视化可管理能力:实时掌握流程状态,图形化展示;业务流程全过程档案,支持统计分析。
4、 快速实施能力:支持流程编排;流程快速部署实施。
(四)遵循选型标准,做出初步选择
技术选型主要原则“主流,适用,简单”,且符合一定性能和安全要求。其中主流指是技术应为事实标准,社区支持强大,成熟、稳定、好找人,发展向好;适用是指需求驱动,满足我们的应用要求;简单指可控可驾驭,可扩展,轻量级。
根据工作流引擎的特点,我们定义以下选型标准;并比较当前主要技术,初步确定在Activiti5和jBPM5之间选择。根据选型标准对比如下:
序 | 选型依据 | 具体内容 | 比较说明 |
1 | 公司的未来发展 | 与公司技术架构规划及技术路线相匹配。 | 都匹配。 |
2 | 与开发平台融合 | 符合J2EE规范,易于与Spring整合。 | 都符合J2EE规范,但Activiti5更易于与Spring整合,jBPM5与Spring整合要做大量工作。Activiti5 持久层虽然是采用MyBatis3,但其支持JPA规范的扩展,能够很方便运用Hibernate实现扩展。 |
3 | 行业标准的支持 | 符合BPMN2.0规范。尽量兼容其他规范。 | 都符合BPMN2.0规范。Activiti对多种流程格式都支持,jBPM5稍弱。 |
4 | 技术先进性与完整性 | 流程设计开发能力,支持可视化建模快速开发,支持流程快速变更,支持流程版本控制;人工任务处理能力;流程仿真、监控能力。 | 基本平手。Activiti版本更新更频繁,技术跟进及时。 |
5 | 稳定性、成熟度 | 多线程并发下稳定运行,能适应分布式部署要求,易于测试。 | 测试报告及社区使用显示都足够成熟稳定。 |
6 | 开源、易用 | 作为开发平台的一个功能插件,必须开源。并且要能快速上手易于学习,相关文档资料齐全,对应技术社区成熟活跃。 | 都为开源,均基于Apache License。JBoss社区名气大,但在工作流引擎方向社区活跃相当。Activiti5更忠于原有业界最流行的jBPM4以前的实现,其概念模型,编程模型等更加容易接受。 |
7 | 集成整合能力 | 易接入ESB平台,易于集成规则引擎。 | Activiti能够很好支持规则引擎;jBPM5基于Drools构建,对规则引擎天然支持。在对ESB平台接入方面,Activiti对更多现有ESB平台提供支持,尤其支持我们的ESB选型Mule。 |
锁定主要选型后,必要情况要做更多的技术比较:
序 | 技术组成 | Activiti5 | jBPM5 |
1 | 数据库持久层ORM | MyBatis3 | Hibernate3 |
2 | 持久化标准 | 支持JPA规范 | 支持JPA规范 |
3 | 事务管理 | MyBatis机制/Spring事务控制 | Bitronix,基于JTA事务管理 |
4 | 数据库连接方式 | Jdbc/DataSource | Jdbc/DataSource |
5 | 支持数据库 | Oracle、SQL Server、MySQL等多数数据库 | Oracle、SQL Server、MySQL等多数数据库 |
6 | 内部服务通讯 | Service间通过API调用 | 基于Apache Mina异步通讯 |
7 | 集成接口 | SOAP、Mule、RESTful | 消息通讯 |
8 | 支持的流程格式 | BPMN2、xPDL、jPDL等 | 目前仅只支持BPMN2 xml |
9 | 引擎核心 | PVM(流程虚拟机) | Drools |
10 | 技术前身 | jBPM3、jBPM4 | Drools Flow |
11 | 所属公司 | Alfresco | jBoss.org |
(五)评审确认最终选型
召开技术选型评审会,借助其他人员的视觉,帮助发现选型问题。如果涉及重大技术选型,需要重点参考技术总监、产品总监的意见,甚至可以请教更高层级。各位专家技术与业务敏锐度,结合足够精细前置分析,容易做出适合现状判断。
我们最终确定选择Activiti5作为我们的工作流引擎。
我们研发过程的技术选型,甚至其他生产或管理过程的工具选择,都可以参考以上技术选型套路。虽然某些工具层面的选型要求也许不那么细致,仍然需要考虑周全。我们的创造之源就在于我们对事物客观、精确、全面的了解与分析。