本篇主要对SOA有总体上的认识。
SOA是一种软件体系结构,它的构成元素是服务,此处服务主要指web服务。它有三种角色:服务提供者、服务请求者、服务注册中心。对于编程者来说,SOA是一种编程模型,包括XML、WSDL、Web Service等技术。但我认为SOA更多的是一种指导思想,是面向服务的软件开发指导思想。
SOA-Service-Oriented Architecture,面向服务体系架构。构成元素服务,指只和业务相关,独立于技术实现的业务接口,可以和各种传输协议自由绑定。SOA的基本要素有:
1. 松散耦合。有3个方面的内涵:
服务之间的松散耦合——不同服务的功能不要互相依赖,一个服务应该能够自己实现所提供的接口功能(自包含),不要依赖其他的服 务。
接口和实现之间的松散耦合——Web服务已经实现这点,对于用WSDL定义的Web Service的服务接口,既可以用J2EE实现也可以用.NET实现。
业务组件和传输协议之间的松散耦合——业务组件可以自由绑定传输协议。但目前的业务组件不可以,EJB需要RMI,Web服务需要 SOAP,JMS需要JMS的传输协议。
2. 粗粒度,SOA中服务的接口比面向对象编程的API要大,需要更接近用户的实际操作,即更接近业务功能。
3. 位置和传输协议透明
目前的服务组件如EJB、Web Service的发布都是和特定的应用服务器绑定在一起,如IBM的WebSphere、Weblogic、Apache Tomcat、JBoss等。客户端必须知道具体的应用服务器的URL才能调用相应的组件,一旦某服务组件的URL位置修改了,那么客户端程序必须做相应的修改,这就是服务组件位置的不透明。位置透明指不论服务组件的实际位置URL如何变化,客户端的调用程序的URL不需改变。
目前的服务组件只能接收特定的传输协议,导致客户端调用这些服务组件时,也必须采用相应的传输协议才能调用,一旦组件的传输协议改变,客户端的也必须做出相应改变。这就是传输协议的不透明。传输协议透明指不管服务组件的传输协议如何变化,客户端的调用程序的传输协议不需改变。也是想法是美好的,但是实现是困难的。
SOA给出了实现位置和传输协议透明的解决办法如下图:
它引进了服务总线的概念,就相当于计算机中的总线,客户端与服务总线打交道,而服务只要加入总线,客户端就能找到服务而不用在意服务的具体位置和传输协议。但现实到底是不是能够达到这个愿望呢?我们在后面的企业服务总线中来一探究竟。