编排微服务的标准模式是什么?
如果一个微服务只知道它自己的域,但是有一个数据流要求多个服务以某种方式交互,那么该怎么做呢?
假设我们有这样的东西:
发票
装运
为了便于讨论,让我们假设订单发出后,应该创建发票。
在某个地方,有人按下GUI中的一个按钮,“我完成了,让我们开始吧!”
在经典的整体服务体系结构中,我认为要么有ESB处理这个问题,要么发货服务了解发票服务并直接调用它。
但是,在这个勇敢的微服务新世界中,人们是如何处理这些问题的呢?
我知道这可能被认为是高度基于观点的。但它也有具体的一面,因为微服务不应该做上述事情。
因此,必须有一个“根据定义,它应该做什么”,而不是基于意见。
开枪。
那么,微服务的编排与非“微”的旧SOA服务的编排有什么不同呢?一点也不多。
微服务通常使用http (REST)或消息/事件进行通信。业务流程通常与业务流程平台相关联,这些平台允许您在服务之间创建脚本化的交互,以使工作流自动化。在旧的SOA时代,这些平台使用WS-BPEL。今天的工具不使用BPEL。现代编配产品的例子:Netflix Conductor, Camunda, Zeebe, Azure Logic Apps, Baker。
请记住,编排是一种复合模式,它提供多种功能来创建复杂的服务组合。微服务通常被视为不应该参与复杂组合的服务,而是更自治的服务。
我可以看到在编排工作流中调用微服务来做一些简单的处理,但我没有看到微服务是编排服务,它通常使用补偿事务和状态存储库(脱水)等机制。