1 概述
面向服务的体系架构(Service Oriented Architecture, SOA)就是在分布式的环境中,将各种功能都以服务的形式提供给最终用户或者其他服务。如今,企业级应用的开发都采用面向服务的体系架构来满足灵活多变,可重用性高的需求。IBM Rational Software Architect(RSA)是一套设计与开发工具,它构建在开放的、可扩展的Eclipse3.0平台之上,实现了多项行业最新标准,提供了灵活的插件扩展机制。借助UML2.0技术,它实现了模型驱动的软件开发模式,可以帮助开发团队创建更加强壮的软件结构。
本文作为SOA&RSA系列文章的第一篇,从总体上介绍了SOA实现的相关技术,以及RSA中对这些技术的支持与扩展。在后面的系列文章中,我们将对一些主要技术和工具做有针对性的具体介绍。
|
2 面向服务的体系架构 - SOA
在经典软件工程理论中,不管是瀑布方法还是原型方法,都是从需求分析做起,一步一步构建起形形色色的软件系统。但是,需求变更像一个挥之不去的阴影,时刻伴随着系统左右。每一个实际应用系统的开发者都饱尝了在系统进入开发阶段、测试阶段,甚至上线阶段遭遇应接不暇的需求变更的极端痛苦。如何解决这一问题?能否来一场软件开发和架构的革命?SOA的提出,就是被人看成这样的一场革命。其实质就是要将系统模型与系统实现分割开来。
2.1 什么是SOA
2.1.1 定义
SOA并不是一个新概念,有人就将CORBA和DCOM等组件模型看成SOA架构的前身。早在1996年,Gartner Group就已经提出了SOA的预言,不过那个时候仅仅是一个"预言",当时的软件发展水平和信息化程度还不足以支撑这样的概念走进实质性应用阶段。到了近一两年,SOA的技术实现手段渐渐成熟了,在BEA、IBM等软件巨头的极力推动下,才得以慢慢风行起来。
关于SOA,目前尚未有一个统一的、业界广泛接受的定义。一般认为:SOA,面向服务的架构是一个组件模型,它将应用程序的不同功能单元----服务(service),通过服务间定义良好的接口和契约(contract)联系起来。接口采用中立的方式定义,独立于具体实现服务的硬件平台、操作系统和编程语言,使得构建在这样的系统中的服务可以使用统一和标准的方式进行通信。这种具有中立的接口定义(没有强制绑定到特定的实现上)的特征称为服务之间的松耦合。
2.1.2 SOA中的特征
从SOA的定义中,我们看到两点:
基于上面讨论,我们给出SOA的下面一些特征:
2.2 SOA不等于web 服务
由于Web服务与SOA有着很多相同的技术特点,如:基于XML语言,符合SOAP、WSDL和UDDI标准等,很多人都认为下一代Web服务就是SOA。 Web服务可以用来实现SOA,但是如果没有Web服务,企业照样也可以很好地实现SOA。反之,即便是利用Web服务技术,也不一定能保证SOA的效果就更好。
Web服务与SOA关系如图1所示。
Web服务是一套技术体系,可以用来建立应用解决方案,解决特定的消息通信和应用集成问题。随着时间的推移,我们发现,这些技术在不断发展、不断成熟,也会更好地帮助你实现SOA。SOA是一种软件架构,而不局限于某个技术的组合(例如Web服务),它超越了技术范畴。在一个商业环境中,纯粹的SOA是一种应用软件架构,其中所有的功能都是相互独立的服务模块,通过完备定义的接口相互联系起来。只要按照一定的顺序来请求这些功能模块所提供的服务,就可以形成完整的业务流程。正如IBM SOA技术和策略总监Mark Colan先生强调的那样:"Web服务的确是实现SOA一条最好的路,但不等同于SOA。"
SOA的灵活性将给企业带来巨大的好处。如果把企业的IT架构抽象出来,将其功能以粗粒度的服务形式表示出来,每种服务都清晰地表示其业务价值,那么,这些服务的顾客(可能在公司内部,也可能是公司的某个业务伙伴)就可以得到这些服务,而不必考虑其后台实现的具体技术。更进一步,如果顾客能够发现并绑定可用的服务,那么在这些服务背后的IT系统能够提供更大的灵活性。
但是,要得到这种灵活性,需要有一系列实现架构的新方法,这是一项艰巨的任务。企业架构设计师必须要变成"面向服务的架构设计师",不仅要理解SOA,还要理解SOA的实践。在架构实践和最后得到的架构结果之间的区别非常微妙,也非常关键。那么目前SOA的实现技术究竟有哪些呢?
|
3 SOA的实现技术
3.1 实现SOA的核心技术 - web 服务
正如我们前面所讲的,服务是整个SOA实现的核心,web服务相关技术自然成为实现SOA的首选。
3.2 SOA 基础架构的关键组件 -企业服务总线(Enterprise Service Bus,ESB)
企业服务总线ESB(Enterprise Service Bus)是SOA架构的一个支柱技术。 作为一种消息代理架构它提供消息队列系统,使用诸如SOAP或JMS (Java Message Service)等标准技术来实现。 有人把ESB描述成一种开放的、基于标准的消息机制,通过简单的标准适配器和接口,来完成粗粒度应用(比如服务)和其他组件之间的互操作。
ESB的主要功能有:通信和消息处理、服务交互和安全性控制、服务质量和服务级别管理、建模、管理和自治、基础架构智能等。ESB由中间件技术实现并作为支持 SOA 的一组基础架构,支持异构环境中的服务、消息,以及基于事件的交互,并且具有适当的服务级别和可管理性。
SOA的原则可以描述如下:
为了实现 SOA,应用程序和基础架构都必须支持 SOA 原则。启用 SOA 应用程序涉及到创建服务接口,服务接口可以直接也可以间接地通过使用适配器用于现有的或新的功能。从最基本的级别来看,启用该基础架构涉及到规划功能来将服务请求路由和传递给正确的服务提供者。然而,基础架构支持在不影响服务的客户端的情况下由另一个服务实现替代原有的服务实现也是至关重要的。这不仅需要根据 SOA 原则指定服务接口,而且需要基础架构允许客户端代码以独立于所涉及的服务位置和通信协议的方式来调用服务。这样的服务路由和替代是 ESB 的许多功能中的一部分。
ESB 支持这些服务交互功能,并提供集成的通信、消息传递以及事件基础架构来支持这些功能。因此,它将当今正在使用的主要企业集成模式组合成一个实体。ESB 为 SOA 提供与企业需要保持一致的基础架构,从而提供合适的服务级别和可管理性、以及异构环境中的操作。图2显示了ESB为SOA提供的基础架构:
ESB 需要某种形式的服务路由目录(service routing directory)来路由服务请求。然而,SOA 可能还有单独的业务服务目录(business service directory),其最基本的形式可能是设计时服务目录,用于在组织的整个开发活动中实现服务的重用。Web 服务远景在业务服务目录和服务路由目录的角色中都放置了一个 UDDI 目录,因而使得可以动态发现和调用服务。这样的目录可以视为 ESB 的一部分;然而,在这样的解决方案变得普遍之前,业务服务目录可能与 ESB 是分离的。
Business Service Choreographer 的作用是通过若干业务服务来组合业务流程;因此,它将通过 ESB 调用服务,然后再次通过 ESB 将业务流程公开为客户端可用的其他服务。然而,Business Service Choreographer 在编排业务流程和服务中所扮演的角色确定了这种业务工作流技术是一种与基础架构技术 ESB 分离的技术。
最后,B2B Gateway 组件的作用是使两个或多个组织的服务在受控且安全的方式下对彼此可用。这有助于查看这些连接到 ESB 的组件,但它们并不是 ESB 的一部分。虽然有一些网关技术可以提供适合于实现 B2B Gateway 组件和 ESB 的功能,但是 B2B Gateway 组件的用途是将其与 ESB 分离。事实上,这种用途可能需要附加的功能(如合作伙伴关系管理),这些功能不是 ESB 的一部分,并且不一定受到 ESB 技术的支持。
3.3 实现SOA的方法学 - 模型驱动的开发
SOA强调松散耦合,强调跨平台集成,这与模型驱动的架构和开发不谋而合。模型驱动的架构和开发(Model Driven Architecture, MDA以及Model Driven Development, MDD)并没有把业务模型和平台无关模型分开来,而是把平台无关模型做为起点。
MDA由提出CORBA的OMG模型提出。MDA认为架构设计师首先要对待创建的系统有一个形式化的UML的模型。MDA首先给出一个平台无关的模型来表示系统的功能需求和use cases,根据系统搭建的平台,架构设计师可以由这个平台无关的模型得到平台相关的模型,这些平台相关模型足够详细,以至于可以用来直接生成需要的代码。
基于MDA的思想,利用MDD方式,我们可以对SOA进行建模,在此基础上,实现各种形式的模型转换或扩展实现SOA.
|
4 RSA对SOA实现技术的支持
IBM 软件开发平台提供了对SOA 应用程序开发的最好支持。IBM 软件开发平台包含 Rational 产品家族、向导、模板、及构建应用程序的指南,Rational 开发工具是基于成功的并且非常受欢迎的 Eclipse 平台,它不仅易用、灵活,而且在每一个开发进程中都可以使用外部开发环境。图3显示了基于 Eclipse 的 IBM Rational 产品体系。
Rational Software Modeler 提供了使用设计标准(比如统一建模语言,UML )构建模型的能力。通过 Rational Software Modeler,可以将这些模型转变为类和源代码。关于Web 服务的开发,Rational Web Developer for WebSphere Software Version 6.0 提供了一种端对端的环境。利用它,不仅可以完成开发和测试,还可以通过 WebSphere Application Server 产品完成 Web 服务的部署。
Rational Software Architect, RSA涵盖了RAD以及RSM的全部功能,提供了对基于模型的开发以及web应用开发的最好的支持。
4.1 对web服务开发的支持
RSA中包含了构建 Web 服务的专门工具,可以通过自顶向下,自底向上,为web服务建模等不同角度进行web服务的开发,提供了代码编写和完成应用程序的开发环境。还可以使用一些额外的工具(比如 IBM Rational Functional Tester),对应用程序进行测试,然后把它部署到 WebSphere 服务器平台中。
首先,RSA提供了XML的编辑器,可以对XML进行图形化的显示和编辑,图4显示了对XML的图形编辑界面及其对应的源代码。
另外,在RSA中可以创建web service及其相关的多种资源,如图5所示
当我们想将现有的资源,如Java Bean或者EJB作为web服务进行发布时,RSA中提供相应的支持,如图6所示:
相反,如果我们想生成已有的WSDL对应的web服务实现代码,也可以使用RSA中相应的工具,如图7所示:
RSA中提供了Web服务浏览器,使得发现web服务变得更容易,同时,RSA提供了图形界面对web服务的WSDL进行显示和编辑。见图8:
由于RSA提供了对UML2.0的支持,我们同样可以根据对web服务建模,通过模型转换来生成相应的web服务WSDL。如图9所示:
RSA贯穿整个应用程序开发的生命周期,使得应用程序的设计更加轻松,更一致地将 SOA 应用程序的组件捆绑在一起。
RSA内嵌了WebSphere Application Server 6.0的运行环境,WAS 6.0中的SI-BUS实现了ESB,因此我们可以用RSA进行SOA、ESB的部署和测试。如图10所示,可以在RSA上创建WAS 6.0的服务实例,并在此服务上部署ESB。
4.2 基于模型的开发与软件资产重用
除了对web服务开发的支持,RSA还提供对UML2.0规范以及可重用资产规范(Reusable Asset Specification, RAS )的支持。这就使得基于模型的开发(Model Based Development, MDA) 和基于资产的开发(Asset Based Development, ABD)成为RSA最有优势的两大特征。这里我们只作简单介绍,在本文的后续文章中,我们将对这些开发作详细介绍。
4.2.1 支持UML2.0的MDA平台
UML是实现MDA技术的一把钥匙,它使得用MDA技术创建的所有应用程序都基于标准化的、平台独立的UML模型。通过将这一通用的、被普遍接受的建模标准作为杠杆,MDA使得开发人员可以创建能被轻便地访问、天生具有良好的互操作性的应用程序。我们在前面提到,利用RSA可以对web服务建模,通过模型转换生成web服务。
基于Eclipse平台的RSA,提供各种模式(Pattern),模板(Template)插件的开发,通过这些高可重用度的模式及模板,用户只需要简单的参数配置,就可以得到相应的模型,代码及其他资源。图11显示了应用RSA模式生成新的模型,再基于新模型生成可部署的项目及代码。
4.2.2 Recipe - 基于资产的开发(Asset Based Development)
RSA中的解决方案指导(Solution Guide)插件基于可重用资产规范对资产的创建,打包,发布,到重用提供了全方位的支持。可以将各种模式,模型及其他可重用资源作为资产导出,存入本地或远程资产库以便重用及共享,资产在资产库中按照一定的方法进行分类,在RSA中使用资产库浏览器对资产进行查找时一目了然。图12是在可重用资产视图中,浏览资产库。
|
5 总结
在本文中,我们讨论了面向服务体系架构的基本概念以及实现技术,并列出了IBM Rational产品RSA对实现SOA的技术的支持,在后续的文章中,我们将对本文中涉及的各项具体技术实现细节作详细介绍。