工作流化模式
如何提高服务对不断变化的业务流程的适应性?
最容易想到的方法是每次都等待变化的需求,然后根据需求变化开发代码,更新服务。这里有几个问题。首先,为了变更需求,你需要一个完整的开发周期。其次,代码变更意味着系统的很大一部分需要重启——想一想一些诸如此类的问题吧:“我们昨天的计划会不会受到这次更新的影响?”;“会对上个周期我们添加的那个类似的东西产生什么影响?”等等。可以说越多的开发和测试就等于越长的上市时间。在我们的项目中,这意味着实施新的计划需要几个星期的时间,这会让管理部门很不高兴。这也意味着你的工作评定又降了一级,甚至更多。我们当然不能这么做。
一个较好的办法是将应用中比较稳定的部分从经常改变的部分中分离出来。比如在我们的方案中,像顾客姓名、地址等人口统计资料应该就是与销售方案无关的稳定因素。虽然如此,编排稳定的逻辑仍然是一项繁琐且容易出错的任务。或许,我们可以想个更好的办法……
解决方案:在服务中引入一个工作流引擎来处理不稳定的和经常变化的过程、以及编排稳定逻辑(stable logic)。
加一个工作流可以极大地提高业务响应能力并保持业务敏捷性。如果某个竞争对手启动了一个很受欢迎的新方案,那么这家公司就可以在一天之内回应一个有竞争力的方案。这是真正的有形商业资产。
工作流引擎的另一个优势是能够处理持续的过程。它把涉及多信息交互的全部过程直观地表示出来,使我们更容易对蓝图和过程有一个清楚的了解,因此可以从业务的角度来调试过程。 当然,工作流化也可以与其它模式结合。比如,很容易通过作业调度(几乎所有的工作流引擎都支持)实现主动式服务模式。
流程编排(Orchestrated Choreography)是一种与工作流化密切相关的模式;这两种模式都使用相同的底层技术:使用工作流引擎。不过,虽然底层技术一样,但是不同的架构考虑方式却会导致选择不一样的模式。比如,两者之间一个很明显的不同就是工作流化局限于一个单独的服务中,而流程编排则需要在服务间添加调整性工作流。