2024年5月6日发(作者:)

SOA学习总结

面向服务的体系结构(Service-Oriented Architecture,SOA)是一个组件

模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的

接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服

务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可

以一种统一和通用的方式进行交互。

一、什么是面向服务的体系结构

我们知道传统的IT程序发展史经历了以下四个阶段:

1、面向过程的编程,如C语言。

2、面向对象的编程,如Java、C++。

3、面向组件的编程,如EJB,JMS。

4、标准化的Web Service编程,也属于组件编程。

从本质上讲,面向对象是对面向过程的一次解耦和封装,就是把面向过程的

程序进行分解,把逻辑紧密相关的程序结合在一起,发布成独立的对象单元,对

象单元里含有API。

面向组件的编程是对面向对象的程序进一步封装,发布成独立的组件,里面

含有一些粒度大于API的接口。面向组件和面向对象的最大区别在于组件是通

过传输协议来进行远程调用的,组件是和传输协议绑定、应用服务器和端口绑定

在一起的。

理解了上面的编程思想,就可以进一步理解什么是面向服务了,面向服务的

编程是对面向组件编程的进一步解耦和封装。所谓解耦,就是将业务组件和传输

协议和端口解耦,也就是说业务组件可以自由的绑定各种传输协议。

作为面向服务编程,由于服务组件可以和各种传输协议自由绑定。这样作为

服务的消费者,就不需要特别关心服务的提供者的具体技术细节。只需要知道有

这么一个完全和技术无关的业务接口。我们就可以把这种完全和技术无关的接口

称为:服务接口。作为客户,不需要去理解这到底是Web Service 的接口,还是

EJB的接口等,这个接口,只和业务相关,而和技术无关。

因此可以这么说:所谓服务,就是只和业务相关,独立于技术业务接口。所

谓面向服务,就是如何实现独立于技术的服务接口。

SOA 是一种 IT 体系结构样式,支持将业务作为链接服务或可重复业务任务

进行集成,可通过网络访问这些服务和任务。

服务可以将自己组装为按需应用程序——即相互连接的服务提供者和使用者集

合,彼此结合以完成特定业务任务,使业务能够适应不断变化的情况和需求。

服务是自包含的,具有定义良好的接口,允许这些服务的用户——称为客户机或

使用者——了解如何与其进行交互。

二、SOA的基本原则

粗粒度

在SOA中服务粒度有两种相关的意思,即服务是如何实现的,服务使用和返回

了多少数据或多少消息。细粒度服务执行了最小的功能,发送和接收少量的数据。

粗粒度服务执行了较大的业务功能,并交换了更多的数据。

原则:细粒度服务是供粗粒度服务或组合服务使用的,而不是由终端应用直接

使用的。如果应用是使用细粒度服务建立的,则应用将不得不调用网络上多个服

务,并且发生在每个服务上的数据量较少,因而会对对系统整体性带来影响。所

以,粗粒度服务的用户不能直接调用他所使用的细粒度服务。同时,由于粗粒度

服务可能使用多个细粒度服务,因此它们不能提供粒度级的安全和访问控制。

松散耦合

松耦合的系统特点是灵活,而应用到SOA中的目的就是将服务使用者和服务提

供者在服务实现和客户如何使用服务方面隔离开来。服务提供者和服务使用者间

松散耦合背后的关键点是服务接口作为与服务实现分离的实体而存在。这是服务

实现能够在完全不影响服务使用者的情况下进行修改。

大多数松散耦合方法都依靠基于服务接口的消息。基于消息的接口能够兼容多

种传输方式(如HTTP、JMS、TCP/IP、MOM等)。基于消息的接口可以采用同

步和异步协议实现。