GoGo时空

想讲就讲,要讲得响亮!
构客网首页  博客  论坛

 
  用户信息
 
帐号:  新手必读
密码: 保存密码
 
  分类列表
全部类别(116 篇)
GoGo乱弹(11 篇)
GoGo读书(18 篇)
GoGo翻译(31 篇)
GoGo转载(46 篇)
GoGo学艺(2 篇)
GoGo随想(7 篇)
  按月归档
2005年-11月(14 篇)
2006年-05月(73 篇)
2006年-10月(5 篇)
2007年-08月(24 篇)
  SOA2007 - SOA实践
我们何时迈向SOA
——SOA在中国的整体发展现状究竟如何?
我们如何迈向SOA
——中国企业如何迈出实施SOA的第一步?
我们应采用何种技术
——SOA国际标准SCA/SDO的具体内涵?
我们还需要何种技能
——SOA将如何改变系统架构设计以及项目管理过程?

显示第 1-10 条记录,共 115 条记录 首页 前页 后页 尾页  到第 页,共 12

参加SOA中国路线图大会有感

发布时间:2007年09月28日 作者:Cowboy

阅读次数:11249次 类别:GoGo随想 永久链接 Trackback 10条评论
  
      有幸参加了“SOA中国路线图暨SCA/SDO规范发布会”,聆听了来自IBM、BEA、Oracle以及普元等国内外知名厂商的专家演讲,感受到了SOA带来的蓬勃朝气。同时,也有了一些体会和思考:
l 规范与标准:这次会议是发人深省的,业界流传着一种说法“三流的公司做项目、二流的工作做产品、一流的公司做标准”,初听之时有些困惑,现在却身同感受,有了切实的体会。BEA副总裁Edward Cobb对于标准的作用进行了精辟的解释:标准可以将创新固化下来;标准促进厂商合作;标准是厂商与用户沟通的平台。而在我看来,标准更可以创造一个新的市场,同时标准还保障了不同厂商产品间的互操作性……标准的重要性已经不言而喻,甚至IBM这样的国际大厂商在推出新产品之前也会先制定标准。标准的制定过程也是各厂商协作与创新的过程,通过这一过程,可以最广泛地吸纳意见。对于中国而言,能够参与国际标准的制定,实在是弥足珍贵,从EVD标准的制定到大唐CDMA标准的落地无不说明国家对于标准的重视。因此,普元公司能够参与SOA标准的制定,实乃国之幸事。
技术人员的困惑:在CSDN主办的“中国SOA最佳实践大会”上,中间安排了一场颇有意思的现场互动,有一个代表性的问题,大意是:SCA代表了SOA时代的图形化编程方法,那么我们现在的程序员是否要丢饭碗了?来自SAP、普元、微软等公司的几位嘉宾给出了几乎雷同的答案“无需担心”。确实,回想软件开发或者说编程语言的历史,无不是以高一级抽象代替低级抽象的过程,从机器语言到C再到Java,现在来到了SCA时代。一方面,给了软件开发者一个应用或者业务的工具和视角来思考问题,另一方面,用户或者市场也对软件提出了更高的要求,这是市场与技术互动发展的结果。面对这样的变革,作为从业者的我们,持什么样的态度显得至关重要,是怀疑抗拒?还是积极拥抱?不同的态度有着截然不同的结果。
l 微软的SOA:微软在SOA家庭是一个另类而不可忽视的一员,参加大会的微软中国首席技术官李志宵博士要面对的质疑是:微软为什么不参加SCA标准组织?微软对于SCA的态度是什么等等;微软在桌面系统阵营里是绝对的老大,但在企业级市场不但是另类而且还相对薄弱,因此我关心的倒是微软在SOA或者企业级市场的解决方案。在李博士的讲述中,SOA实践被幽雅地分为三步曲“一、凿山开渠(暴露服务)”、“筑堤修坝(装配服务)”、“汇泽四方(消费服务)”,五大(业务)支柱:规则、报表、工作流、数据、消息。SOA相比面向对象、J2EE更是业务化的技术,必须加入业务化的元素,工作流、规则和报表这样的业务化元素的加入正是结合了这样的思想。

SCA 组装模型规范(七)---1.6扩展模型

发布时间:2007年09月28日 作者:Cowboy

阅读次数:7750次 类别:GoGo翻译 永久链接 Trackback 4条评论

1.6 扩展模型

组装模型可通过支持新的接口类型、实现类型和绑定类型而扩展。扩展模型基于XML schema substitution组及名称空间联邦之上。

所选择的接口、实现及绑定的元素名称形式要促成以简易的方式进行扩展。因此,相应的元素名为interface.xxximplementation.xxxbinding.xxx。“xxx”可以采用一个与接口、实现或绑定关注的相关名称。SCA规范定义了一些接口、实现和绑定的基本类型,但是其他的可在支持这些运行时可用的额外之处按照需要进行定义。

注意:规范的未来版本将定义如何贡献SCA模型扩展及其运行时功能。

1.6.1 定义接口类型

以下片段显示了包含在sca-core.xsd中的interface元素和Interface类型的基本定义;完整的schema参见附录。

<?xml version="1.0" encoding="UTF-8"?>

<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.osoa.org/xmlns/sca/0.9" xmlns : sca="http: //www.osoa.org/xmlns/sca/0. 9">

<element name="interface" type="sca: Interface"/> <complexType name="Interface"/>

</schema>

在以下片段中,我们展示了基本如何扩展以支持Java接口。此片段展示了包含在sca-interface-java.xsd中的interface.java元素和JavaInterface类型定义。

<?xml version="1.0" encoding="UTF-8"?>

<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.osoa.org/xmlns/sca/0.9" xmlns : sca="http: //www.osoa.org/xmlns/sca/0.9">

<element name="interface.java" type="sca:JavaInterface"

substitutionGroup="sca: interface"/>

<complexType name="JavaInterface">

<complexContent>

<extension base="sca: Interface">

<attribute name="interface" type="NCName" use="required"/> </extens ion>

</complexContent>

</complexType>

</schema>

1.6.2 定义实现类型

以下片段展示了包含在sca-core.xsd中的implementation元素和Implementation类型的基本定义;完整的schema参见附录。

<?xml version="1.0" encoding="UTF-8"?>

<schema xmlns="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://www.osoa.org/xmlns/sca/0.9"

xmlns : sca="http: //www.osoa.org/xmlns/sca/0. 9">

<element name="implementation" type="sca: Implementation"/> <complexType name="Implementation"/>

</schema>

在以下片段中,我们展示了基本如何扩展以支持Java接口。此片段展示了包含在sca-implementation-java.xsd中的implementation.java元素和JavaImplementation类型定义。

<?xml version="1.0" encoding="UTF-8"?>

<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.osoa.org/xmlns/sca/0.9" xmlns : sca="http: //www.osoa.org/xmlns/sca/0.9">

<element name="implementation.java" type="sca:JavaImplementation" substitutionGroup="sca: implementation"/> <complexType name="JavaImplementation">

<complexContent>

<extension base="sca: Implementation">

<attribute name="class" type="NCName" use="required"/> </extens ion>

</complexContent>

</complexType>

</schema>

1.6.3 定义绑定类型

以下片段展示了包含在sca-core.xsd中的binding元素和Binding类型的基本定义;完整的schema参见附录。

<?xml version="1.0" encoding="UTF-8"?>

<schema xmlns="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://www.osoa.org/xmlns/sca/0.9"

xmlns : sca="http: //www.osoa.org/xmlns/sca/0.9">

<complexType name="ExternalProvider"> <sequence>

<element minOccurs="0" maxOccurs="1" ref="sca:binding"/>

<element minOccurs="1" maxOccurs="unbounded" ref="sca:interface"/> </sequence>

<attribute name="name" type="NCName" use="required"/>

</complexType>

<element name="binding" type=" sca : Binding"/> <complexType name="Binding"/>

</schema>

在以下片段中,我们展示了基本如何扩展以支持WebService绑定。此片段展示了包含在sca-binding-webservice.xsd中的binding.java元素和WebServiceBinding类型定义。

<?xml version="1.0" encoding="UTF-8"?>

<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.osoa.org/xmlns/sca/0.9" xmlns : sca="http: //www.osoa.org/xmlns/sca/0. 9">

<element name="binding . ws" type=" sca : WebServiceBinding"

substitutionGroup="sca :binding"/>

<complexType name="WebServiceBinding">

<complexContent>

<extension base=" sca : Binding">

<attribute name="port" type="anyURI" use="required"/> </extens ion>

</complexContent>

</complexType>

</schema>


SOA的进化(一)---序

发布时间:2007年09月28日 作者:Cowboy

阅读次数:8474次 类别:GoGo翻译 永久链接 Trackback 6条评论
本文审视XMLWeb服务及SOA间的关系,并解释厂商和标准组织如何从那些持续浮现Web服务规范中形成奇妙的竞争与协同竞技场。然后我们从应用架构简短历史的叙述着手来对过去的二十年作一个总结。

本文大纲如下:

  1. SOA时间轴(从XMLWeb服务再到SOA
  2. SOA的持续进化(标准组织与贡献厂商)
  3. SOA的根源(SOA与过去架构的比较)

 

这个主题顺序可能有一点奇怪。我们以最近及当前的开发开始,以回顾过去架构平台而结束。简单地选择了这个结构,是因为本文最后环节的信息或许不是每个人都需要阅读。

 

[注]:本文节译自"Service-Oriented Architecture: Concepts, Technology, and Design"

By Thomas Er

Publisher: Prentice Hall PTR

(未完待续)


SOA的进化(七)---SOA的根源 (SOA与过去架构的比较)之三

发布时间:2007年09月28日 作者:Cowboy

阅读次数:6167次 类别:GoGo翻译 永久链接 Trackback 4条评论

3.4. 比较SOA与混合Web服务架构

在前一节中,我们提到最近的分布式互联网架构变化已如何成为混合Web服务。这一主题值得详细说明,因为它已经是(并预期继续是)SOA周围的混乱之源。

首先,传统架构内使用Web服务是完全合理的。由于许多编程语言都支持对Web服务的开发,他们可轻易地将其嵌入老的应用设计。并且,对于那些不支持Web服务定制开发的遗留环境,通常也可用适配器的方法来解决。

注意

尽管我们集中于分布式互联网架构,但并没有限制两层客户-服务器的应用使用Web服务。

Web服务作为构件包装器

Web服务在这个语境中的主要角色已引进了一个包含包装器服务的整合层,促成经由SOAP兼容的集成通道的同步通信(4.7)。实际上,SOAP规范初始发布和第一代SOAP服务器都被特别设计用来复制使用消息的RPC风格的通信。


这些集成通道主要在集成结构中,被用以促进与其他应用或外部合作伙伴的通信。也被用于促成与其他(更多的面向服务)解决方案通信,还可利用第三方工具提供的Web服务。不管他们在传统架构中的使用或目的,关键是要澄清靠这种方式在分布式互联网架构中纳入Web服务不具备真正的SOA资格。这只是使用Web服务的分布式互联网架构。

并非是反映构件接口和用Web服务建立点对点连接,SOA提供了对于不同通讯模型的强健支持(基于同步和异步的交换)。另外,在SOA内的Web服务受制于特定的设计需求,象由面向服务原则提供的那些。这些和其他的特征都支持对和谐的松散耦合的追求。一旦实现,单个服务不再限于点对点通信;它能够适应任何的现在和未来的请求者。

SOA内部的Web服务

然而SOA在大小和品质方面会有所不同,SOA与其他架构在Web服务的使用方面有切实不同的特征。本书主要专注于探索这些特征。目前已经充分阐明:基本上,SOA构建于一组Web服务,它们被设计用于一个或多个电子商务流程的集体自动化(或者参与自动化的),SOA促进将这些服务组织成抽象企业自动化逻辑特定部分的特定层。

同样通过跨企业的标准SOA,出现了天然的协同性,超越了专有的应用平台。这考虑到先前不同的环境组成,以支持新的和进化的业务自动化过程。

(未完待续)

SOA结构模型在企业信息整合中的应用

发布时间:2007年09月28日 作者:Cowboy

阅读次数:7478次 类别:GoGo乱弹 永久链接 Trackback 2条评论
SOA提供了一种方法, 通过这种方法在构建分布式系统时, 可以将应用程序功能作为服务提供给终端用户应用程序或其他服务……  

SOA结构模型在企业信息整合中的应用

作者: 叶健辉,  出处:赛迪网, 责任编辑: 叶江, 2007-04-29 08:10

  SOA提供了一种方法, 通过这种方法在构建分布式系统时, 可以将应用程序功能作为服务提供给终端用户应用程序或其他服务……

  一、传统方法进行企业信息整合的分析

  企业应用集成(EAIEnterp rise Application Integration) 是指对企业中完成不同业务功能的应用系统进行集成, 在它们之间建立起可供数据交流和应用沟通的纽带, 进而使他们之间的信息交互成为可能。通过这种方式使用户可以访问企业的整体信息, 而不必考虑这些具体信息到底是属于哪一个应用系统的, 即各个不同应用系统对用户来说是透明的。

  传统的企业应用集成的层次主要有数据级集成、应用接口级集成、业务逻辑级集成等; 数据级集成属于面向信息的集成方式, 该方式可能会导致损坏数据, 打开数据库的安全缺口等; 应用接口级集成属于面向接口的集成方式, 采用该方式对AP I接口进行修改时, 将增加大量的工作量, 也可能会增加现有应用系统的不稳定性。而业务逻辑级集成属于面向过程的集成方式。该集成方式不仅暴露了应用程序的业务逻辑, 而且由于业务逻辑的交叉, 导致了各个集成系统之间的紧耦合性, 降低了应用系统的灵活性, 增加了整个系统维护的难度。

  上述3种方式都属于紧耦合的应用系统集成方式。这种紧耦合的集成方式将影响系统的灵活性和扩展性, 阻碍业务的流程调整和优化, 不利于企业业务发展。为解决上述问题, 需要一种面向功能层的企业系统集成方式。该方式不仅能保证原有系统的数据安全性和逻辑安全性, 而且还能实现各系统之间的松耦合, 方便系统流程的重组和优化。SOA的出现,为这一问题提供了一个比较完美的解决方案。

  二、面向服务的体系结构(SOA)

  2.1 面向服务体系结构简介

  SOA(service-oriented Architecture,也叫面向服务的体系结构或面向服务架构)是指为了解决在Internet环境下业务集成的需要,通过连接能完成特定任务的独立功能实体实现的一种软件系统架构。SOA是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是 采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。

  传统的Web(HTML/HTTP)技术有效的解决了人与信息系统的交互和沟通问题,极大的促进了B2C模式的发展。WEB服务 (XML/SOAP/WSDL)技术则是要有效的解决信息系统之间的交互和沟通问题,促进B2B/EAI/CB2C的发展。SOA(面向服务的体系)则是 采用面向服务的商业建模技术和WEB服务技术,实现系统之间的松耦合,实现系统之间的整合与协同。WEB服务和SOA的本质思路在于使得信息系统个体在能 够沟通的基础上形成协同工作。

  2.2 SOA结构模型

  SOA提供了一种方法, 通过这种方法在构建分布式系统时, 可以将应用程序功能作为服务提供给终端用户应用程序或其他服务。在发现新的商机或危机的预期下, SOA 体系结构形式旨在提供企业业务解决方案, 这些业务解决方案可以按需扩展或改变。SOA 解决方案由可重用的服务组成, 带有定义良好且符合标准的已发布接口。SOA 提供了一种机制, 通过这种机制, 可以将原有系统资源封装成服务后集成到新开发的分布式系统, 而不管它们的平台或语言。SOA中的服务通过服务描述和传输实现了相互之间的交互, 如图1所示。

  其中, 服务描述是一种经过协商的模式, 用于描述服务是什么、应该如何调用服务以及成功地调用服务需要什么数据等。传输是一种机制, 用于将来自服务使用者的服务请求传送给服务提供者, 并且将来自服务提供者的响应传送给服务使用。

2.3 SOA中的工作角色

  在SOA服务模型图(2)中面向服务的体系结构中主要有三种角色:

  (1) 服务消费者是需要使用服务的应用程序或其它的服务。通过对注册中心的服务进行查询后, 根据接口说明信息并使用某种传输协议与服务绑定并执行服务功能。

  (2) 服务提供者是创建服务的实体。可以从服务消费者处接受请求并可以远程执行所请求服务。通过向注册中心发布服务接口信息以供服务消费者发现和访问服务。

  (3) 服务注册中心处于中心位置提供了展示服务的功能。服务消费者通过查询存储有服务信息库的注册中心以找到感兴趣服务的接口信息。

  2.4 SOA三大基本特征

  一、 独立的功能实体 :在Internet这样松散的使用环境中,任何访问请求都有可能出错,因此任何企图通过Internet进行控制的结构都会面临严重的稳定性问题。 SOA非常强调架构中提供服务的功能实体的完全独立自主的能力。传统的组件技术,如.NET RemotingEJBCOM或者CORBA,都需要有一个宿主(Host或者Server)来存放和管理这些功能实体;当这些宿主运行结束时这些组 件的寿命也随之结束。这样当宿主本身或者其它功能部分出现问题的时候,在该宿主上运行的其它应用服务就会受到影响。

  SOA架构中非常强调实体自我管理和恢复能力。常见的用来进行自我恢复的技术,比如事务处理(Transaction),消息队列 (Message Queue),冗余部署(Redundant Deployment)和集群系统(Cluster)SOA中都起到至关重要的作用。

  二、 大数据量低频率访问 :对于.NET RemotingEJB或者XML-RPC这些传统的分布式计算模型而言,他们的服务提供都是通过函数调用的方式进行的,一个功能的完成往往需要通过客 户端和服务器来回很多次函数调用才能完成。在Intranet的环境下,这些调用给系统的响应速度和稳定性带来的影响都可以忽略不计,但是在 Internet环境下这些因素往往是决定整个系统是否能正常工作的一个关键决定因素。因此SOA系统推荐采用大数据量的方式一次性进行信息交换。

  三、 基于文本的消息传递 :由于Internet中大量异构系统的存在决定了SOA系统必须采用基于文本而非二进制的消息传递方式。在COMCORBA这些 传统的组件模型中,从服务器端传往客户端的是一个二进制编码的对象,在客户端通过调用这个对象的方法来完成某些功能;但是在Internet环境下,不同 语言,不同平台对数据、甚至是一些基本数据类型定义不同,给不同的服务之间传递对象带来的很大困难。由于基于文本的消息本身是不包含任何处理逻辑和数据类型的,因此服务间只传递文本,对数据的处理依赖于接收端的方式可以帮忙绕过兼容性这个的大泥坑。

  此外,对于一个服务来说,Internet与局域网最大的一个区别就是在Internet上的版本管理极其困难,传统软件采用的升级方式在这种 松散的分布式环境中几乎无法进行。采用基于文本的消息传递方式,数据处理端可以只选择性的处理自己理解的那部分数据,而忽略其它的数据,从而得到的非常理想的兼容性。

  从SOA的几个重要特征可以看出,SOA之所以被用于信息资源整合,是因为其具备了标准化、可操作、可组装的特性。SOA提供了一个通用的、可 互操作的和有弹性的行业标准架构,可以在软件基础架构中建立一系列支持商业模型的可重复利用的服务,这些服务由不同应用系统的组件构成,能够帮助企业实现适应商业流程变化的需求。

三、采用SOA进行企业信息系统集成

  3.1采用SOA进行企业现有信息系统集成的步骤:

  •   1) 提取各个应用系统中需要对外暴露的功能模块。这些功能模块通常都是一些能够清晰完整地表现其业务价值的软件实体, 该软件实体包含了它所能提供的所有服务。
  •   2) 将这些功能模块表现为服务组件的形式。定义服务的描述信息、服务的接口以及调用服务所需要的定位信息等。将软件实体的概念模型转换成实际的服务模型。
  •   3) 将已实现的服务发布到服务注册器,供其他服务调用者进行查找和绑定。这个步骤可以视企业集成的具体情况选择使用。
  •   4) 绑定和调用服务, 将各个应用系统集成起来, 实现企业应用在功能层面的集成(见图3)

  3.2实施建议

  整合是分阶段、循序渐进、逐步实现的。如果把企业的所有经营活动看作是一个个服务,那么整合就是要将企业内外部的各种服务有机地联结起来。首先可以只需创建单独的服务;接下来不仅可以创建服务,而且可以开始将业务功能集成到SOA;第三步涉及将企业IT基础设施转换到SOA模型;最后则集中 于转换业务模型,以使之成为适应需求变化的模型。

  对具体的整合对象,按照建模、装配、部署、管理四个阶段实现整合。在建模阶段,可以定义业务模型或流程、软件模型和SOA模型。之后就可以创建 一组服务,这组服务可以与已发布的通用接口一起重用;在部署阶段,开发人员可以提取创建的服务,并把它们放在一个可执行、可管理的环境之中;在使用阶段, 根据软件模型来装配应用程序,并且测试其软件质量以及非功能性需求,比如性能、可伸缩性等等;最后的管理阶段是一个长期的过程,在这个阶段中,可以监控并 管理安全性和使用,以及在许多与可能已经为SOA制订好的服务级协定或策略相对应的方面比较其性能。

  这样由小及大,逐渐在企业业务中进行整合扩散,并形成整个企业的IT转型,最终通过全面整合实现随需应变的企业IT架构。

3.3 基于Web服务体系结构的SOA企业信息系统整合

  作为一种概念,SOA已经成熟。比较来说,现在Web服务是实现SOA最好的方式。Web服务是由URL (Uniform Resource Locator) 确定的软件应用, 其接口和绑定能够以XML(ExtensibleMarkup Language) 的形式定义、描述和发现, 并且支持借助Internet协议, SOAP ( Simple ObjectAccess Protocol) 。采用XML 格式消息的方式与其他软件应用交互 。Web 服务采用[ 6 ]WSDL(Web ServicesDescrip tion Language) 作为其服务接口描述语言、通过UDD I (Universal Descrip tion, Discovery and Integration) 协议规范进行Web服务的网上注册和服务查找定位, 并使用SOAP传输协议在网络间进行XML格式的信息交互。

  XML是一种扩展标记语言。Web服务的描述语言就是用XML形式描述的 , Web服务的数据也是以XML格式进行交换的。可以说XML是定义Web服务协议规范的基石。

  WSDL服务描述语言采用XML Schema定义。WSDL能对各种语言实现的服务进行描述, 具有语言无关性。

  DD I是通用描述、发现和集成协议。UDD I使得全球统一定位、发现服务成为可能。

  3.4 Web服务集成实现模型

  要运行,管理SOA应用程序,企业需要SOA集成模型,这是SOA平台的一个部分。SOA集成模型必须支持所有的相关标准,和需要的运行时容器。图4所示的是一个典型的SOA集成模型。下面分别介绍这些层。

  SOAP WSDL UDDI WSDLUDDISOAPSOA基础的基础部件。WSDL用来描述服务;UDDI用来注册和查找服务;SOAP,作为传输层,用来在消费者和服务提供者之间传送消息。SOAPWeb服务的默认机制,其他的技术为可以服务实现其他类型的绑定。一个消费者可以在UDDI注册表(registry) 查找服务,取得服务的WSDL描述,然后通过SOAP来调用服务。

  WS-I Basic ProfileS-I Basic Profile,由Web服务互用性组织(Web Services Interoperability Organization)提供,是SOA服务测试与互用性所需要的核心构件。服务提供者可以使用Basic Profile测试程序来测试服务在不同平台和技术上的互用性。

  J2EE .Net :尽管J2EE和。NET平台是开发SOA应用程序常用的平台,但SOA不仅限于此。像J2EE这类平台,不仅为开发者自然而然地参与到SOA中来提供了 一个平台,还通过他们内在的特性,将可扩展性,可靠性,可用性以及性能引入了SOA世界。新的规范,例如 JAXB(Java API for XML Binding),用于将XML文档定位到Java;JAXR(Java API for XML Registry)用来规范对UDDI注册表(registry)的操作;XML-RPC(Java API for XML-based Remote Procedure Call)J2EE1.4中用来调用远程服务,这使得开发和部署可移植于标准J2EE容器的Web服务变得容易,与此同时,实现了跨平台(如。NET) 的服务互用。

服务品质 :在企业中,关键任务系统(MISsion-critical system,译注:关键任务系统是指如果一个系统的可靠性对于一个组织是至关重要的,那么该系统就是该企业的关键任务系统。比如,电话系统对于一个电话促销企业来说就是关键任务系统,而文字处理系统就不那么关键了。)用来解决高级需求,例如安全性,可靠性,事物。当一个企业开始采用服务架构作为工具来进行开发和部署应用的时候,基本的Web服务规范,像WSDLSOAP,以及UDDI就不能满足这些高级需求。正如前面所提到的,这些需求也称作服务品质 (QoSquality of services)。与QoS相关的众多规范已经由一些标准化组织(standaRDS BOdies)提出,像W3C(World WIDE Web Consortium)OASIS(the Organization for the Advancement of Structured InfORMation Standards)。下面的部分将会讨论一些QoS服务和相关标准。

  安全 :Web服务安全规范用来保证消息的安全性。该规范主要包括认证交换, 消息完整性和消息保密。该规范吸引人的地方在于它借助现有的安全标准,例如,SAML(as Security Assertion Markup Language)来实现web服务消息的安全。OASIS正致力于Web服务安全规范的制定。

  可靠 :在典型的SOA 环境中,服务消费者和服务提供者之间会有几种不同的文档在进行交换。具有诸如仅且仅仅传送一次”( once-and-only-once delivery)最多传送一次”( at-most-once delivery)重复消息过滤”(duplicate message elimination)保证消息传送”(guaranteed message delivery)等特性消息的发送和确认,在关键任务系统(mission-critical systems)中变得十分重要。WS-Reliability WS-ReliableMessaging是两个用来解决此类问题的标准。这些标准现在都由OASIS负责。

  策略 :服务提供者有时候会要求服务消费者与某种策略通信。比如,服务提供商可能会要求消费者提供Kerberos安全标示,才能取得某项服务。这些要求被定义为策略断言(policy assertions)。一项策略可能会包含多个断言。WS-Policy用来标准化服务消费者和服务提供者之间的策略通信。

  控制 :当企业着手于服务架构时,服务可以用来整合数据仓库(silos of data),应用程序,以及组件。整合应用意味着例如异步通信,并行处理,数据转换,以及校正等进程请求必须被标准化。在SOA中,进程是使用一组离散的 服务创建的。BPEL4WS 或者 WSBPEL(Web Service Business Process Execution Language)是用来控制这些服务的语言。WSBPEL目前也由OASIS负责。

  管理 :随着企业服务的增长,所使用的服务和业务进程的数量也随之增加,一个用来让系统管理员管理所有运行在多相环境下的服务的管理系统就显得尤为重要。 WSDM(Web Services for Distributed Management)规定了任何根据WSDM实现的服务都可以由一个WSDM适应(WSDM-compliant)的管理方案来管理。

  其它的Qos特性,比如合作方之间的沟通和通信,多个服务之间的事务处理,都在WS-COOrdination WS-Transaction 标准中描述,這些都是OASIS 的工作。

  四、结论:

  SOA提供了标准化的架构,一个应用对应的服务也能适用于其它应用,企业开发新应用的速度将得到大大提高,同时对旧有系统也可以包装成服务,服务之间为了满足新业务的需求可以进行组合,从而实现信息系统资源的整合。

 


SOA的进化(五)---SOA的根源 (SOA与过去架构的比较)之一

发布时间:2007年09月28日 作者:Cowboy

阅读次数:7582次 类别:GoGo翻译 永久链接 Trackback 6条评论

3. SOA的根源 (SOA与过去架构的比较)

我们现在实际地跳回时间轴看一看过去架构与SOA的差别。这是一项有趣的研究, 我们能够看出SOA许多当代特征的起源。

3.1. 什么是架构?

自打有计算机处理的自动化解决方案方案起,技术架构就已存在。然而,在较老的环境中,解决方案直接建构于抽象的任务上,并规定其架构很少被执行。

随着多层应用的崛起,应用交付的变异开始剧增。IT部门开始认识到需要定义标准化的基线应用,作为其他应用的模板。这个定义自然是抽象的,但明确地解释了所有解决方案以这个模板为基础,包括其技术、边界、规则、限制及设计特征。这就产生了应用架构

应用架构

应用架构对于应用开发团队的意义,相当于蓝图对于建筑工团队的意义。不同的组织印证不同水平的应用架构。一些保持了高水平,提供技术蓝图的抽象的物理及逻辑表达。另一些则包括更多的细节,类似通用数据模型,通信流程图,应用范围的安全需求,以及基础设施方面。

对于一个组织而言有几个不同的应用架构的情况是不希奇的。一个架构文档典型地代表了不同的解决方案环境。例如,一个同时拥有.NETJ2EE解决方案的组织很有可能针对每一种有分别的应用架构规范。

任何应用级架构的关键部分在于它既要直接反映解决方案的需求,同样又要考虑长期的、策略性的IT目标。正由于这个缘故,组织内的应用架构会伴以企业架构并与其中居统治地位的一个保持一致。

企业架构

在较大的IT环境,关键在于需要控制并指导IT基础设施。当有很多不同的应用架构共同存在的时候,且有时甚至要整合,底层的主机平台变会复杂而繁重。因此,通常会创建一个控制规范,为企业内存在的所有异质形态的提供高层概述,同时给出支持基础设施的定义。

继续我们前一个类推,对于组织而言,企业架构规范相当于一个城市的城市规划。因此,城市规划与建筑蓝图间的关系,可与企业与应用架构规范间的关系相类比。

典型地,企业架构的变化直接影响应用架构,这是为什么架构规范通常由同一组人来维护。而且,企业架构经常包含组织长期技术和环境发展规划。例如,阶段性的目标有可能是要立足于这个规范来逐步淘汰过时的技术平台。

最后,也可能会定义技术与策略背后的企业级安全度量。然而,这经常会被作为单独的安全架构规范。

面向服务架构

简单而言,面向服务架构跨越了企业与应用架构两个领域。当被用于跨多解决方案的环境时,SOA所提供的潜在效益才能真正释放。这个是对可复用和可协同服务的投资,并且充分利用基于厂商中立的通信平台。这并不意味着企业必须变成面向服务。SOA所引入的特性及特征大部分都属于这一范畴。

注意术语“SOA”并不意味着一个特殊的架构范围。SOA可以是指一个应用架构,或是用于跨企业的技术架构的标准化方法。因为SOA天生的可组合性(意味着单个的应用层架构可由不同的扩展及技术组成),完全适用于超越SOA的组织。

请注意,如同前一章所解释的,Web服务平台提供了众多实现SOA形式中的一个。它是本书专门研究的一种方法,但是还存在其他方法,比如由传统的分布式平台所提供的这些。术语方面有一点很重要,就是在后面章节中及整本书中所用的术语“SOA”是指在第3所建立的当代SOA模型(基于Web服务与面向服务原则)。

3.2. 比较SOA与客户-服务器架构

几乎在任何环境中,只要有一段软件从另一个请求或接收信息,都能够被称为“客户-服务器。”几乎每一个不同的应用架构都曾存在(包括 SOA)一种客户-服务器的交互元素。然而,行业术语“客户-服务器架构”通常是指特殊的前一代环境,期间客户端与服务器扮演了特定的角色,并有清晰的实现特征。

客户-服务器架构简史

初期庞大的主机授予组织严格的计算方式,通常被视作是客户-服务器架构稚形。这些环境,其中庞大的主机后端伺服瘦客户端,被看作单层客户-服务器架构(2)。

2. 个典型的单层客户端服务器架构


主机系统天然支持同步及异步通信。后一种方法主要用于让服务器连续不断地接收来自终端的字符,以响应个别的击键事件。只在某种条件下服务器才会响应。

虽然它仍有残留痕迹,但是当两层客户-服务器的变化设计在80年代后期出现时,主机作为最初的统治计算平台开始衰退。

这个新方法引入了委派逻辑、以及处理职责下发到单个工作站的概念,导致了胖客户的诞生。受图形用户界面(GUI)创新的进一步支持,两层客户-服务器被认为是前进了一大步,并在90年早期持续统治了IT界数年之久。

这个架构的通常配置包含多个胖客户端,每一个都有自己到中心数据库服务器连接。客户端软件执行大量处理,包括所有的展现相关及多数的数据访问逻辑(3)。一个或多个服务器通过累积可扩展的关系型数据库管理系统,促进了这些客户端。

3. 典型的两层客户-服务器架构


让我们通过单独地和将它们与SOA的相应部分作比较两种方式,来看一看两层客户-服务器架构的主要特征。

应用逻辑

客户-服务器环境将大多数应用逻辑放到客户端软件中。这导致庞大的程序连同后端资源来一起来控制用户体验。分布式业务规则是一个例外。一个流行趋势是将嵌入的和维护的业务规则与数据关联,放入数据库的存储过程与触发器之内。这略微抽象了一组来自客户端的业务逻辑,并简化了数据访问编程。尽管如此,客户端还是承担着所有的展示任务。

当代面向服务解决方案中的展现层会有所不同。任何软件片段若有能力依照所需的服务契约进行SOAP消息交换,都可归为服务请求者。同时通常也期望请求者能提供服务,展现层的设计完全开放并对应特定的解决方案需求。

在服务器环境内,存在关于应用逻辑如何驻留与分布的选择权。这些选择权不排除数据库触发器和存储过程。同时,面向服务设计的原则开始起作用,通常指导划分自治处理逻辑的单元。这促进了特定设计品质,比如服务无状态化及协同性,还有可组合性及复用性。

另外,常有这些处理逻辑单元在SOA内不属于任何解决方案的情形。这也支持了促进复用以及跨越应用边界的松散耦合这一终极目标。

应用处理

因为大部分客户-服务器应用逻辑驻留于客户端,客户端工作站负责了大量的处理。80/20比率常被作为一个经验法则,按此法则数据库服务器承担了20%的工作量。尽管如此,数据还是常常成为这些环境中的性能瓶颈。

有大用户量的两层客户-服务器解决方案,通常需要每一客户建立其自身的数据库连接。通信可预期是异步的,而且这些连接是永久的(意味着它们需要通过用户登录并保持活动直至其退出应用)。专有数据库连接是昂贵的,并且资源需求经常压垮数据库服务器,给所有用户以可观的反应时间。

另外,假定客户被分配以主要的处理职责,他们常要求重要的资源。客户端执行完全是有状态的,并要消耗大量的固定PC内存。用户工作站因此经常需要专门运行客户端程序,以便所有可用资源能够提供给应用。

SOA中的处理是高度分布式的,每一服务都有一个清晰的功能边界和相关的资源需求。在面向服务架构建模技术中,对于如何能够定位及部署服务你有很多的选择。

企业解决方案包含多个服务器时,每一个都装有Web服务并支持中间件。因此,对于SOA而言没有固定的比率。服务可根据需要分布,而且在决定物理部署配置时,性能需求是要考虑的因素之一。

服务与请求者间的通信可以是同步的或是异步的。这一灵活性允许进一步改进处理,特别是使用异步的消息模式时。另外,通过在消息中放入更多的智能,可获得消息层面的语境管理选择。这促进了无状态的及自治的服务本性,并进一步经历减少对状态信息缓存的需要。

技术

客户-服务器应用的出现促进了第四代4GL编程语言的使用,比如Visual BasicPowerBuilder。这些开发环境充分利用了Windows操作系统所提供的能力,来创建更美观丰富、更具交互性的用户界面。尽管如此,传统的第三代语言,比如C++,仍在使用,特别是对于有更严格的性能需求的解决方案。在后端,主流的数据库厂商,象OracleInformixIBMSybase与微软,提供了强健的关系型数据库管理系统,能够管理多连接,同时提供了灵活的数据存储及数据管理特性。

SOA所用的技术集实际上并不象它所延展的那么多。旧版本的程序语言的更新版本,象Visual Basic,依旧能够用于创建Web服务,且依旧可以使用传统数据库。尽管如此,SOA的技术版图已经变得日渐不同。除了Web技术的标准集(HTMLCSSHTTP等等),当代SOA一并带来了建立XML数据表达架构的绝对需求,还有SOAP通讯框架,以及服务架构所包含的永远扩展的Web服务平台。

安全

除了数据的存储与管理以及嵌入存储过程和触发器中的业务规则,安全是经常在客户-服务器架构的服务器层面集中处理的另一个部分。数据库十分复杂,足以管理用户帐户及用户组长,并将其分配到物理数据模型的个别部分。

安全也能够客户程序中控制,特别是当它与特定应用逻辑执行的业务规则相关联时(譬如挑选用户对部分用户界面进行限制访问)。另外,与操作系统级的安全协作可实现单点登录,此时应用直接继承操作系统的登录账户信息。

尽管有人夸耀SOA的优势,许多架构师却羡慕客户-服务器的安全性。企业数据经由单点鉴权而受到保护,建立了客户端与服务器间的单一连接。在SOA的分布世界中,这是不可能的。安全变成一个重要而复杂的问题,与必需的安全措施程度直接相关。牵扯到许多典型技术,大多数包含在WS-安全框架中

管理

客户-服务器时代终结的一个重要原因在于相关分发的大量维护成本的增加,以及跨工作站应用逻辑的维护。因为每一个客户装载有应用代码,每一次应用更新都要对所有的工作站重新分发软件。在较大型的环境中,这造成了高度繁重的管理流程。

维护问题跨越了用户端和服务器端。客户工作站受特定环境问题的支配,因为不同的工作站会安装不同的软件程序,或者可能购买不同的硬件厂商。更有甚者,还增加了对服务器端数据库的要求,特别是当客户-服务器应用拓展到更大的用户基础时。

因为面向服务的解决方案会有不同的请求者,它们还要受到来自客户端维护的挑战。同时其分布式后端要适应应用及数据库服务器的扩展性,会引入新的管理需求。例如,一旦SOA发展为服务复用并成为多服务组合的一部分,服务器资源与服务接口的管理会需要强大的管理工具,包括私用注册的使用。

(未完待续)


SCA 组装模型规范(五)---1.4子系统

发布时间:2007年09月28日 作者:Cowboy

阅读次数:6568次 类别:GoGo翻译 永久链接 Trackback 3条评论

1.4<span style="7pt

子系统被sca.subsystem文件中的subsystem元素定义。以下片段展示了system schema

version="1.0" encoding="ASCII"?>

xmlns="http://www.osoa.org/xmlns/sca/0.9" xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"

name="xs:NCName" uri="xs:anyURI">

name="xs:NCName" multiplicity="0. .1 or 1. .1 or 0. .n or 1. .n"?>* . interface-type/>

uri="xs :anyURI"/>+

wire-target-URI?

name="xs :NCName" uri="xs :anyURI" module="xs :NCName">* ?

?

name="xs:NCName">*

.interface-type/>

uri="xs:anyURI"/>+

*

address-type/>

subsystem元素有以下属性:

l name – 子系统名称,且在SCA系统中必须是唯一的

l uri – 用作包含在子系统中入口点和模块构件服务的URI前缀。如果它是相关的,就是与系统的基本URI相关。它缺省与子系统name属性URI相关。

注意:Eclipse命名惯例为插件提供了一个良好的方法来获得唯一名称,例如com.mycompany.myvaluesubsystem。此格式被推荐但并非标准。

subsystem元素的子元素在以下章节被详细描述 moduleComponententryPointexternalReferencewire

1.4.1 模块构件

模块构件(module component是在一个子系统内的可配置模块。模块构件所引用的模块被称为实现模块构件。模块构件提供的服务由实现模块构件的模块中的入口点所定义。模块构件引用由实现模块构件的模块外部服务所定义。

与模块内的构件服务与引用相比较,它们仅由接口代表,模块构件的服务与引用由特定绑定它们的入口点和外部服务所定义

模块构件是包含在sca.subsystem文件中的子系统部分。模块构件由subsystem元素的子节点moduleComponent元素所代表。在一个子系统中可有零个或多个moduleComponent元素。以下片段展示了具备moduleComponent子元素的子系统schema

version="1.0" encoding="ASCII"?>

xmlns="http://www.osoa.org/xmlns/sca/0.9" xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"

name="xs :NCName" uri="xs:anyURI" >

name="xs:NCName" uri="xs:anyURI" module="xs:NCName">* ?

?

元素的值连线引用到解析引用的服务。引用的更多细节参见连线部分。

moduleComponent元素有以下属性:

l name – 模块构件的名称,此名称必须跨越SCA子系统的所有模块构件而唯一,在子系统中没有入口点与模块构件同名,因为它们都可被作为连线源,没有子系统中的外部服务与模块构件同名,因为它们都能作为连线目标。

l uri – 用作此模块中包含的入口点前缀的URI。如果有关联是相关的,就与包含在子系统中的模块构件URI相关。缺省与名称属性的URI相关。

l module – 实现子系统的模块名称

模块构件元素能够可选地有一个properties子元素。此属性可能由实现moduleComponent的模块可覆盖属性来指定。在覆盖属性模块中的属性必须模块构件中指定。更多细节参见覆盖部分

模块构件元素可有零或一个references元素作为其子节点。references元素有一个或多个元素作为其子节点。可被配置的引用由模块所定义。name>

1.4.2 覆盖

可能对于模块组装者来说,要指定模块的一些方面可能或必须由部署此模块的子系统所覆盖。这些可覆盖的方面为:

l 构件属性

l 入口点绑定

l 外部服务绑定

入口点绑定部是可覆盖的,因为对于子系统而言,总是有可能在不同地址或绑定来暴露不仅是在模块中所列的一个入口点。

模块组装者有一些可选的有关是否可能被覆盖的外部服务或构件属性。每种这些元素有一个具有以下值的覆盖(override属性

l no – 此值不可能被子系统覆盖。这是缺省属性。

l may – 此值可能被子系统覆盖。这是外部服务的缺省属性。

l must – 此模块没有指定值,且子系统必须指定一个。

模块的外部服务在子系统中被连线到不同目标服务的moduleComponent相应引用覆盖这可被局限于为外部服务简单定义一个新的入口点地址。一个模块的入口点被指定指定要求绑定的子系统级连线覆盖。

可覆盖的构件属性变成包含它的模块属性。此属性通过为部署它的子系统的moduleComponent上的属性指定一个值进行覆盖。moduleComponent属性的类型由可覆盖属性的类型决定。属性名称缺省是构件属性的名称。然而,因为多个构件可能包含相同名称的属性,可能有必要为指定moduleComponent指定不同的名称。构件属性元素可能包括modulePropertyName属性,其值被用于moduleComponent属性的名称。

1.4.2.1 ModuleComponent示例

下图展示了用来在系统图中的子系统的模块构件符号

服务

 

引用

12ModuleComponent符号

下图展示了包含MyValueModuleComponentCustomerModuleComponent的子系统图。模块构件依照实现模块构件的模块入口点和外部服务展示了服务和引用。

 

13MyValueSubsystem的子系统图

以下片段展示了MyValueSubsystemsca.subsystem文件,包含有针对MyValueModuleComponentCustomerModuleComponentmoduleComponent元素。展示了CustomerServiceStockQuoteService引用的连线,以MyValueModuleComponent的引用覆盖了在MyValueModule内定义的端点地址:

version="1.0" encoding="ASCII"?>

xmlns="http://www.osoa.org/xmlns/sca/0.9" xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"

name="MyValueSystem" >

name="MyValueModuleComponent" module="MyValueModule">

CustomerModuleComponent/CustomerService

http: //www.NEWstockquote.org/services/StockQuote

name="CustomerModuleComponent" module="CustomerModule"/>

1.4.3 外部服务

外部服务(external service代表的远程服务对使用服务的SCA系统而言是外部的。

在模块级别上与系统级别上的外部服务之间的区别在于:

l 在子系统中定义的所有外部服务名称必须是唯一的。在一个子系统中没有外部服务可以与一个模块构件同名,因为他们都可以作为连线的目标

外部服务是包含在sca.subsystem文件中的子系统的一部分。外部服务由subsystem元素的一个子节点externalService元素所代表。在一个系统中可以有零或多个externalService元素。以下片段展示了具有externalService子元素schema的子系统schema

version="1.0" encoding="ASCII"?>

xmlns="http://www.osoa.org/xmlns/sca/0.9" xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"

name="xs :NCName" uri="xs :anyURI" >

name="xs :NCName">*

. interface-type/>

uri="xs :anyURI"/>+

只包含一个或多个外部服务的子系统可部署到SCA系统中。

子系统级别的外部服务可被用于覆盖与/或模块构件引用的目标地址绑定,此处实现模块的外部服务的覆盖 属性可被设置为maymust。当外部服务被连线到模块构件引用时,由外部服务所定义的绑定和目标地址就得以应用。

1.4.3.1 外部服务示例

下图展示了我们在子系统图中用来表达在一个外部服务的符号。

 

14ExternalService符号

StockQuoteServiceESSu bsystem下图展示了包含外部服务StockQuoteServiceERStockQuoteServiceERSubsystem子系统图。

 

 

 

 

 

 

15:展示外部服务的StockQuoteServiceESSubsystem

以下片段展示了包含StockQuoteServiceER externalReference元素的StockQuoteServiceERSubsystem文件的sca.subsystem文件。

version="1.0" encoding="ASCII"?>

xmlns="http://www.osoa.org/xmlns/sca/0.9" xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"

name="StockQuoteServiceystem" >

name="StockQuoteServiceER">

. wsdl interface=”http: //www. stockquote . org/StockQuoteService# wsdl.interface (StockQuote) ”/>

<binding.ws port="http: //www. stockquote.org/StockQuoteService# wsdl.endpoint(StockQuote/StockQuoteServiceOAP) "/>

1.4.4 入口点

入口点(entery point被用于声明一个子系统外部可访问服务。

在模块级的和在系统级之上入口点之间的区别在于:

l 此名称必须跨越所有子系统中定义的入口点唯一。在一个子系统中的入口点不可以与模块构件同名,因为它们都能够被作为连线的源。

l 引用子元素的规范是可选的,因为它通过另一个子系统连线应用而被连线。

入口点是包含在sca.subsystem文件中的子系统的一部分。入口点被作为subsystem元素的entryPoint元素表达。在一个子系统中可有零个或多个entryPoint元素。以下片段展示了具有entryPoint子元素schema的子系统schema

version="1.0" encoding="ASCII"?>

xmlns="http://www.osoa.org/xmlns/sca/0.9" xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"

name="xs :NCName" uri="xs :AnyURI" >

name="xs:NCName" multiplicity="0. .1 or 1. .1 or 0. .n or 1. .n"?>* . interface-type/>

uri="xs :AnyURI"/>+

wire-target-URI< /reference>?

你可以将一个子系统部署到一个只包含一个或多个入口点的SCA系统中。

URI扩展规则被应用之后,一个模块入口点可通过将相应的moduleComponent服务连线到一个已将相同绑定URI作为模块构件入口点的子系统级入口点。在此情形下,系统级入口点完全代替了在模块极入口点中手术室的相应绑定。如果一个系统入口点拥有与其目标模块构件入口点不同的URI绑定,那么系统入口点提供了除模块构件提供的绑定之外的一个绑定。

1.4.4.1 入口点示例

下图展示了我们在子系统中用于代表一个入口点的入口点符号。

 

16EntryPoint符号

下图展示了包含入口点StockQuoteServiceEPStockQuoteServiceEPSubsystem系统图。

 

17StockQuoteServiceEPSubsystem图展示了入口点

以下片段展示了包含StockQuoteServiceEP externalProvider元素的StockQuoteServiceEPSubsystem文件的sca.subsystem文件。

version="1.0" encoding="ASCII"?>

xmlns="http://www.osoa.org/xmlns/sca/0.9" xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"

name="StockQuoteServiceEPSubsystem" >

name="StockQuoteServiceEP">

. wsdl

interface="http: //www. sq.org/SQService#wsdl.interface (SQService) "/> <binding.ws

port="http: //www. sq.org/SQService#wsdl.endpoint(SQService/SQServiceSOAP) "/>

1.4.5 连线

SCA连线(wire)在子系统内将外部服务连接到入口点。模块级别上的连线与系统级别上区别在于:

l 连线的源和目标不必是包含此连线的子系统的一部分。源和目标可被其他子系统定义,或者对SCA系统而言可以是外部的。

l 源和目标仅当其绑定是兼容时才可被连线。这对于一个模块内部而言不是问题,因为所有的绑定都是本地的。

l 可能有只包含连线的子系统。

连线被以两种方式之一定义于包含在sca.susbsytem文件中的子系统中。

如果是连线源的模块构件或入口点与被定义在与连线相同的子系统中,那么连线就被模块构件或入口点的配置引用所定义。引用被解析引用的服务连线目标URI所配置。

如果是连线源的模块构件或入口点被定义在一连线不同的子系统中,那么连线被作为subsystem元素的一个子元素的wire元素所表达。在一个子系统中可有零个或多个wire元素。另外,在与连线不同的子系统中的连线源或目标,源/目标名称必须是合格的子系统名称。

以下片段展示了具有模块构件和入口点以及连线子元素的引用元素Schema的子系统schema

version="1.0" encoding="ASCII"?>

xmlns="http://www.osoa.org/xmlns/sca/0.9" xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"

name="xs :NCName" uri="xs :anyURI" >

name="xs:NCName" multiplicity="0. .1 or 1. .1 or 0. .n or 1. .n"?>* . interface-type/>

uri="xs :anyURI"/>+

wire-target-URI< /reference>?

name="xs :NCName" uri="xs :anyURI" module="xs :NCName">* ?

*

address-type/>

一个模块构件的元素一个入口点的reference元素可以有以列连线目标-URIwire-target-URI:

l /


SOA的进化(二)---SOA时间轴

发布时间:2007年09月28日 作者:Cowboy

阅读次数:7910次 类别:GoGo翻译 永久链接 Trackback 3条评论

1 SOA时间轴(从XMLWeb服务再到SOA

我们从讲述形成当前SOA平台的关键工业开发入手来建立时间轴。然后我们看一看SOA在它的权限范围内,如何作为当代架构的平台而改变了XMLWeb服务技术的角色。

1.1. XML简史

如同HTML,扩展标记语言(XML)系W3C所创建,源自流行的标准通用标记语言(SGML),它在60年代后期就已存在。这是广泛使用的元语言,允许组织增加原始文档数据。

XML90年代后期的电子商务运动中声名鹊起,服务器端脚本语言可以经由互联网而处理业务。通过XML的使用,开发者能够给任何片段附加上意义和上下文,再跨越互联网协议传输。

XML不仅被用于以标准化的方式来表达数据,其语言自身还被用作一系列的附加规范的基础。XML Schema定义语言(XSD)与XSL转换语言(XSLT)都以XML表达。这些规范,事实上已成为关键核心XML技术集的关键部分。

XML表达架构代表了SOA的基础层。在其内部,XML建立了在服务各处流动的消息格式与结构。XSD schemas保持消息数据的完整与有效性,而且XSLT使得不同的数据表达间通过schema映射而能够互相通信。换句话说,没有XML你在SOA内寸步难行。

1.2. Web服务简史

2000年,W3C接受了一项关于简单对象访问协议SOAP)规范的提案。这个规范本来设计用于(并在一些案例替代)专有RPC通信。想法是对于在构件间传输参数数据可以序列化成XML传送,然后支序列化成其原生格式。

很快,公司及软件厂商开始看到,对于推进通过构建于专有-免费的互联网通信框架之上的电子商务技术,存在日益巨大的潜力。这最后导致了创建一个纯粹的、基于Web的分布式技术能充分利用概念标准化的通信框架,来桥接组织之间和组织内部所存在的巨大差异。这个概念被称为Web服务。

Web服务最重要的部分是其公共接口。它是分配服务识别并使其激活的核心信息块。因此,首先支持Web服务的是Web服务描述(WSDL)。W3C第一份WSDL评议提案是在2001年,此后还在不断地修订这一规范。

为了进一步的开放协同性的愿景,Web服务需要一个互联网友好的、XML兼容的通信格式,以便能够建立一个标准化的通讯框架。尽管有别的选择,譬如可以考虑XML-RPC,但SOAP因为工业界的偏好而胜出,并且保留了最初的通讯标准用于Web服务。

为支持SOAP的新角色,W3C随之发布了更新版本的规范,同时考虑了RPC风格的与文档风格的消息类型。而后者在SOA里面更为常用。最终,“SOAP”一词不再代表“简单对象访问协议”的首字母缩写。到了规范的1.2版,它变成了一个独立的术语。

完成第一代Web服务标准家族的是UDDI规范,它原本由UDDI.org所开发,被递交到OASIS之后,它继续与UDDI.org一起合作开发。这个规范考虑在组织内部及组织边界之外来创建标准化的服务描述的注册。UDDI提供了潜在的对Web服务在一个集中的位置注册,在此处能够被服务请求者所发现。WSDLSOAP不同,UDDI尚未被工业界所普遍接受,并且保留了一个可选的SOA扩展。

开发定制的Web服务可适应变化的业务需求,并且第三方市场出现了促进各种实用服务的销售或租赁。现存的通讯平台,譬如面向消息的中间件(MOM)产品,结合Web服务可支持SOAP之外的其他消息协议。一些组织可迅速合并Web服务,以促进B2B数据交换经常要转变为EDI(电子数据交换)替代品的需求。

1.3. SOA简史

不久前组织才开始意识到只需要缓和地替代现存的分布式应用,Web服务可成为独立的架构平台---可使用Web服务技术集的效益来实现企业中服务概念的平台。这样,面向服务架构开始进入IT的主流。

在这一点SOA频繁地以不同的方式被分类,经常依赖于构建服务所用的实现技术。早期的模型,主要从Web服务标准初始系列中得到灵感,将SOA定义为一个围绕三个基本的构件的架构模型:服务请求者,服务服务提供者与服务注册(1)。

1. SOA的早期形态

SOA早期形态

第一代Web服务标准实现此模型的以下方面:

  • WSDL描述服务。
  • SOAP提供了用于服务及其请求者的通讯格式。
  • UDDI提供了标准化的服务注册格式。

从物理架构的角度,基于Web服务的SOA第一次变异实际上超越了原始SOA模型。你或许能回忆起原始SOA不需要使用服务注册。作为替代,发现被归类为当代SOA的一个特征,通过面向服务原则在服务层面被提倡。

我们的原始SOA模型在今天可轻易获得,因为它已被所有主要厂商的开发及运行平台所支持。这些相同厂商都有关于SOA的远大计划,其中许多现在已经能够自我证明。当代SOA的诸多特征,大都是过分主动的开发与协作的结果,已经产生了一系列第一代Web服务平台的扩展。知名的“第二代”或“WS-*”规范,这些扩展处理特殊的功能区域,Web服务技术平台全面提升至企业水平。

补充WS-*领域对于将面向服务概念引入业务分析的世界也很重要。通过面向服务,业务逻辑能够清晰地被封装,并从根本的自动化技术中抽象。这个愿景藉由业务流程定义语言的提升而得到进一步支持,最知名的是WS-BPEL。这不仅考虑到将传统的业务流程管理(BPM)模型解决成一系列的服务,更进一步提供具体的和可执行的格式充分表达业务逻辑的语言能力,填补了分析与实现间的空隙。

这些及其他工业影响已经扩大了SOA的潜在范围。如同更多的当代特征被增加,也很可能今天我们所归类的当代SOA,会形成未来原始SOA的基础。

SOA是一个真正的进化。今天的结果明显是被不同的相关标准组织和软件厂商主动驱动的结果。通过受协作与竞争的混合刺激的不稳定环境,扩展被作为战略定位,每个都定义了我们称为当代SOA技术平台一个特定部分。在第2节,我们近距离看看标准的开发过程。

1.4. SOA如何改造XMLWeb服务

如同任何架构,SOA引入了边界和规则。尽管当代SOA可能由XMLWeb服务技术平台所构成,但这些平台需要经历大量的变化,以便其各自的技术被适当定位并在面向服务架构范围内加以利用。

使用XMLWeb服务的传统分布式应用环境因此肯定有一些重新实现,面向服务的设计原则需要在技术与心态方面都进行改变。以下是当你必须对现存实现翻工时,你可能面对的一些潜在问题示例。

  • SOA现在需要数据表达与服务建模标准表达保持一致。这个相当含糊的需求有许多含意,并主要促进内在协同性。
  • SOA依赖于负责所有服务间通信的SOAP通讯。结果,所有需要XML的地方,一般也会有SOAP消息,以照顾传输、临时处理与路由及最终交付。XML文档与关联的XSD schema现在经常需要有意地与SOAP通讯一起建模。
  • SOA使用标准化的文档风格的通讯。从RPC风格迁移到文档风格的消息给服务描述的设计强加了变化。特别地,接口特征需要以更普通的术语表示,并全面增加操作粒度。
  • 由于强调文档风格的SOAP消息,SOA促进内容及高智能模型。这个支持服务的无状态及自治,并使消息传输的频度最小化。然而先前的RPC风格的方法支持带有目标数据的小颗粒XML文档传输,在SOA内的XML文档经常需要代表不止一个数据语境的绑定数据。
  • 直到WS-*扩展的高阶信息能力普遍流行,许多应用都将需要配备SOAP报头来实现临时解决方案以管理复杂的消息交换。一些更急迫需求包括管理与关联。这些临时的设计有效地建立了转变模型,需要时可轻易地迁移到工业标准的实现。

要点总结

  • 核心XML技术集已成为分布式互联网架构的通用部分。现在也提供基础数据表达及SOA数据管理层。
  • 第一代Web服务架构来自关键标准开发:WSDLSOAPUDDI。然而UDDI对于多数据环境而言仍旧是一个可选的发现机制,WSDLSOAP已经成为构建在XML层之上定义SOA基本通信框架的核心技术。
  • SOA充分利用XMLWeb服务率先铺设的道路。它将久经考验的概念与先进技术的结合,已经被IT社团所充分接受。
  • 尽管当代SOA已经形成并有了对XMLWeb服务的工业级接受度,SOA的到来对于已有XMLWeb服务的传统应用还是带来了改变。
(未完待续)

SCA 组装模型规范(三)---1.3模块(上)

发布时间:2007年09月28日 作者:Cowboy

阅读次数:6228次 类别:GoGo翻译 永久链接 Trackback 3条评论

1.3 模块

SCA模块(SCA Module)是可被一起开发和部署的紧耦合构件的最大组合。它是在一个SCA系统内松耦合的基本单元。一个SCA模块包含一系列构件、外部服务、入口点及连接彼此的连线。模块给一个SCA系统贡献服务实现。

模块具备以下标准特征:

l 它定义了一个构件的可视化边界。构件可能不直接进行模块之外的引用。

l 在一个模块之内,服务调用被作为以传地址(by-reference)语义的本地操作执行,除非声明为选程接口。在模块之间,服务调用远程使用传值(by-value)语义执行。

l 它定义了一个部署单元。模块被用于为一个SCA系统而贡献业务服务。

模块被在一个sca.module文件中的一个module元素所定义。下面展示了模块Schema

<module xmlns="http://www.osoa.org/xmlns/sca/0.9" xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9" name="xs:NCName">

<entryPoint name="xs:NCName" multiplicity="0..1 or 1..1 or 0..n or 1..n">*

<interface.interface-type/>

<binding.binding-type uri="xs:anyURI"/>+

<reference>wire-target-URIreference>

entryPoint>

<component name="xs:NCName">*

<implementation.implementation-type/>

<properties>?

<v:property-name>property-valuev:property-name>+

properties>

<references>?

<v:reference-name>wire-target-URIv:reference-name>+

references>

component>

<externalService name="xs:NCName">*

<interface.interface-type/>+

<binding.binding-type uri="xs:anyURI"/>*

externalService>

<wire>*

<source.uri>wire-source-URIsource.uri>

<target.uri>wire-target-URItarget.uri>

wire>

module>

module元素有如下属性(attribute

l name模块名称,必须在一个SCA系统内唯一。模块名称的形式也有限制以便必须不包含“/”或者“#”,因为它们能够在系统级被用作元素间的分隔符。

注意Eclipse对于插件(plugin)的命名规范提供了一个实现唯一名称的好方式,例如com.mycompany.myvaluemodule。这种格式被推荐但并非标准。

模块包含零个或多个入口点、构件、外部服务连线。这些工件在下面几节详细描述。构件包含模块的业务逻辑。连线描述连接到或连接自构件的服务。入口点定义由模块所提供的公共服务,能够自模块外部访问。外部服务代表模块在模块外部的别处所提供的服务。

1.3.1 构件

构件(component实现implementation实例(instance配置。构件提供并消费服务。多于一个构件可使用并配置相同的实现,在此每一构件配置的实现不同。例如每一构件可能配置对于消费不同服务的相同相同实现的引用。

实现定义了以一种构件类型形式的构件的可配置方面。SCA考虑了多种不同的实现技术,诸如JavaTM业务流程执行语言[7] BPEL)、C++SCA定义了一个可扩展机制,思考新的实现类型。当前的规范不要求一个SCA运行时对实现技术进行支持,厂商可能选择一种对共重要的技术进行支持。

构件被定义在一个sca.module文件中。构件被作为module元素子节点的component元素所成代表。一个模块内可以有零个或多个构件元素。以下片段展示了带有component子元素schemamodule schema

<module xmlns="http://www.osoa.org/xmlns/sca/0.9" xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9" name="xs:NCName">

<component name="xs:NCName">*

<implementation.implementation-type/>

<properties>?

<v:property-name override="no or may or must" modulePropertyName="xs:NCName">value

v:property-name>+

properties>

<references>?

<v:reference-name>wire-target-URIv:reference-name>+

references>

component>

module>

component元素有以下属性:

l name – 构件的名称。此名称必须:


SCA 组装模型规范(六)---1.5绑定

发布时间:2007年09月28日 作者:Cowboy

阅读次数:7115次 类别:GoGo翻译 永久链接 Trackback 3条评论

1.5 绑定

绑定(binding)被外部服务和入口点所使用。外部服务使用绑定来描述用于调用一个外部服务(可以是一个由其他SCA模块所提供的服务)的访问机制。入口点使用绑定来描述对于必须使用入口点所发布的服务的客户(可以是来自其他SCA模块的客户)的访问机制。

SCA支持使用绑定的多个不同类型。示例包括SCA服务、Web服务、无状态会话EJB、数据库存储过程、EIS服务SCA运行时必须提供对SCA服务和Web服务绑定类型的支持。SCA提供了一个扩展机制,借此SCA运行时可对额外的绑定类型进行支持。有关如何定义附加的绑定类型,参见扩展模型一节(Extension Model)。

绑定由binding元素所定义,它是在模块文件或子系统文件中外部服务或入口点元素的子元素。以下片段展示了具有binding元素schema的模块schema

version="1.0" encoding="ASCII"?>

xmlns=http://www.osoa.org/xmlns/sca/0.9 xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"

name="xs:NCName" >

name="xs:NCName" >*

.interface-type/>

uri="xs :anyURI"/>+ wire-target-URI< /reference>

name="xs :NCName" override="sca:OverrideOptions”>* .interface-type/>

uri="xs:anyURI"/>*

binding元素的名称是有架构的;其自身之中是限定名称。首个限定符总是名为“binding”,第二个限定符是各自的绑定类型(binding-type)(例如:binding.scabinding.wsbinding.ejbbinding.eis)。

binding元素有一个具有以下语义的可选uri属性

l 对于外部服务而言,URI属性定义了外部服务的wire-target URI。在模块内定义外部服务是可选的,但是需要在子系统内定义外部服务。一个模块的外部服务的URI 属性可被模块构件使用模块配置。一些绑定类型可能不只需要简单URI的目标地址(类似WS-Addressing入口点引用)。在这些情形中,绑定类型将定义识别服务所必须的附加属性或子元素。

l 对于入口点而言,URI属性定义了相对于模块构件的URI。此URI的缺省值是入口点的名字。

当一个入口点存在多个绑定时,意味着此服务可用于任何规定的绑定。系统用于在可用绑定中进行选择的技巧被疏于实施,并可能包括额外的(非标准)配置。无论如何,用到的技巧都应当被文档化。

入口点能够总是在子系统级有其绑定覆盖。仅当外部引用有may或者must覆盖属性时,外部引用才是可覆盖的。详情参见覆盖部分

以下部分详细描述SCAWeb服务绑定类型。

1.5.1 部署绑定的URI形式

用于绑定的组成联合uri属性的有效URI如下:scheme的基本系统URI / 子系统URI / 模块构件URI / 绑定URI

对基本URI在“http://acme.com”的入口点,子系统名是“equitiesSubsystem”,模块构件名为“stocksComponent”,入口点绑定为“getQuote的相对URIURI看起来会象这样:http ://acme .com/equitiesSubsystem/stocksComponent/getQuote

在每个级别指定的URI可能是绝对的或是相对的。路径被缩短到只包括指定绝对URI的最低级(最右边)以及跟随它的所有相对URI。这样,如果在前一例子中的模块构件有“http://acme.com”的绝对URI,而不是“stocksComponent”的相对URI,那么有效的URI会仅以http ://acme.com/getQuote结尾。

系统可能为任何支持层级URIURI scheme指定一个的基本URIURI只为有基本URI的系统构造。

对于任何同时有一个名字和和一个uri属性的SCA元素,uri缺省与名称相同。如果binding元素不指定一个uri属性,URI缺省赋给作为入口点部分的名字。因此,如果没有uri属性被指定,绑定的缺省URI将是:基本系统URI/子系统名/模块构件名/入口点名。

允许指定一个不同于子系统名称的相对URI,模块构件或者入口点名称允许入口点URI层级独立于系统组织而设计。

URI层级设计成独立于系统组织一种是好的实践,但当系统初始创建时可能有时会使用缺省URI层级。在此情况下,系统组织会被改变,同时依靠给选定元素的uri属性赋以适当的值维护着URI层级形式。这时是一对改变组织的同时维护现存URI的示例:

l 要将单个moduleComponent(说是“foo”)转变成两个moduleComponents,新的包含用在“foo”中的moduleComponenturi属性值应当是:“. ./foo”。

l 要将两个moduleComponents融到一个moduleComponent(将“foo”和“bar”只融到“foo”中),用在“bar”模块中的绑定应当有一个“. ./bar/myEntryProint”的uri属性。

URI属性也可能被用来为一些入口点创建更短的URI,此处子系统或者模块构件根本不可能在URI中出现。例如,如果一个模块构件有一个“.”的uri属性,那么此模块构件的名称将不会出现在URI中。

1.5.2 SCA绑定

SCA binding元素由以下schema定义。

SCA绑定可被用于客户端与包含在不同SCA模块间服务间的服务交互。在此种方式中,绑定类型的实现在SCA规范中没有定义,它还可以由不同的SCA运行时以不同的方式实现。唯一的需求是要求服务质量必须为SCA绑定类型实现。SCA绑定类型会有意是一个互操作的绑定类型。对有互操作性,类似问题Web服务绑定这样的互操作绑定类型应当被使用。

如果外部服务经由其uri属性指定了一个URI,那么就提供了连到由另一个模块构件提供的服务的连线。URI值必须如下:



显示第 1-10 条记录,共 115 条记录 首页 前页 后页 尾页  到第 页,共 12