标题：美国国家金融服务公司
公司业务
概述资料一家IT部门分布广泛、业务发展迅猛的贷款公司把应用转化成服务，通过消息总线联系起来，并且让业务获得新的灵活性。 
半个世纪以来，随着客户、产品和市场的不断增加，美国Countrywide Financial公司的贷款、保险和银行服务业务也在急剧发展，IT系统随之越来越复杂。为了应对需求增加的情况，Countrywide公司决定采用灵活的SOA方案，希望实现企业IT部门孜孜以求的长远目标：降低复杂性，提高扩展性，减少管理费用。
选择SOACountrywide公司分几个业务部门，每个部门都雇用了IT人员，独立工作。2002年，主要支持公司贷款部门的一个业务部门——全国服务系统开发部门（CSSD）启动了SOA项目，如图所示。 
据CSSD负责应用开发的高级副总裁Peter Presland-Byrne声称，该部门之所以选择了SOA方案，是因为应用程序支持业务问题，而且采用的某些模式适用于SOA的两个主要属性：基于服务的功能抽象，以及注重提供这些基本服务的重用组件。他说：“我们尽量从服务层面看待业务模式的结构。”
技术与做法CSSD开始实施SOA后，很快发现，许多应用程序里面所含的服务有着与其他应用程序同样的功能。 
Presland-Byrne认为：“我们需要抽取服务，这是一项日常工作，如果出现功能重复，还要决定选择哪些服务。”他预料，为了支持Web服务，需要进一步抽取服务，因为这种支持功能在CSSD使用的IBM iSeries中档服务器服务环境当中“不是原本就有的”。 
Presland-Byrne指出，抽取核心服务、让应用程序使用公用服务而不是各行其是，这是SOA方案的一个重要方面，这就需要开发软件时要注重可重用性。 
软件开发方法为了便于遵守SOA，Countrywide公司评估了新的软件开发方法，确保新方法适合SOA，提供一致的兼容性，尽量重复使用现有服务。Countrywide公司最初把SOA看成了中心目标，但后来认识到SOA推崇的重用思想才是中心目标。Presland- Byrne说：“如果你真正支持重复使用，SOA就有可能成为现实。” 　　Countrywide公司还决定使用消息系统，作为连接应用程序和数据源的机制。Presland- Byrne说，因为公司使用好几项不同种类的技术，包括Java和微软 .Net，所以一定要做到与消息无关（messaging-agnostic），以确保系统不会依赖某项有技术。Countrywide公司还在很大程度上依赖IBM的MQSeries和WebSphere MQ Integrator中间件，用于传送消息、处理服务；并依赖Flashline的开发环境，用于管理服务和软件组件。 
数据模型虽然公司跨CSSD的诸多应用程序，对消息系统实行了标准化，但不需要一致的数据模型。相反，公司使用中间件确保一致的信息流；需要时，就映射及转换数据格式。对CSSD而言，强制使用一致的数据模型不合实际，因为“一旦引入第三方工具，一致的数据模型就无从谈起”，Presland-Byrne说,“我们引入的中间件可以转换这些不同的标准。这就是集成工具的用途所在。” 
“缓冲器”Presland-Byrne认为，更重要的是，充当“缓冲器”的中间件——负责在诸多服务之间转换业务逻辑和数据格式——必须与服务逻辑分离开来。这样一来，不同的应用程序就可以同时使用同一服务，用不着在应用程序或者数据发生变化时，改动服务代码。另外，你还可以同时运行新老版本的服务，无论是在转换期间，还是为了满足不同应用程序的需求。在这两种情况下，IT人员可以让服务保持原样。 
Presland-Byrne强调，考虑到Countrywide公司的大多数服务是在内部，尽管公司不是高度依赖Web服务或者相关技术，譬如SOAP，不过它的确把Web服务用于客户和现场代理人所用的少数几个应用程序。然而，Countrywide公司往往使用XML，作为服务和中间件的语义数据标准，因为XML非常普遍适用和广为人知。
未来发展计划在业务部门部署SOA的同时，Countrywide公司现正在探讨如何扩大这种方案的用途，用于各部门之间的沟通。Presland-Byrne承认，这就需要重新分析服务、消除重复现象。该公司已经开始把用户身份识别合并成一项服务，这样只要通过单次登录（SSO），就可以跨企业访问该服务。 
因为每个业务部门的发展模式和技术生命周期各不相同，想在全公司一下子实施SOA在2002年并不可能。如今由于每个业务部门都接受了SOA概念，技术成熟程度也很相似，推广这种架构“是我们现在能够处理的”。Presland-Byrne认为。
体系结构SOA概述
SOA定义SOA是指为了解决在Internet环境下业务集成的需要，通过连接能完成特定任务的独立功能实体实现的一种软件系统架构。
前提从这个定义中我希望表达的前提有下面两点： 
1) 软件系统架构：SOA不是一种语言，也不是一种具体的技术而是一种软件系统架构，它尝试给出在特定环境下推荐采用的一种架构，从这个角度上来说，它更像一种模式(Pattern)。因此它与很多已有的软件技术比如面向对象技术，是互补的而非互斥的。它们分别面向不同的应用场景，用来满足不同的特定需求。 
2) SOA的使用范围：需求决定同时也限制功能。SOA并不是包治百病的万灵丹，它最主要的应用场合在于解决在Internet环境下的不同商业应用之间的业务集成问题。在下面我们会详细讨论Internet的各种特点如何决定SOA的特点，这里我们只需要先简单回顾一下Internet环境区别于 Intranet环境的几个特点： 
a) 大量异构系统并存，计算机硬件工作方式不同，操作系统不同、编程语言也不同； 
b) 大量、频繁的数据传输仍然速度缓慢并且不稳定； 
c) 版本升级无法完成，我们根本就无法知道互联网上有哪些机器直接或者间接的使用某个服务。
独立的功能实体在Internet 这样松散的使用环境中，任何访问请求都有可能出错，因此任何企图通过Internet进行控制的结构都会面临严重的稳定性问题。SOA非常强调架构中提供服务的功能实体的完全独立自主的能力。传统的组件技术，如.NET Remoting，EJB，COM或者CORBA，都需要有一个宿主(Host或者Server)来存放和管理这些功能实体；当这些宿主运行结束时这些组件的寿命也随之结束。这样当宿主本身或者其它功能部分出现问题的时候，在该宿主上运行的其它应用服务就会受到影响。 
SOA架构中非常强调实体自我管理和恢复能力。常见的用来进行自我恢复的技术，比如事务处理(Transaction)，消息队列(Message Queue)，冗余部署(Redundant Deployment)和集群系统(Cluster)在SOA中都起到至关重要的作用。 
大数据量低频率访问对于.NET Remoting，EJB或者XML-RPC这些传统的分布式计算模型而言，他们的服务提供都是通过函数调用的方式进行的，一个功能的完成往往需要通过客户端和服务器来回很多次函数调用才能完成。在Intranet的环境下，这些调用给系统的响应速度和稳定性带来的影响都可以忽略不计，但是在 Internet环境下这些因素往往是决定整个系统是否能正常工作的一个关键决定因素。因此SOA系统推荐采用大数据量的方式一次性进行信息交换。 
基于文本的消息传递由于Internet中大量异构系统的存在决定了SOA系统必须采用基于文本而非二进制的消息传递方式。在COM、CORBA这些传统的组件模型中，从服务器端传往客户端的是一个二进制编码的对象，在客户端通过调用这个对象的方法来完成某些功能；但是在Internet环境下，不同语言，不同平台对数据、甚至是一些基本数据类型定义不同，给不同的服务之间传递对象带来的很大困难。由于基于文本的消息本身是不包含任何处理逻辑和数据类型的，因此服务间只传递文本，对数据的处理依赖于接收端的方式可以帮忙绕过兼容性这个的大泥坑。 
此外，对于一个服务来说，Internet与局域网最大的一个区别就是在Internet上的版本管理极其困难，传统软件采用的升级方式在这种松散的分布式环境中几乎无法进行。采用基于文本的消息传递方式，数据处理端可以只选择性的处理自己理解的那部分数据，而忽略其它的数据，从而得到的非常理想的兼容性。 
HTTP协议
概述每一项新技术都是在一些旧的技术基础上发展出来的。正如XML根本思想来自于在60年代就已经出现的早期标记性语言一样，SOA虽然这两年才出现，但是它所表达的观念应该说在网络这种分布式系统结构出现不久就已经广泛应用了。例如我们最熟悉的HTTP协议就是一个非常典型的SOA架构设计。工作过程HTTP协议的工作过程简单叙述如下： 
1) 客户端，通常是通过浏览器，向服务器端以文本的方式发送一个请求，索取一个Web页面； 
2) 服务器端接收到这个请求之后，根据请求的内容进行处理并且返回一个符合HTML语法的文本； 
3) 客户端接收到服务器端的响应文本后调用本地的程序，通常还是浏览器，把返回的HTML文本的内容展现出来。SOA的特点独立的功能实体：作为服务器端的Web服务器是绝对不会因为客户端的状况变化而改变的，它总是非常稳定地按照自己的内在逻辑运行，响应外部的请求，管理自己的资源和数据。这里一个非常好的例子就是Web服务器对缓存(Cache)的处理，很多Web服务器为了提高性能都或多或少的对数据进行缓存，但是缓存数据、刷新数据这些于客户端完全无关的操作完全由服务器端独立完成，完全不受客户端的影响。 
大数据量低频率访问：对于一个HTTP请求来说，客户端与服务器之间访问的边界非常简单：就是一个请求，一个响应，没有任何其它的信息往返。无论客户端申请的网页上除了文字之外还有什么信息，对于客户端来说，它发出的请求只是简单的告诉Web服务器它所需要的网页的位置；至于为了生成这个网页，服务器端是否需要访问数据库，执行Servlet或者其它的CGI程序对客户端而言，都是完全透明的。 
基于文本的消息传递：迄今为止兼容性最好的系统可能就是HTTP协议支撑的大部分的web应用了，我们可以在Windows平台下用IE查看互联网上一个 Linux＋Apache服务器上的由Perl脚本自动生成的网页。这里的关键就是所有内容都是以格式化的文本方式传递的，不管Perl脚本如何执行，只要它的输出是符合HTML规范的网页，就可以被客户端的浏览器解释。而由于不同的操作系统上对于相同的HTML的解释遵循相同的规范，因此不同操作系统下仍然能够看到一致的用户界面。 
我们上面基本描述了SOA作为一种软件架构有哪些特点，下面让我们一起看看Web Service与SOA的关系。
SOA与Web ServiceWeb Service是就现在而言最适合实现SOA的一些技术的集合，事实上最近SOA的火爆在很大程度上归功于Web Service标准的成熟和应用的普及为广泛的实现SOA架构提供了基础。下面让我们看看Web Service中的各种协议是如何互相工作来满足SOA所需的特点的： 
独立的功能实体：通过UDDI的目录查找，我们可以动态改变一个服务的提供方而无需影响客户端的应用程序配置。所有的访问都通过SOAP访问进行，只要WSDL接口封装良好，外界客户端是根本没有办法直接访问服务器端的数据的。 
大数据量低频率访问：通过使用WSDL和基于文本(Literal)的SOAP请求，我们可以实现能一次性接收大量数据的接口。这里需要着重指出的是 SOAP请求分文本方式和远程调用(RPC)两种方式，正如上文已经提到的，采用远程调用方式的SOAP请求并不符合这点要求。但是令人遗憾的是现有的大多数SOAP请求采用的仍然是远程调用(RPC)方式，在某些平台上，例如IBM WebSphere的早期版本，甚至没有提供文本方式的SOAP支持。 
基于文本的消息传递：Web Service所有的通讯是通过SOAP进行的，而SOAP是基于XML的，不同版本之间可以使用不同的DTD或者XML Schema加以辨别和区分。因此只需要我们为不同的版本提供不同的处理就可以轻松实现版本控制的目标。
SOA的影响
无论您现在的系统是否牵涉到基于Internet的业务集成，采用SOA推荐的架构都对提高您系统的扩展性有很大帮助，下面是在系统中引入SOA后需要在软件架构方面做出的改变： 
使用基于文本方式的SOAP调用，摆脱远程调用中出现的函数参数类型等与数据无关的信息，保证所有SOAP传递的都是有意义的商业数据。依赖于Schema，而不是类定义对这些数据进行解释。 
传统的三层Web应用将可能变成四层结构：传统意义上的商业逻辑层将被进一步划分为存放每个会话(Session)信息的客户逻辑层和与状态无关Sateless的SOA层。