以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 Web Services & Semantic Web Services 』 (http://bbs.xml.org.cn/list.asp?boardid=10) ---- 复合服务的设计和实现[转帖] (http://bbs.xml.org.cn/dispbbs.asp?boardid=10&rootid=&id=51395) |
-- 作者:hongjunli -- 发布时间:8/15/2007 12:41:00 PM -- 复合服务的设计和实现[转帖] 作者 Boris Lublinsky译者 郭晓刚 发布于 2007年8月10日 上午4时36分 [URL=http://www.infoq.com/cn/articles/lublinsky-soa-composition]点击此处查看原文[/URL] 当前大多数SOA方面的文章书籍都集中在个别的业务服务的定义和实现。构建企业的解决方案通常都需要结合多个现有的企业服务。这些复合而成的服务又可以与其他服务再次复合成更高级的解决方案。这种业务服务的递归复合是SOA最重要的特性之一,它使我们可以快速地在现有业务服务的基础上构建新的解决方案。随着业务服务(及其复合)的数量增长,要实现新的企业解决方案也变得更加容易。 按照[URL=http://www.ibm.com/developerworks/webservices/library/ws-soa-soi2/]《Toward a pattern language for Service-Oriented Architecture and Integration 》[/URL]的定义,产生复合服务的主要推动力来自以下方面: 简化使用。当若干业务服务同时被多个消费者使用时,要向所有消费者披露其中每个服务及它们之间协作的规则等信息,这会令消费者的实现更加复杂。而当创造复合服务时,封装参与其中的服务以及强制对它们的调用规则,都能显著简化使用上的复杂性。 在本文中,我们将分别从设计和实现两方面讨论复合服务的主要方式。 复合设计 服务的交互 分层复合 图1 分层服务复合 这种复合方式对于实现逐层分解的系统来说非常自然。每个层次被实现成一个独立的复合服务,并协调低一层的(符合)服务的执行。这也是工作流系统中对高层方案通常采用的建模方式——对一系列活动进行组合,而每个活动可对应一个低层的业务过程、或者由人或程序执行的一项任务。虽然任意复合服务可被使用它的外部系统监控和中断,但除了最初的调用之外,复合服务并不与服务的消费者发生任何其它功能性的交互[URL=http://www.infoq.com/cn/articles/lublinsky-soa-composition#ftn.id1]1[/URL]。 虽然黑盒复合方式(分层复合)是对付复杂性的强有力工具,但在某些情况下消费者仍然需要根据执行的即时结果来控制复合服务的执行。会话复合可以完成这种功能。在会话复合的情形中,复合服务的实现对于服务的消费者仍然是完全不透明的,但特定的即时执行结果可被暴露给消费者(灰盒)。 这是通过支持显式的会话状态来实现的(会话状态和执行状态的区别请见[4])——复合服务然后向消费者暴露出多个接口:一个用作原来的服务调用,其他的用作获取即时结果以及依此控制服务的执行(图2)。 图2 会话服务复合 在这种复合类型中,进行交互的消费者和提供者被看作是对等的伙伴,互相交换数据和控制信号。 两种交互方式都是可行的复合设计方案。运用严格的层次结构是对复杂业务过程建模的地有效途径,工作流技术的成功是一个证明。另一方面,会话的丰富表现方式让它更容易抓住日常业务交互的精髓——谈判的行为、对结果的监控等等——通过明确地为消费者和服务之间的信息交互建立模型。 复合的拓扑 基于中介的拓扑 图3 基于中介的复合拓扑 在基于中介的分层复合服务中,中介者实现一个编制规划(Orchestration Schema)以定义成员服务的调用序列,从而在特定的约束下完成特定的目标。中介者的实现可以采用不同的方式,包括编制语言/引擎、OWL-S复合、Petri Net等等。 在基于中介的会话复合服务中,中介者按照消费者的输入实现服务状态和状态的转换。中介者的典型实现一般都基于转换系统(Transition System)或有限状态机。 在对等拓扑中不存在中介者的概念。每个参与的服务(成员服务)都可以(部分地)执行复合服务(图4)。 图4 对等(Peer-to-Peer)复合拓扑 复合,在这里被定义为一个消息发送模板,成员服务可被插入其中。其目标行为被定义为一个允许的消息交换序列的家族,并应由系统具现化。一般这种拓扑仅被用于实现分层复合服务,因为它缺乏支持会话状态所必需的机制(即实现会话型交互的需求)。 复合的各种实现方式 图5 编程实现复合服务 不幸的是,这种方案有几个缺陷: 这种方式硬编码了复合服务的编制面,因而产生出一个相当刚性的实现。对复合服务的任何改变都必须重新编写服务中介者的实现。 另一种实现复合服务的可能方式是基于事件的复合。这种复合实现建立在基与事件的服务交互的基础上:服务消费者向发布/订阅代理(Publish/Subscribe Intermediary)发布事件,代理再向实际的服务提供者投递事件(图6)。 图6通过发布/订阅机制的服务交互 在这种情形中,发布/订阅引擎作为一个中间层,在服务消费者和提供者之间起到了解耦的作用,因此可以允许极其灵活的复合服务实现。复合服务可以被实现成下面的样子(图7): 图7用事件实现复合服务 服务消费者将初始化事件(通过发布/订阅引擎)投递到订阅了此事件的若干服务。随后,每个服务可以发送另一个消息来(通过同样的发布/订阅引擎)调用另外一些服务。这样的事件序列有效地创造出了一个复合服务。通过发布/订阅机制实现的复合服务有以下特点: 与编程实现的方式相比,它有非常显著的灵活性。通过更换一组服务订阅的主题,可以完全改变复合服务的实现。或者更换消费者发送的事件主题也可以达到同样的效果。 图8用编制引擎(Orchestration Engine)实现复合服务 这种实现方式通过采用编制语言(Orchestration Language)而非通用语言,从而改进了前述的编程实现方式。这意味着我们可以使用量身定做的可视化编辑器来编写/维护复合逻辑。这也意味着我们可以利用编制引擎的强大功能,编制引擎内建支持异步调用、状态管理、事务的补偿(Compensation)等等。使用编制引擎来实现复合服务有以下优点: 编制语言是实现编制得更好选择,也因此简化了复合服务的实现。 结论 改善可重用性。复合服务为重用现有的服务提供了一种自然的方式。服务提供者可通过复合服务来增加价值。 最后,我们建议使用编制引擎来实现复合服务。 关于作者 参考资料 [URL=http://www.infoq.com/cn/articles/lublinsky-soa-composition#id1]1[/URL]例如,一个复合服务实现可以包括一个或多个与之交互的人工活动。只要这些交互对服务消费者不可见,该复合就是一个分层复合。 |
-- 作者:public121 -- 发布时间:1/15/2008 1:32:00 PM -- 谢谢,学习中.... |
-- 作者:shaoab@163.com -- 发布时间:2/2/2008 12:49:00 PM -- 学习 |
-- 作者:shelocks -- 发布时间:2/27/2008 2:51:00 PM -- good |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
46.875ms |