由于服务组合与服务协作都涉及一组服务以及这些服务之间的交互和协作,很容易混淆,在此作一区分:
1、在SOA中,所谓服务组合是指以流程的方式完成服务的编排(orchestration)。服务的编排由一个中心协调者(如音乐指挥)完成。这个中心协调者依据流程规划协调对不同服务的调用,以完成既定的业务目标,而参与流程的服务并不知道流程的全貌。服务组合语言就是编制服务调用的流程规划的语言,该流程规划一般也具有服务接口,称为复合服务。
2、在服务协作中,并不存在一个中心协调者,所以服务以对等的方式互相协作,因此每个服务都需要知道和说明自己接受和发送消息的约定。描述这种约定的语言通常称为编舞(choreography)语言。之所以称为编舞是因为服务的协作就像表演的一个集体舞蹈,所有服务作为参与者都需要事先明确自己的活动顺序,协作开始执行后没有一个中心协调者告诉你什么时候该干什么。
服务组合和服务协作之间存在一定的联系,比如如果把中心协调者看成一项普通服务,那么服务之间的协作可以由某种服务编排语言来描述。