APP下载

面向服务架构的演化和应用

2011-04-07戴建国赵庆展

关键词:服务器端服务提供者调用

戴建国,梁 斌,赵庆展,郭 理,赵 欣

(石河子大学信息科学与技术学院,新疆石河子832000)

0 前言

面向服务的体系架构是一种异构系统间共享信息的软件设计方式[1],其目的是为了解决异构平台软件系统之间的集成问题。在国外很多大的软件厂商如IBM、BEA等提供SOA的解决方案和中间件产品。国内的SOA应用还处在概念宣传和试用阶段[2],但很多应用SOA的需求都已出现。

SOA的首要目标是业务敏捷性,通过建设灵活的IT帮助业务快速应变[3]。其实施从软件到企业的管理方式都会发生相应的变化。所以SOA实质是一种业务架构,是企业为了适应市场的快速变化而采用的战略性业务架构[4],而不是能够买来的技术,而且没有现成的工具能够立即生成SOA的解决方案[5]。

由于SOA的本质是抽象于具体架构之上的一种思想,而不是一种具体的架构实现,所以只有围绕着松散耦合、粗粒度、服务位置和传输协议透明这些SOA的核心思想去思考和构建软件系统,并能够真正实现,才是实现了SOA[6]。同时,SOA一般也不是从头构建的系统,而是通过对现有系统资源不断整合得到。本文从一个简单的Web系统开始,随着需求的变化不断重构系统的架构,并给出各个阶段系统的架构方案,从而最终自然演化成为面向服务架构,并使用开源的ESB总线实现了设计方案。

1 三层架构设计

1.1 普通三层架构

兵团社会经济信息系统最初需求是开发一个简单的B/S结构系统,可以方便用户查询,十几个表,需求较为简单,系统总体结构如图1所示,普通用户客户端和系统管理客户端通过浏览器进行。系统采用了简单的三层架构,采用jsp作为显示层,应用层采用servlet,访问数据库的数据层采用jdbc连接,数据操作使用sql语句,由于sql语句与具体数据库产品相关,所以系统与具体的数据库产品是紧耦合的,系统架构图如图2所示。当前系统是一个非常普通的Web应用。

1.2 基于Spring+Struts+Hibernate的三层架构

随着开发的进行,各个子课题对于社会经济数据库的要求发生了变化,增加了很多数据,而且数据还有可能持续发生变化,数据访问层频繁发生修改,很容易出错,需要降低各层之间紧耦合状态,分离出服务层。系统改为采用常见的SSH(Struts+Spring+Hibernate)搭配,系统访问模式和整体架构不发生变化,各层采用相应的开发框架,界面层采用Struts2框架,数据访问层采用Hibernate框架,Spring作为应用框架,主要提供对象工厂和事务管理功能,以最大程度的使各层解耦,并简化事务管理。此时系统的架构没有变化,只是三层架构采用了相应的开发框架,增加了系统的灵活性和健壮性,具体如图3所示。

图3 SSH开发框架图

2 混合架构

2.1 普通混合架构模式

在开发过程中,数据的管理方式被考虑进来,调查发现数据来源比较复杂,需要从其他地方获取数据并进行人工核实和筛选,数据量比较大,单靠通过管理员以后台方式管理数据很麻烦,建立数据管理客户端软件非常有必要,这样系统就采用了两种管理模式:一种是C/S客户端管理;一种是使用浏览器进行后台管理,系统演变成了B/S和C/S的混合架构模式。如图4所示是混合模式的架构图,其中新增了C/S结构。两种管理模式对数据库的访问方式如图5所示。

2.2 采用远程方法调用的混合架构模式

当前系统已经可以满足访问和维护的要求,但是存在一个问题:服务器端和客户端软件除了界面层和应用层不一样,实体层(实体类、Hibernate配置文件、Hibernate映射文件)必须保持一模一样,数据访问层代码也基本相同,这样不但出现大量的代码冗余,系统升级和维护时必须同时维护两处相同的代码,很不方便而且容易出错。系统改变为将数据访问逻辑置于服务器端,客户端以远程方法调用的方式进行访问,这样客户端和服务器端只需要保持相同的数据访问接口。由于客户端和服务端都使用java开发,所以可以采用rmi技术实现[7]。系统演化成如图6的方式。

服务器端生成服务代理,客户端通过远程方法调用(Rmi)服务器端的方法,这样数据访问逻辑只需要在服务器端生成一次,客户端不需要相应的实体类和Hibernate配置文件,系统维护和升级都很方便。

3 点对点Web服务集成

3.1 服务发布与调用模式

兵团社会经济信息系统需要为其余各个子课题提供数据服务,如农情系统,水资源监测等,而各子课题是平台异构的,有的使用.net,有的使用vb。为了让各子系统使用社会经济数据,系统结构进一步发生变化,将数据的获取以Web服务的方式发布,其余子课题获取服务。系统演化成为如图7所示结构。

图6 改进后的混合架构开发架构图

3.2 点对点Web服务集成

由于各个子系统之间有相关性,比如农情信息系统会需要水资源与水灾害的数据和分析结果。这样发生了子系统之间的相互调用,由于平台异构,各子系统如果要调用对方的操作,只能以服务的方式进行,所以最终各个子课题都会发布与调用服务,既是服务的消费者也是服务的提供者。这就是点对点的Web服务集成,具体如图8所示。

点对点的Web服务集成相当于一种“私下交易”,这种“私下交易”的缺点是服务的消费者必须知道服务提供者的位置,这样就使得消费者与提供者之间紧耦合,服务提供者发布一项服务就需要通知所有的消费者,如果服务提供者的地点或者服务接口发生了更改,所有消费者必须改动并且重新编译。并且,如果服务发生故障不能使用,也没有失效备援机制和安全管理机制,整个系统缺乏对服务的统一管理。

图7 提供Web服务的开发架构图

图8 点对点web服务集成

为了改变服务提供者和服务消费者的紧耦合现象,方便各子系统发布、发现和调用服务,需要一个基础设施的支持,即企业服务总线(ESB)。ESB相当于服务中介,其职责是使消费者能够调用供应者提供的服务[8],能够对服务进行管理,使得服务提供者对于服务消费者透明,消费者无需知道是谁为它提供服务,当然也可以明确选择某几个提供者,服务提供者发生了更改无需通知消费者,消费者可以处于“幸福的无知状态”,这样使得服务提供者和消费者之间完全解耦。这就是面向服务架构,采用ESB后的系统架构如图9所示。

采用ESB的好处不仅仅是提供了松耦合的架构,而且还可以提供如下功能[9]:

(1)负载均衡,如果有多个服务提供者可以对同一个服务请求提供服务,则可以根据负载均衡的原则选择服务提供者。

(2)安全管理,提供统一的安全标准和规则。

(3)服务聚合,可以对小的服务进行聚合而成大的服务,也就是服务的编排。可以选择聚合方式和粒度,灵活的根据适应外界的规则变化对信息系统提出的新要求。

(4)监控功能,主动观察总线的服务性能、分析某项服务调用的高峰期、服务调用是否完整等。

图9 面向服务的系统架构图

4 面向服务架构

4.1 基于Webservice的服务设计

SOA思想本身并没有规定在以面向服务思想为指导的应用程序的构造过程中必须使用的实现技术。而在现实当中,使用最多的用于实现SOA的技术,莫过于Web服务。Web服务是一套开放标准,它可以指导建立分布式应用平台,使得运行在不同操作系统和不同程序语言实现的功能模块,能够通过它提供的中立的接口描述,有效地进行分工协作[10]。Web服务技术和以前的分布式计算技术比较,具有更好的可靠性、可扩展性、易用性和协议开放性[11]。

系统服务的发布采用了Spring+XFire的框架创建和描述服务,以登录操作为例,下面是描述服务的service-servlet.xml文件部分内容。

4.2 基于Synapse的企业服务总线

服务总线很多,开源和商业的都有很多应用,在实际项目中采用了开源的总线系统,Apache的Synapse作为项目的服务总线,Synapse采用轻量级的XML和Web服务为中心的消息模型。它本身并不创建服务,只是提供服务的注册和路由等管理。下面是登录服务发布的部分内容。

4.3 服务调用

服务发布完毕后,在客户端就可以编写程序进行服务的调用。客户端首先创建RPCServiceClient类型的对象,并初始化其拥有的Option对象类型的属性,最后调用RPCServiceClient的invokeBlocking方法,该方法会调用服务提供者的相应方法,最终将调用结果返回。

4.4 效果

为了不断适应需求的变化,为异构的软件系统提供互操作,兵团社会经济信息系统的软件架构最终演化为面向服务的架构。企业服务总线的建立,使得该架构为集成更多的软件系统提供了基础设施上的支持。各异构的子系统都可以在总线上发布或查找服务,从而实现系统集成的目标。

5 结束语

采用基于SOA企业应用集成方式能有效解决系统集成的问题,克服传统集成方式耦合度高、安全性和灵活性差、集成成本过高等缺点[12],甚至完成传统集成方式无法完成的集成问题。但SOA并不能一蹴而就,是为了集成异构系统而不断演化的结果。通过兵团社会经济信息系统的不断演化从而最终实现面向服务架构,展现了SOA的实现过程,并在该过程中表现了SOA如何通过不断降低系统之间的耦合和依赖,实现异构系统的快速集成,从而达到业务的敏捷性。

[1] 陈朋,李光耀.基于面向服务体系结构SOA的软件开发[J].河南科技大学学报:自然科学版,2006,27(5):29-31.

[2] 常政.SOA中国企业应用现状调查[J].程序员,2007(6):68-69.

[3] 毛新生.此SOA非彼SOA[J].程序员,2007(6):48-51.

[4] 尹红丽,王永明.面向服务的体系结构主要实现技术比较研究[J].计算机科学,2009,36(1):282-285.

[5] David C,Tyler J.JavaWeb Services[M].New York:O’Reilly Press,2002.

[6] 王满红,陈荣华.SOA概念、技术与设计[M].北京:机械工业出版社,2007.

[7] 叶乃文.Java2基础知识[M].北京:机械工业出版社,2005.

[8] 梁爱虎.SOA应用详解[M].北京:电子工业出版社,2007.

[9] 杨彩,刘晓霞,贾松浩.基于SOAP的异构系统集成的研究与应用[J].计算机应用与软件,2008,25(4):79-81.

[10] 倪志刚,王铭孜,黄兆勤.SOA权威指南:通过BEA Aqualogic Service Bus实现[M].北京:电子工业出版社,2008.

[11] NicolaiM J.SOA实践指南[M].程桦,译.北京:电子工业出版社,2008.

[12] 张海军,史维峰,刘伟.基于SOA企业应用集成框架研究与实现[J].计算机工程与设计,2008,29(8):2085-2088.

猜你喜欢

服务器端服务提供者调用
网络服务提供者的侵权责任研究
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
论网络服务提供者刑事责任的归责模式一一以拒不履行网络安全管理义务罪为切入点
浅析异步通信层的架构在ASP.NET 程序中的应用
论网络服务提供者的侵权责任
基于系统调用的恶意软件检测技术研究
在Windows中安装OpenVPN
网络服务提供者第三方责任的立法审视
利用RFC技术实现SAP系统接口通信