
基于SOA架构设计
议题
• 服务的设计与原则
• 面向服务架构的消息模式
• 评估基于服务的集成技术的过程和准则
• 服务模式与反模式
•Web服务的体系结构
• 改善web服务的协同工作能力
• 基于SOA的软件构件的复用模式
• 基于SOA的软件构件的管理模式

应用软件开发方法的演变过程
• 应用软件开发方法的演变过
程:
– 面向过程;
– 面向对象;
– 面向组件;
– 面向服务。
为什么选择面向服务架构
(SOA)?
• 不同种类的操作系统,应用软件,系统软件和应用基础结构
(application infrastructure)相互交织,这便是IT企业的现状。一些
现存的应用程序被用来处理当前的业务流程(business
processes),因此从头建立一个新的基础环境是不可能的。
• 企业应该能对业务的变化做出快速的反应,利用对现有的应用程序和
应用基础结构(application infrastructure)的投资来解决新的业务需
求,为客户,商业伙伴以及供应商提供新的互动渠道,并呈现一个可
以支持有机业务(organic business)的构架。
•SOA凭借其松耦合的特性,使得企业可以按照模块化的方式来添加新
服务或更新现有服务,以解决新的业务需要,提供选择从而可以通过
不同的渠道提供服务,并可以把企业现有的或已有的应用作为服务,
从而保护了现有的IT基础建设投资。

• 一个组件模型
• 将应用程序的不同功能单元(
服
务
)通过这些服务之间定义良好
的接口和契约联系起来。接口是
采用中立的方式进行定义的,它
应该独立于实现服务的硬件平台、
操作系统和编程语言。
• 构建在各种这样的系统中的服务
可以以一种统一和通用的方式进
行交互。
什么是面向服务的体系架构?
SOA具有的特性(2-1)
•SOA服务具有平台独立的自我描述XML文档。Web服务描
述语言(WSDL, Web Services Description Language)
是用于描述服务的标准语言。
•SOA 服务用消息进行通信,该消息通常使用XML
Schema来定义(也叫做XSD, XML Schema
Definition)。消费者和提供者或消费者和服务之间的通信
多见于不知道提供者的环境中。服务间的通讯也可以看作
企业内部处理的关键商业文档。

SOA具有的特性(2-2)
• 在一个企业内部,SOA服务通过一个扮演目录列表
(Directory listing)角色的登记处(Registry)来进行维
护。应用程序在登记处(Registry)寻找并调用某项服务。
统一描述,定义和集成(UDDI, Universal Description,
Definition, and Integration)是服务登记的标准。
• 每项SOA服务都有一个与之相关的服务品质(QoS,
quality of service)。QoS的一些关键元素有安全需求
(例如认证和授权),可靠通信(译注:可靠消息是指,
确保消息“仅且仅仅”发送一次,从而过滤重复信息。),
以及谁能调用服务的策略。
SOA三大基本特征(1)
• 独立的功能实体
– 在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环境下,不同语言,不同平台对数据、甚至是一些基本数
据类型定义不同,给不同的服务之间传递对象带来的很大困难。
由于基于文本的消息本身是不包含任何处理逻辑和数据类型的,
因此服务间只传递文本,对数据的处理依赖于接收端的方式可以
帮忙绕过兼容性这个的大泥坑。