知识卡片
服务、流程定义、流程实例与引擎的关系,及独立应用宜用独立引擎
内容
服务、工作流引擎、流程定义、流程实例四者的关系可以用数据库来类比:把工作流引擎当服务启动后,可以在它上面部署许多流程定义,每个流程定义又能启动任意多个流程实例,还能让其他服务或微服务来调用这个工作流引擎——就像一个数据库实例里能建多张表、还能被多个服务连接一样。但对独立的应用程序而言,最好使用独立的工作流引擎实例,以提高隔离度——尤其在使用微服务架构时更该如此。举例说明:负责订单履约的团队维护自己的工作流引擎,不愿意和支付团队共享一个引擎、希望与支付团队做的任何事都能隔离开,但这不代表这个引擎只能给一个服务用——订单履约服务和订单取消服务可以共用同一个引擎、各自部署自己的流程定义。这条建议和微服务架构里”每个服务拥有自己的数据存储”的原则是同一种考量:共享的基础设施(无论是数据库还是工作流引擎)一旦被多个边界不同的团队/服务混用,隔离性就被削弱了,一方的问题(性能瓶颈、错误配置、故障)更容易波及另一方。
参考来源
- 位置:《流程自动化实战:系统架构和软件开发视角》第2章《工作流引擎和流程解决方案》"2.4 服务、流程和工作流引擎"(源文件:_epub-src/EPUB/xhtml/Section0001_0005.xhtml)
- 结论依据:原文用数据库类比说明工作流引擎可承载多个流程定义与多个调用方,并明确建议独立应用使用独立工作流引擎以提高隔离度,用订单履约团队不愿与支付团队共享引擎、但可与订单取消服务共用引擎的例子说明这一原则,直接支撑本卡片结论。
- 原始内容:这和数据库的使用类似,你可以在库中创建多个表,还可以让不同的服务连接这个库。然而,对于单独的应用程序,最好使用单独的工作流引擎,这样可以提高隔离度。特别是在使用微服务时更当如此。