从组织内部角度看,服务编排和服务协作有哪些区别。
基本技术(如XML、SOAP、WSDL)提供了描述、定位和调用服务的手段,使其成为一个独立实体。但是,这些技术并不提供关于服务在更复杂协作中的行为细节。这种协作包括一系列活动和活动之间的关系,构建业务流程。有两种构建此过程的方式:服务编排和服务协同。
服务编排代表单个集中式可执行业务流程 (即编排器),协调不同服务之间的交互。编排器负责调用和组合服务。
所有参与的服务之间的关系由单个端点 (即综合服务) 描述。编排包括管理个别服务之间的事务。编排使用中央集权的方法进行服务组合。
服务协同是参与服务的全局描述,由两个或多个端点之间的消息交换、交互规则和协议定义。协同使用分散的方法进行服务组合。
协同描述多个服务之间的相互作用,而编排则代表来自一方的控制。这意味着协同与编排在控制涉及的服务之间的交互的逻辑所在方面不同。
服务编排: 您可以通过固定逻辑组合多个服务。这个逻辑在一个地方进行描述。您可以想象一组人中有一个经理进行微观管理。经理精确告诉他们何时、何物以及谁应该做什么。团队成员不需要关心整个工作的目标,经理将输出组合成一个交付成果。
一个实际示例是 BPEL 流程。BPEL 流程包含逻辑,可以调用多个服务,并将它们的响应组合成一个单一的服务响应。
服务编舞: 决策逻辑是分布式的,没有集中点。您可以想象一个家庭,每个人都为了共同的利益而努力工作,无需微观管理。或者您可以想象一个人体,不同的成员相互依存,为共同的目标而努力工作。
一个实际的例子是事件驱动处理,其中代理由事件激活并完成其工作。所有代理一起构成一个系统。没有集中的逻辑。
我的观点是,我们不需要在这两者之间做太多区分,因为我们需要关注业务逻辑。当一个单一的逻辑点完成任务时,我们就进行编排。当问题无法被集中逻辑解决时,我们不得不进行编舞。这就是为什么在 IT 中我们经常会遇到编排,而编舞更多地是一个学术概念和研究课题。在现实世界中,我们往往在不知不觉中进行编舞。
由于这个帖子已经过时,但对那些像我一样在寻找这个问题的人仍有帮助。这是面向服务的架构(SOA)中备受争议的问题,需要为初学者提供更清晰的解释。
编排:可执行流程
编排:多方协作
相比之下,编排不依赖于中央协调员。相反,参与编排的每个Web服务都知道何时执行其操作以及与谁进行交互。编排是一项协作努力,专注于公共业务流程中的消息交换。
编排中的所有参与者都需要了解业务流程、要执行的操作、要交换的消息以及消息交换的时间。
编排 vs. 协作
从组合Web服务来执行业务流程的角度来看,编排是一种更灵活的范例,相对于协作具有以下优点:
组件流程的协调由已知的协调器进行集中管理。
Web服务可以被纳入其中而不知道它们正在参与更大的业务流程。
服务可以区分为原子服务和由其他服务组成的服务。这样的组合被称为“编排”。有时候它也被称为工作流,有时候又被称为业务流程。例如,BPEL是一种编排语言,但它自称为“业务流程执行语言”。
并非所有服务都需要按层次结构组成。也就是说,两个服务可能会相互通信。在它们之间运行的协议称为“编舞”。它可能涉及两个服务,但通常会涉及更多的服务。编舞中的每个服务都可以看作是伙伴服务的编排器。参与编舞的每个服务都可以作为编排/工作流/流程实现。
编排显示了每个服务的完整行为,而编舞则结合了每个服务的接口行为描述。
一个好的科学文章可以区分编舞、接口行为、提供者行为和编排,具体内容请见下面链接:Dijkman, R. & Dumas, M. Service-oriented Design: A Multi-viewpoint Approach International Journal of Cooperative Information Systems, 2004, 13, 337-368
Andrei和其他人很好地解释了什么是编排和协同。对于选择这两个替代方案的软件架构师来说,比较它们在不同方面的优劣也很重要。
编排优于协同的方面
协同优于编排的方面
性能:由于工作流脚本解释和编排平台本身的额外层,编排会产生性能开销。
成本:协同不需要附加的中间件或语言,这些都有学习曲线和管理负担。
如果编排器元素没有使用高可用性机制,编排解决方案可能会引入单点故障。感谢@Deepak在评论中指出这一点。
另一种理解服务编排和编舞的方式:
- 服务编排:基于业务领域。
- 服务编舞:跨多个业务领域。
管弦乐是在您控制过程中的所有演员时非常有用的,当它们都在一个控制域中并且您可以指定活动流时。这当然最常见的情况是在您指定将在您拥有控制权的一个组织内执行的业务流程时。
编舞是一种指定如何协调两个或多个各自没有对其他方的过程控制或可见性的各方的活动和过程以共享信息和价值的方式。当需要跨控制/可见性域进行协调时,请使用编舞。在一个简单的场景中,您可以将编舞视为网络协议。它规定了各方之间请求和响应的可接受模式。