InfoQ

新闻

是时候考虑SOA建设的版本问题了

作者 王翔 发布于 2007年7月8日 下午11时5分

社区
SOA
主题
治理,
商业
标签
业务/IT整合

SOA作为一个软件系统,如果说技术上有个不变的规律那就是——“总在变”,变化也向架构师们提出了如何对SOA实施有效版本管理的要求。最近Boris Lublinsky分别为微软架构师杂志(《Microsoft Architect Journal》)IBM developerWorks撰文,介绍他的相关经验。

业务环境的变化常常需要IT服务的实现相应作出变化,虽然通过很多新技术或者模式化的实施经验可以帮助我们提供高质量的服务,尽量少的对实现做出变化,但是IT技术自身的发展——操作系统、开发工具、开发语言也常常会引发实现上的变化。SOA自身是个可以有效适应变化的机制,因为它依赖的是抽象的“服务”而非具体的“业务处理”,因此当业务需求变化的时候,一般采用的是变化服务下面的业务处理——修改或者重建,也正因为这个原因,SOA环境对服务的依赖丝毫不亚于组件开发中的接口。况且SOA中很讲究服务的自治性,也就是每个服务独立的修改和维护。当矛盾集中在“自治”与“集成”的时候,SOA也就到了要考虑版本管理的时候。Boris Lublinsky在文中提到3个引发这一问题的主因:

  • 服务接口的变化。
  • 消息的变化,可以进一步细分为“小”变化(“可选”/“必选”的变化、引入新的全局元素等)和“大”变化(修改全局元素、修改枚举值等)。
  • 实现的变化。虽然理论上这个不会导致服务接口的变化,但是处理上总有些“预处理”和“后续处理”之类的操作,调用的顺序没有变化,但是上下文处理的变化一样会导致最终结果的不同。例如:增加了参数检查后,某些之前成功的调用会变成失败;安全上之前没有数据源(Data Origianl)限制,之后加上了,这样也会导致不符合安全策略调用的失败。
  • 对于上述三种情况,Boris Lublinsky提出了以下两种解决措施。

  • 单一服务方法终端地址(EndPoint Address)加版本参数:也就是在调用服务的的时候,同时告诉服务终端一个版本参数,根据这个参数由服务终端决定调用哪个版本的服务方法。

  • 不同版本服务方法有自己的终端地址:该方式下不需要服务方法前面增加一个版本调度机制,客户应用使用和自己“搭对”的服务方法。

  • 前者虽然在引入新版本的服务方式时对客户程序影响很小,但会带来封装的复杂性,而且随着“坛坛罐罐”的增加,为每个服务方法维护这样一个if then else很麻烦。一个改进的办法就是把它们全都集中到一个Broker或者Mediator上,把判断版本取舍的工作推给它,不过改进方法因为要增加中间环节,所以性能上有损失。

    后者实现了Side-by-Side Execution的目标,降低了客户程序与服务方法间的耦合。当然,这要付出代价,需要服务注册库在寻址上更加灵活,可以让SOA的使用者借助它找到适合它的那个版本的服务方法。

    除了应用层面的SOA版本问题外,更复杂的是SOA基础环境的版本问题,包括:传输机制的修改(例如:HTTP调用变成了队列调用)和消息编码方式的变化等,Boris Lublinsky给出的答案很简单——Adapter。相比较“没完没了”的业务服务而言,基础环境中更多的是“相对有限”的技术机制,因此Adapter的开发量(或集成工作量)在一个时期内是稳定的。

    虽然国内SOA的应用在很多企业还是起步阶段,可一旦上了这条船,后续的运行维护工作会越来越繁重,更何况对很多企业而言对SOA的定位就是用来“梳理”整个企业关键业务系统间的协作。为了协调好SOA环境,现在是该绸缪SOA版本管理的时候了。


    作者简介:王翔,全国海关信息中心高级架构师,从事海关主要广域分布式系统的设计和实施,多次参与各业务系统的优化。此外,作为信息安全工作组副组长,他还一直致力于应用密码技术和公钥基础设施保障海关业务的安全运行。此外,他还是《程序员》杂志的专栏作者。

    深度内容

    和Google互补的搜索引擎Wolfram|Alpha

    Wolfram|Alpha与Google究竟是什么关系,Wolfram|Alpha自己是如何定位的?Wolfram|Alaph在多大程度上是语义网搜索呢?InfoQ中文站就等等这些问题采访了Wolfram研究公司中国区商务经理王翔。

    SOA契约成熟度模型

    本文说明了所推荐的契约版本管理设计策略是如何与SOA成熟度模型发生联系的。文章目的是为实现版本管理和可组合性提供一个路线图。

    数据服务简介

    Vijay Narayanan在这篇文章中对数据服务的几个方面进行了介绍,它们都是SOA实践者和数据架构师感兴趣的内容。本文对数据服务的几个方面进行了介绍,包括需求定义,基本原理和好处、范围、开发以及消费模式。

    分块云计算

    在本文中,Jimmy Nilsson描述了一种他在过去数年间观察到的一种正在缓慢成长的架构风格,他把这种风格称为“分块云计算”。

    豆瓣网技术架构变迁

    罗马不是一天建成的,豆瓣的技术架构也是随着用户规模的增长一直在持续变化中。在本次演讲中,豆瓣的首席架构师洪强宁将与大家一起分享从上线时的单台服务器架构开始一直到现在的豆瓣架构变迁历程。

    融合思想:深入探索S#arp架构

    Billy McCafferty展示了S#arp架构,它在ASP.NET MVC框架的基础上,荟萃了当今的最佳实践,应用在ASP.NET Web应用程序的架构设计中。

    王雷谈开源以及新兴市场计划

    中国作为新兴市场中的新兴市场,是Sun在美国之外实施SSE(SUN Startup Essentials)项目重点关注的地区。在QCon Beijing 2009期间,InfoQ中文站有幸对此项目的负责人王雷先生进行了采访,探讨了关于开源、新兴市场、SSE等话题。

    使用HTML5构建下一代的Web Form

    HTML5 是由 WHATWG发起的,最开始的名称叫做Web Application 1.0,而后这个标准吸纳了Web Forms 2.0的标准,并一同被W3C组织所采用,合并成为下一代的HTML5标准。