|
基于SOA体系结构的未来软件开发方法文章分析了传统面向对象和基于构件方法在软件开发过程中代码重用方面的不足,讨论了面向服务的体系结构及其优势。结合一个具体的计算机辅助教学管理系统(CMI)的实际应用,给出了利用Web服务实现SOA的有效方法。 1引言 随着软件开发方法研究的发展和分布式技术应用的深人,基于多种开发平台和工具的商业系统得到大量应用,使得企业中的软件系统变得日益庞大和复杂。由于传统的软件开发使用的平台、开发工具、操作系统在结构上的紧藕合,以致这些位置上分散的独立系统逐渐形成了所谓的“信息孤岛”。为了更好地重用已有模块、加快软件开发速度,使这种重用可以不用考虑各自运行平台和开发环境的差异,并使被重用的模块可以方便地由旧系统纳人新系统,一种面向服务的体系结构SOA(ServiceOrientedArchitecture)的软件设计方法被提了出来,这种通过对服务流程化的组织来构建分布式系统的方法既是体系结构模型,又是编程模型。 本文讨论了如何利用SOA提供的这种较面向对象和基于构件更好的软件复用方法去构建出一个松散藕合的分布式系统,使其达到复用度高和扩充性好的目的。 2基于SOA的软件开发方法 由于侧重方向和观察角度上的差异。对于SOA的具体定义各有不同。但是从体系结构方面考虑可以这样给出:soA是一种松散藕合的软件体系结构,在这种体系结构中,由各自独立可复用的服务去构成系统功能。这些服务向外公布有意义明确的接口,软件的开发是通过对这些实现透明的接口的调用来完成”。其体系结构如图1所示。 图1SOA的体系结构 在面向服务的体系结构中主要有三种角色: 服务消费者是需要使用服务的应用程序或其它的服务。通过对注册中心的服务进行查询后,根据接口说明信息并使用某种传输协议与服务绑定并执行服务功能。 服务提供者是创建服务的实体。可以从服务消费者处接受请求并可以远程执行所请求服务。通过向注册中心发布服务接口信息以供服务消费者发现和访问服务。 服务注册中心处于中心位置提供了展示服务的功能。服务消费者通过查询存储有服务信息库的注册中心以找到感兴趣服务的接口信息。 在面向服务的体系结构中的每个实体的角色并非固定,可以同时充当以上三种角色中的一个或多个。 在面向服务的体系结构中主要的操作有: 发布为了被访问,服务的描述信息必须被发布以便服务消费者发现和调用。 发现服务请求者通过查询注册中心去定位符合其需求标准的服务。 绑定和调用在获得服务描述信息之后,服务消费者据此去调用服务。 服务是SOA中的基础设施,位于业务需求和底层技术之间的抽象层次中。在开发基于SOA软件系统的过程中:首先,要明确功能需求和可获得服务之间的动态关系,以及服务与实现服务的底层技术的关系;其次,SOA中的基本服务必须满足定义明确和功能单一的要求,每个独立部署的服务不必依赖其它系统;最后,整个系统功能需求的满足通过服务的流程化组织而得到实现。 与传统开发方法相比,SOA的特点在于具有:基于标准、松散藕合、共享服务和粗粒度等,其优势可表现为: (1)易于集成现有系统:在对现有系统不做修改的前提下,SOA可将现有系统和应用迅速转换为服务。通过封装可以提供服务接口的应用层来访问遗留系统,因此不用修改现有系统体系结构。 (2)具有标准化的架构:只要符合相关标准,无论何时开发的组件都可以合并在一个结构良好的SOA系统中。并且不同开发者开发出的组件将被作为服务方便的添加部署在现有的基础构架中。 (3)提升开发效率:由于SOA在可复用方面的特点,新的软件在设计、开发、测试和部署时可以充分利用已有服务。因此,其开发周期可以显著缩短。 (4)降低开发维护复杂度:通过采用SOA体系结构,在进行二次开发时成本急剧减少。同时,由于系统具有松散藕合的特征,维护成本也大大减少。 3SOA的实现技术—Web服务 SOA中的应用是由服务使用者通过接口访问服务而形成。潜在使用者可发现由服务提供者发布的该类接口并通过网络来进行调用。这种设计思想同Web服务这种灵活而强大的具体实现技术有着某种程度的暗合,因此,使用Web服务来实现SOA具有天然的优势。 此外,SOA是一种不受限于具体技术的体系结构,定位于特定技术的集合如Web服务、RMI,COM,CORBA等之上。从广义角度来说,可以被上述任意一种具体技术来实现。从严格意义上讲,只能由符合协议中立的技术去实现。相比以前的分布式计算技术,Web服务技术具有更好的可靠性、扩展性、易用性且具有协议开放性。虽然Web服务并非是实现SOA的必需组件,而且部署了Web服务也并非意味实现了SOA。但由于它所具有的上述优势使其在实现SOA时具有重要地位,在实践过程中往往被优先考虑为实现SOA的技术而得到采用。 3.1Web服务的关键技术 基本的Web服务栈由SOAP,WSDL,UDDI等技术组成,其服务栈结构如图2所示。SOAP(Sim-pleObjectAccessProtocol)是一种轻型的基于XML的简单通信协议,它定义了一种通过网络传送XML消息的格式。该消息由一个SOAP信封(envelope)元素和被信封元素包围的一个可选择的SOAP头元素(header)和一个必须的SOAP体元素组成。 图2Web服务协议栈 WSDL(WebServicesDescriptionLanguage)也是一种基于XM[的语言,通过这种语言,Web服务可以向其它应用程序传递它所提供的方法(method),以及该方法的使用规则。 UDDI(UniversalDescriptionDiscoveryandIntegration)定义了一种基于XML的格式,使用者可以使用这种格式去描述其功能和过程。它定义了Web服务的发现和发布的方法。 3.2Web服务的运行方式 Web服务的运行方式与SOA的设计思想很相似:服务提供者将其服务的WSDL描述信息发表到UDDI注册中心。服务使用者通过查询注册中心获得所要使用服务的WSDL文档,该文档提供了与Web服务进行交互的信息。服务使用者向提供者发送SOAP请求消息,然后由Web服务提供者返回SOAP应答消息。 4应用实例研究 4.1计算机教学管理系统(CMI)分析 国家远程教育标准化委员会制定的CELTS-20(计算机教学管理规范哟对于教学管理互操作性有下列要求:①同样的课可以在不同的CMI系统中工作;②分别开发的课能够结合而成为一个CMI系统的课程;③课程可以从一个CMI系统搬到另一个CMI系统;④方便分析学生数据。 根据SOA在开放性和互操作性方面的原则,服务或模块要能够在不同的环境和平台下方便地共享。因此,对于第一点和第三点来说,以上原则完全可以满足这些要求。 重用是SOA中的一个关键的核心概念。SOA中鼓励尽可能使用已有的服务,对象和应用来构建一个新的系统而不是重新编码。这样,就满足了第二点的要求,即为不同系统开发的课程就可以通过重用已有应用来形成新的一个CMI系统。 基于SOA的体系结构又具备松祸合,分布性,灵活性,和可靠性等方面的特点,因此可以方便地从不同的数据来源甚至是不同的系统中分析数据而满足第四点的要求。 再对CMI中要采用基于SOA体系结构的原因进行仔细分析。在CMI系统中常常要获取学生的基本信息。同样,在考试系统,教务管理系统中,此类的功能也必不可少。所以,同样的功能存在于三个不同的系统中。此外,就是在同一个系统中也有多个模块需要这样的功能,现有的面向对象和基于构件软件开发方法的解决之道同样是用到复用的概念,但这种复用和SOA中复用的重大差异在于前者的复用是一种“代码复用”,而SOA中的复用是一种“功能复用”。用面向对象和基于构件的软件开发方法可能会通过复制已有代码或实例化对象去解决。而在SOA中,只需要将这种“获取学生基本信息”的功能封装成服务,以后在任何一个系统中要用到此类功能时只需要对此进行调用即可。虽然用面向对象和基于构件的软件开发方法看起来存在着冗余编程的问题,可是也算是一种可选的解决方案。随着系统复杂性的增加,如果这三个系统是用不同编程语言运行在不同平台之上,那么用面向对象和基于构件的软件开发方法对于复用相同功能就无能为力,这三个系统必须分别编码去实现同样的功能。可是,如果利用SOA的重用服务的方法,代码无需更动,真正实现“一次编写,处处重用”的目的。因此,采用基于SOA的体系结构开发CMI计算机教学管理)系统较其它技术更具优势。 4.2基于SOA的CMI系统设计 由于Java技术具有跨平台的良好特性,而且J2EE提供的Web服务功能可以很容易地构建能够访问现有业务流程的SOA系统。因此使用J2EE技术开发基于SOA的CMI系统,其体系结构如图3所示。 图3CMI系统体系结构 表示层可以包括用户处理接口,与用户交互组件,浏览器或者使用其他编程语言编写的客户端程序。所有的这些客户端程序都可以向不同的服务发送请求。 防火墙是一种非常有效的网络安全模型,通过它可以隔离风险区域与局域网的连接,同时不会妨碍对风险区域的访问。防火墙可以监控进出网络的通信量,仅让安全的信息通过,同时又可以阻止不安全服务和非法用户以抵制具有危害的数据。 ESB即企业服务总线,用以实现在通信,集成以及服务交互等方面的功能。本系统使用SOAP/HTTP和WSDL去实现其最低功能。虽然只实现部分功能,但为系统留下增加如内部安全性,服务质量,和消息处理等功能的扩充余地。 Web服务层即通过无状态会话Bean或Jav-aBean来提供Web服务。 数据访问层使用不同的技术(比如EJB-CMP,JDO,ADO)和不同的持久性技术访问数据。这一层包含优化的数据访问代码,负责与数据源进行交互,并以相应的Web服务方法所期望的格式把数据返回给这些方法。这样就能保护数据的完整性。 数据源即各种关系型数据库或是基于XML的数据库,也可以是一组文件,甚至可以是外部的Web服务。 4.3基于SOA的CMI系统实现 综上所述,考虑到学生注册在多个系统中也是必不可少的功能,所以结合CMI系统中的学生注册为实例说明如何在Java中创建Web服务。采用的开发工具是WebsphereStudioApplicationDeveloper5.1。WSAD可以根据Bean创建Web服务,并使用Bean中的消息自动生成WSDL文件,描述所创建的Web服务,使用SOAP分析HTTP的数据等。 在项目CMI中包括有如下两个类,StuInfo和StuRegisterManager。其中Stulnfo保存有学生信息,在类StuRegisterManager中有createNewStuInfo方法可以写人学生信息。 启动WSAD中的Web服务向导将。reateNewStuInfo封装成Web服务。在这个过程中可以选择测试Web服务,生成客户代理来方便地进行测试。也可以选择“启动Web服务资源管理器以将此Web服务发布到UDDI注册中心”来将要生成的Web服务直接发布出去。 在生成Web服务之后,WSAD会自动生成一系列的WSDL文档,其中最重要的是StuRegisterMan-ager.wsdl文件。WSDL文档已被作为描述Web服务的通用方法,对此的理解可以帮助理解Web服务的运行机制。 WSDL文档的根元素是definitions,message元素表示在客户和Web服务之间传递的变量。port肠pe元素表示在客户和Web服务之间怎样发送该消息。Binding元素表示了客户和Web服务之间如何互发消息,在其transport属性中定义为transport=“http://schemas.xmlsoap.orglsoap/http”,表示客户和服务之间的SOAP消息将采用HTTP协议。Service元素规定客户调用该Web服务的URL,在这里使用本地地址进行测试并且在发布时将把它改为外部可以访问的地址。 在编码和生成Web服务之后,就可以将它发布出去。在此系统的开发和运行初期,采用了私有的UDDI注册中心,因为主要是要建立基于内部的发现模式,当然也可以把它们发布到公共注册中心。 最后的一步就是客户端使用所发布的Web服务。不同于EJB客户端通过名字引用EJB,Web服务客户端无需服务名但是必须首先定位Web服务。首先,读取关于学生注册Web服务的WSDL并为客户端生成代理,然后客户端就可以通过RPC使用代理来输人学生信息。 编码,生成,发布和调用已经完整地构成了一个Web服务开发的全过程。通过对系统进行分析设计出符合前文所述SOA中关于服务要求的Web服务,再根据上述Web服务开发过程将其创建出来,最后对这些Web服务进行恰当的流程整合,一个基于SOA架构松祸合的CMI系统就形成了。 5结束语 SOA的提出代表着标准化、松藕合、粗粒度的软件体系结构的出现,不仅如此,它更代表着不拘泥于具体技术实现方式的一种新的软件开发思想。当然,Web服务的技术在SOA达到成熟过程中起到关键作用,从SOA强调跨越异构平台和不同开发环境方面考虑,Web服务是目前分布式技术中符合SOA提倡标准化的不多选择之一。 在本文中我们对于SOA的现状、背景、优势、体系结构以及实现方法等各方面进行了介绍和分析。对Web服务作为一种SOA的实现技术也进行了重点介绍。最后,结合了一个具体的实例对于在SOA中开发Web服务进行了详细的说明。 由于SOA自身具有的优势符合了未来软件发展的趋势,并随着各大软件供应商在此展开的深入研究和激烈竞争,它必然会成为成熟的下一代主流开发技术而得到广泛支持和应用。 责编:罗信 微信扫一扫实时了解行业动态 微信扫一扫分享本文给好友 著作权声明:畅享网文章著作权分属畅享网、网友和合作伙伴,部分非原创文章作者信息可能有所缺失,如需补充或修改请与我们联系,工作人员会在1个工作日内配合处理。 |
推荐博客 |
|