编排 vs. 协作

281

从组织内部角度看,服务编排和服务协作有哪些区别。

11个回答

547

基本技术(如XML、SOAP、WSDL)提供了描述、定位和调用服务的手段,使其成为一个独立实体。但是,这些技术并不提供关于服务在更复杂协作中的行为细节。这种协作包括一系列活动和活动之间的关系,构建业务流程。有两种构建此过程的方式:服务编排和服务协同。

服务编排

服务编排代表单个集中式可执行业务流程 (即编排器),协调不同服务之间的交互。编排器负责调用和组合服务。

所有参与的服务之间的关系由单个端点 (即综合服务) 描述。编排包括管理个别服务之间的事务。编排使用中央集权的方法进行服务组合。

Orchestration

服务协同

服务协同是参与服务的全局描述,由两个或多个端点之间的消息交换、交互规则和协议定义。协同使用分散的方法进行服务组合。

Choreography

协同描述多个服务之间的相互作用,而编排则代表来自一方的控制。这意味着协同编排在控制涉及的服务之间的交互的逻辑所在方面不同。


15
你有很棒的图片展示了两个东西!你从哪里得到它们的? - David Mann
12
感谢您的评论,如果您认为有用,请点赞。这些图表是我使用Visio制作的,并参考了一些服务组合的文献。然而,我意识到这个答案是在两年前写的,当时我刚开始阅读有关服务组合的内容。我会更新这个答案的参考文献,并详细说明两者的属性。 - Andrei
1
@Andrei:这再简单不过了。 - Anshul Nigam
将编排和编舞混合使用是否合理?例如,对于核心同步工作流程进行编排,然后使用一些编舞将异步事件流返回到源能力(微服务)。在我的情况下,这种方法可能会节省我执行saga/state-machine和补偿逻辑的时间。 - Ryan.Bartsch
8
有些读者可能会从你的编排图中推断出编排意味着由控制服务对提供服务进行同步调用。我想澄清的是,Invoke-Reply通信也可以使用异步方法完成,包括通过消息代理。 - Christoph

75

服务编排: 您可以通过固定逻辑组合多个服务。这个逻辑在一个地方进行描述。您可以想象一组人中有一个经理进行微观管理。经理精确告诉他们何时、何物以及谁应该做什么。团队成员不需要关心整个工作的目标,经理将输出组合成一个交付成果。

一个实际示例是 BPEL 流程。BPEL 流程包含逻辑,可以调用多个服务,并将它们的响应组合成一个单一的服务响应。

服务编舞: 决策逻辑是分布式的,没有集中点。您可以想象一个家庭,每个人都为了共同的利益而努力工作,无需微观管理。或者您可以想象一个人体,不同的成员相互依存,为共同的目标而努力工作。

一个实际的例子是事件驱动处理,其中代理由事件激活并完成其工作。所有代理一起构成一个系统。没有集中的逻辑。

我的观点是,我们不需要在这两者之间做太多区分,因为我们需要关注业务逻辑。当一个单一的逻辑点完成任务时,我们就进行编排。当问题无法被集中逻辑解决时,我们不得不进行编舞。这就是为什么在 IT 中我们经常会遇到编排,而编舞更多地是一个学术概念和研究课题。在现实世界中,我们往往在不知不觉中进行编舞。


30

由于这个帖子已经过时,但对那些像我一样在寻找这个问题的人仍有帮助。这是面向服务的架构(SOA)中备受争议的问题,需要为初学者提供更清晰的解释。

编排:可执行流程

  • 用于私有业务流程
  • 一个中央进程(可以是另一个 Web 服务)控制所涉及的 Web 服务,并协调不同操作的执行
  • 所涉及的 Web 服务不“知道”(也不需要知道)它们参与了组合过程,并且它们参与了更高级别的业务流程。
  • 只有编排的中央协调者知道这个目标,因此编排是集中的,并明确定义了操作和 Web 服务调用的顺序。

enter image description here

编排:多方协作

  • 相比之下,编排不依赖于中央协调员。相反,参与编排的每个Web服务都知道何时执行其操作以及与谁进行交互。编排是一项协作努力,专注于公共业务流程中的消息交换。

  • 编排中的所有参与者都需要了解业务流程、要执行的操作、要交换的消息以及消息交换的时间。

enter image description here

编排 vs. 协作

  • 从组合Web服务来执行业务流程的角度来看,编排是一种更灵活的范例,相对于协作具有以下优点:

  • 组件流程的协调由已知的协调器进行集中管理。

  • Web服务可以被纳入其中而不知道它们正在参与更大的业务流程。

  • 在发生故障的情况下,可以实施备选方案。

2
实际上,编排通常依赖于中央协调器 - 通常该协调器是某种分布式消息代理。如果不使用类似消息代理的东西,将会以非常不灵活的方式将您的服务绑定在一起,导致脆弱性和低可重用性。 - Rodney P. Barbati
3
不要关注@RodneyP.Barbati。异步消息总线如何缓解依赖脆弱性,等同于中央协调器。消息代理完全是愚笨的,并且不知道可能依赖它的任何进程。 - Benny Bottema
@Benny Bottema - 因为在该过程中涉及的每个服务/函数都会发送消息,以触发过程链中的下一个服务/函数。它们不会直接调用下一个服务/函数。 - Rodney P. Barbati
3
除了总线不协调任何事情之外,恰恰相反:事件和消费服务形成了一种编排,总线对此毫不知情。https://solace.com/blog/microservices-choreography-vs-orchestration/ - Benny Bottema

25

服务可以区分为原子服务和由其他服务组成的服务。这样的组合被称为“编排”。有时候它也被称为工作流,有时候又被称为业务流程。例如,BPEL是一种编排语言,但它自称为“业务流程执行语言”。

并非所有服务都需要按层次结构组成。也就是说,两个服务可能会相互通信。在它们之间运行的协议称为“编舞”。它可能涉及两个服务,但通常会涉及更多的服务。编舞中的每个服务都可以看作是伙伴服务的编排器。参与编舞的每个服务都可以作为编排/工作流/流程实现。

编排显示了每个服务的完整行为,而编舞则结合了每个服务的接口行为描述。

一个好的科学文章可以区分编舞、接口行为、提供者行为和编排,具体内容请见下面链接:Dijkman, R. & Dumas, M. Service-oriented Design: A Multi-viewpoint Approach International Journal of Cooperative Information Systems, 2004, 13, 337-368


18

Andrei和其他人很好地解释了什么是编排和协同。对于选择这两个替代方案的软件架构师来说,比较它们在不同方面的优劣也很重要。

编排优于协同的方面

  • 可靠性:编排平台内置错误处理和事务管理(补偿事务)的支持。在协同中,自定义开发的工作流和错误处理往往更容易出错。此外,协同通常是事件驱动的,大部分处理都是异步的。因此,协同可能需要撤销/纠正事件,从而增加了解决方案的复杂性。
  • 可修改性:在编排平台中找到的可视化BPM工具中创建和更改过程工作流和复杂服务组合更容易。您可以获得“流程可见性”。

协同优于编排的方面

  • 性能:由于工作流脚本解释和编排平台本身的额外层,编排会产生性能开销。

  • 成本:协同不需要附加的中间件或语言,这些都有学习曲线和管理负担。

编辑

如果编排器元素没有使用高可用性机制,编排解决方案可能会引入单点故障。感谢@Deepak在评论中指出这一点。


5
除了编排,确实需要额外的中间件。 需要将要求(任务)与不同节点匹配。 然后部署、执行、监视和调整编排。 所有这些管理都需要通常由中间件提供的工具。 - Andrei
5
管弦乐(Orchestration)不会像编舞(Choreography)那样存在单点故障的劣势,这句话的意思是什么? - Deepak
请注意,对于可能跨越数天或数周的业务流程,击中流程引擎时产生的一些开销并不会对其产生太大影响。 - Paul de Vrieze
1
@Deepak,一个进程引擎可以使用复制数据库来存储其状态。在这种设置下,故障转移不会太困难。此外,可以有多个引擎(每个流程实例只有一个引擎,对于编排也是如此 - 只是编排不会按设计存储(单独的组件可以/可能会存储))。 - Paul de Vrieze
4
目前来看,编排工具最大的优点是过程的透明度,而在编舞模式下,除非有全面的文档可用(通常没有),否则流程往往不清晰。例如,事件驱动的流程(编舞模式)具有巨大的优势,但有时要想弄清楚流程如何进行就会感到十分困难。 - Benny Bottema
1
更不用说当编排中的服务组合变得足够庞大时,您需要协调机制来确保系统正确性和异常检测。 - varun

8

另一种理解服务编排和编舞的方式:

- 服务编排:基于业务领域。
- 服务编舞:跨多个业务领域。


8

管弦乐是在您控制过程中的所有演员时非常有用的,当它们都在一个控制域中并且您可以指定活动流时。这当然最常见的情况是在您指定将在您拥有控制权的一个组织内执行的业务流程时。

编舞是一种指定如何协调两个或多个各自没有对其他方的过程控制或可见性的各方的活动和过程以共享信息和价值的方式。当需要跨控制/可见性域进行协调时,请使用编舞。在一个简单的场景中,您可以将编舞视为网络协议。它规定了各方之间请求和响应的可接受模式。


6

2
一个系统中可以同时使用编排和管道两种方式,就像我们在产品中所做的那样。各个参与者执行各自的任务,并通过事件发布/订阅系统进行编排。例如,当一辆运输货柜的卡车到达仓库时,由其生成的该事件被仓库管理应用程序订阅,促使仓库管理员启动资源以卸载货物。
但是当出现异常情况时,比如叉车损坏无法运输货物,该事件会启动一个编排引擎(工作流处理器),根据异常处理工作流程为各个参与者协调任务,以处理异常情况。

是的,这似乎在行业中被称为 "混合" 方法,即同时使用编排和协同的方法。在网上搜索 "orchestration choreography hybrid" 可以得到许多用例示例。 - cellepo

1
在编排中,有指挥和乐手。乐手根据指挥的指导演奏。如果换了指挥,谐波表达会不同,即仍然是同一场演出(服务),但结果不同。例如,为了提供财务安排方案,编排服务将通过询问(调用)每个乐手(实体或实用服务,例如信用检查)根据指挥的模板(业务规则)演奏(返回结果或调整/更新其演奏)。 在舞蹈编排中,有编舞者和一组舞者。编排是一个方向,但每组舞者在如何实现这个方向上是自主的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接