随笔 - 181, 文章 - 2, 评论 - 85, 引用 - 0
数据加载中……

4月17日-----初期的团队分工

由April进行SOA技术文章的筛选和转载。
筛选了50篇关于SOA技术方面的文章,有助于加强团队初期对SOA技术的熟悉。以最快的速度了解SOA,在此基础上发挥想象力,创造出一个合理可行的解决方案。

团队的初期分工:
      组长:Merlin.
      组员:April,Tory
      
Merlin和Tory大量阅读技术文档,研究提出解决方案。April负责blog的建设。

posted @ 2006-04-17 16:10 wsdfsdf 阅读(181) | 评论 (0)编辑 收藏

观点与展望,第 1 部分: 选择 SOA 的原因和时机-----IBM 技术带头人回答有关 IT 体系结构的各种亟待处理的问题

了解 IBM 有洞察力的专家和领先技术开拓者对 IT 架构师在目前及将来面临的问题的评述,了解他们的观点与展望。本月,他们将对以下问题进行讨论:为什么应该考虑 SOA?何时应当选择 SOA,何时又不应该选择 SOA?

欢迎阅读观点与展望专栏

欢迎阅读第一期观点与展望,IBM 技术专家将在此 developerWorks 专栏中就 IT 架构师需要及时解决以完成其工作的问题提供指导。每个月,我们都将拜访 IBM 内部架构师社区(包括最知名的有洞察力的人、标准组织的投稿人、我们产品团队的架构师和每天与客户接触的顾问),邀请他们与大家分享他们对目前 IT 和软件架构师面临的最重要问题的看法。

无论您是跨越全球的大型团队的架构师,还是刚刚开始学习 IT 体系结构技术与实践的新手,他们的回答都将给您提供帮助,为您带来灵感并促进您的积极参与。这些观点和看法并不一定十分全面。有关此处涉及的主题的更多指导信息,可以参考 developerWorks Architecture area 的另一部分:IT Architecture resource round-up。另外,如果您有具体问题需要询问专家,或希望发表讨论,则请访问 developerWorks IT 体系结构讨论论坛







引言

面向服务的体系结构 (SOA) 已成为了一项事实标准,用于开发基于组件的应用程序,可使用标准接口通过网络(Internet 或其他网络)访问这些应用程序。至少 IBM 高级管理人员和很多其他供应商、分析师、顾问和软件开发人员都这么说。他们还将告诉您,整个行业都在逐步采用 SOA,如果您尚未开始 SOA 开发,将很快跟不上时代的步伐了。

赞誉之词。但这些看法是否真的很有吸引力,能让您开始着手您自己的 SOA 吗?让我们来看看一位参加 Open Group 主办的 SOA 大会的架构师的问题。在 IBM Global Services 副总裁 Michael Liebow 的主题发言后的提问期间,这位架构师问道:“SOA 是不是我们需要知道的唯一体系结构?(顺便提一下,Liebow 先生的回答是“是的”)在稍后,另一位架构师大声问道:“SOA 和我们多年前就知道的组件体系结构很相似。如果我们采用了它,是否意味着我们又多添了一个技术竖井(另一个开发死胡同),从而需要进行更多的集成?”(而这次,会议参加者——包括平台供应商、企业 IT 架构师、顾问、系统集成商和其他人员——回答的是“不是。”)

这就提出了我们本月要向我们的专家询问的问题。如果您和 IBM 最近接触的很多架构师一样,那么您可能正在评估甚至采用 SOA 的过程中。但您可能仍在怀疑这是否是体系结构样式的必由之路,新东西很快由更为流行的东西取代,或者,这个体系结构是否真的适用。

我们的专家对此问题的回答包含了很多您之前听到的说法:SOA 促进了可重用性,提供了接口和实现之间的抽象级别以最小化依赖关系,将业务需求与 IT 功能结合,从而可以为您提供用于将业务需求转换为编程服务来实现流程自动化的机制,以及当前竞争激烈且快速变化的业务环境中所必需的灵活性,等等。另外,这些专家还根据他们与 IBM 内外开发先驱合作的实践经验提供了一些新颖的看法,将帮助您了解 SOA 在何时如何(甚至为什么)适合在您的 IT 体系结构和开发计划中使用。

在此对本月的专栏供稿编辑 Holt Adams 表示感谢。Holt 是 IBM Software Group 团队一位经验丰富的 IT 架构师,就您将要读到的内容为内部 IBM 社区提供了指导。他还提供了他自己对这个问题的回答“何时采用 SOA,何时不采用 SOA。”

好了,不再多说,下面就请了解一下我们的专家的观点吧。(有关回答问题的专家的更多信息,请参阅本专栏最后的关于专家。)我们邀请您就 SOA 提出您的看法。您可以访问我们的 IT 体系结构讨论论坛,或通过以下地址给我发电子邮件:pdreyfus@us.ibm.com

Paul Dreyfus,编辑
developerWorks SOA and Web services







何时采用 SOA,何时不采用 SOA

Holt Adams IBM 的目标之一是在其产品内开发和采用开放标准。通过这样做,就能在您公司的 IT 基础结构中实现 SOA 的价值主张。SOA 能够优化业务需求与 IT 的一致性,能够将业务流程活动从服务实现中分离出来,还能够降低操作成本。只有在不固定供应商的情况下才能真正实现这些功能,此时面向 SOA 实现的技术可以无缝集成(考虑:“开放标准”),以构造全面的端到端解决方案。

不可轻易决定实现 SOA。这与改变生活方式有些类似,因为开发和操作团队遵循的 IT 控制模式将完全不同。
——Holt Adams

当考虑了策略业务目标和活动时,理论上的 SOA 概念非常具有吸引力,更加容易得到支持。不过,不可轻易决定要实现 SOA。这与改变生活方式有些类似,因为开发和操作团队遵循的 IT 控制模式将完全不同。我提倡进行业务驱动开发。此过程涉及到将业务需求细化为 IT 要求,然后将 IT 要求细化为 IT 功能,以确定满足这些需求所需的技术。根据我过去四年开发基于 Web 服务的解决方案和更为成熟的基于 SOA 的解决方案的经验,以下这些相关因素通常会让我建议采用面向服务的体系结构:

  • 集成成本持续增长,而并未因为可提供真正投资回报 (ROI) 的新业务机会而得到缓解。
  • 兼并和收购是您公司扩大市场份额和获得新发展机会的业务模式的核心。
  • 解决方案要求对来自异构系统和编程模型的业务功能进行集成。
  • 业务的生存依赖于根据市场变化快速调整或即时响应竞争威胁的能力。
  • 全球经济的影响要求您的公司事半功倍地开展业务,而且有必要依赖业务合作伙伴提供非核心业务功能。
  • 就提高收益而言,与业务合作伙伴协作的效率对您的公司十分关键。
  • 您公司业务资产的价值在减少,因为不能对其进行评估,以在最初用途之外的其他地方使用。
  • 您公司员工的效率出现了问题,因为他们的大部分时间并没有花在提供公司业务模型的核心功能和服务上。
  • 您公司的业务充满了机会型的业务工作。
  • 您公司从头开始开发新应用程序。(我认为 SOA 应当作为定位将来的新应用程序的缺省体系结构样式,业务条件有其他限制时除外。)

在理想情况下,您和您的业务合作伙伴间没有预算限制、计划期限、技能差距和优先级差异,我想,此时完全可以说每个人都会采用 SOA,或者至少会考虑采用 SOA。不过,我们的选择实际上经常受到过去的决策的影响和限制(例如,技术投资、编程模型采用、服务的合同协定等)。因此,我们并不能总是自由地采用看起来能满足某个业务需求或技术要求的最佳选项。以下的注意事项会让我不建议采用面向服务的体系结构或说明现在实现 SOA 的边际收益:

  • 您公司只将小部分 IT 预算用于集成活动。
  • 您公司的大部分流程都是手动的或以文档为中心的,自动化的机会几乎为零。
  • 您公司的大部分应用程序开发都使用相同的编程模型。
  • 您公司的操作由一个或两个客户关系管理 (CRM) 和企业资源规划 (ERP) 应用程序管理,几乎没有集成要求。
  • 您公司的现有技能库与实现支持 SOA 的基础结构所需的技能库之间存在重大差异。
  • 未发现可从 SOA 提供的功能受益的业务需求或机会。
  • 新业务服务的可用性将对现有的收益流带来负面影响。
  • 您公司依赖的业务合作伙伴对公司间流程的自动化采用了不同的优先级。
  • 您公司的主要业务的开展涉及到海量且同步性和实时性要求非常高的事务。

前面的列表只是一个示例,用以说明 SOA 是否是您公司最佳选择的原因。当然,每个合同或项目都具有唯一的要求,因此关于何时采用 SOA 的决策取决于您公司的业务状况。SOA 的价值主张十分诱人,但选择何时让您的公司采用 SOA 必须考虑业务环境的实际情况。采用 SOA 不一定要跨一大步,而通常是采用循序渐进的方式进行的。首先找到可以利用 SOA 概念和原则的项目,然后使用主要性能指标测定其价值,这是一种让大家受益的好方法。







将业务与 IT 结合起来

Ali Arsanjani SOA 不仅是一个开发范例。该体系结构用于在业务和 IT 之间构建中间地段,其中包含双方都同意的一组与业务一致的 IT 服务,这些服务结合在一起,以实现组织的业务流程和目标。此范例提供了前所未有的灵活性:它允许将业务流程的结构化组成从为流中每个活动提供功能的服务中分离出来。它还允许将业务实现与其描述分离开来。进行了此分离后,公司能以增量的方式更改其后端遗留系统,并添加新功能来支持新需求,而不用受到供应商选择的限制。因此,可以在最小化对业务流程和 IT 系统的影响的前提下对软件包和自定义应用程序进行替换。

将访问功能从其实现分离的下一步工作就是 SOA。而且,除了此功能方面外,我们还可以将非功能方面外部化。例如,我们可以根据建立的业务策略确定哪些人应该可以访问特定的功能。我们还可以定义如何管理希望以灵活的、可重构的方式访问的技术资源。

使用 SOA 技术时,实时或被动系统通常不是进行实现的最佳选择,因为当前的技术不支持将 SOA 用于有大量并发使用情况的实时系统。不过,这些系统的建模也可以从 SOA 提供的分离和独立概念获益。
——Ali Arsanjani

软件工程发展的下一步就是此体系结构。它使我们从结构化对象转向分布式对象和组件,然后以一组公共服务为中心来将业务和 IT 加以结合(这些服务结合在一起,可以实现组织的流程和目标)。SOA 还允许将公司的部分业务流程向生态系统中的合作伙伴公开。

当需要支持业务灵活性的 IT 灵活性时,就可以使用 SOA。因此,对于两个程序需要进行通信并访问组合业务流程的行业应用程序而言,就非常适合选择 SOA。

使用 SOA 技术时,实时或被动系统通常不是进行实现的最佳选择,因为当前的技术不支持将 SOA 用于有大量并发使用情况的实时系统。不过,这些系统的建模也可以从 SOA 提供的分离和独立概念获益。

SOA 非常适合用于消除冗余及将业务与未紧密耦合到特定服务实现的 IT 功能相结合。它可以允许服务使用者选择后备服务提供者(不仅基于功能进行选择——我需要类似的功能,但不要此版本的服务中的额外依赖项,还可以基于设计及运行时策略和 Web 服务管理功能进行选择)。

企业体系结构基于 SOA 的公司具有稳定的基础,能从现有系统概念地抽象业务功能。它们还具有允许随着新软件包、系统和资产的提供和新需求的出现以增量的方式进行业务驱动的 IT 转换的基础。







一个重要但略显不足的机制

Grady Booch 在企业范围中,大量的创新都出现在以下两个方面:企业边缘和企业之间。在边缘上,我们可以看到在中间件之上的框架投入了很多精力(独立于领域的框架,如 Ajax,以及特定于领域的框架,以特定行业为中心进行结合),也投入了很多精力进行与设备相关的工作 [ 典型的移动设备和具有无线频率识别(Radio Frequency Identification,RFID)标记的设备 ]。而在企业之间,我们可以看到系统(遗留系统和新系统)的系统的形成。

在边缘,服务提供超越基础技术的行为。而在企业之间,服务提供了各种系统间语义丰富的强大通信方式。
——Grady Booch

在此类以 Web 为中心的系统中,服务已被证实为这两个方面的重要机制。在边缘,服务提供超越基础技术的行为。而在企业之间,服务提供了各种系统间语义丰富的强大通信方式。

虽然这样说,但在系统的构造中,服务是一个重要却略显不足的机制。这样说有些过于简单化,但总的说来,服务对于高频率或非常小粒度的连接而言,并不非常适合。而且,服务当然不是唯一适合各个系统的体系结构的分解机制。







SOA、Web 服务与优势保持

Sanjay Bose SOA 是一个使用得有些过量的首字母缩写,被从高级管理人员到开人员等各方面的人用(滥用)来传达多种(有时候是不一致的)语义。在我看来,面向服务的体系结构是一个框架,用于将业务流程和支持技术基础结构作为标准化且管理良好的组件——服务——进行集成,可以对服务进行组合、重用和调整以满足不断变化的业务优先级。

SOA 新手认为 SOA 和 Web 服务是等效的。可能存在不使用任何 Web 服务,而使用现有 IT 资产(从大型机事务到基于对象的系统)的基于 SOA 的有效解决方案。而且,我曾经看到过几个从部门级别发展出来的不是有效 SOA 应用程序的 Web 服务实现。这些 Web 服务岛通常并不完全遵循所有的核心 SOA 原则和特征——它们可能不是松散耦合、未抽象、不可重用、未组件化或不是独立于平台和协议的,最重要的是,它们可能不提供真正的业务价值。

由于 Web 服务提供了一个 Level 字段,供基础结构和应用程序供应商进行创新和互操作,很多规范、概要、术语都使得这一混淆扩大化了。Web 服务仅是一个标准和技术的集合(还有很多其他技术支持选项),用以实现基于 SOA 的解决方案。

在快速发展的全球经济环境中,企业要保持竞争优势,必须保持足够的灵活性。通过使用 SOA 原则将 IT 基础结构与核心企业流程结合,可以提供和保持这个优势。因此,理解和采用 SOA 所面临的问题不是如何或为什么,而是什么时候?基于 SOA 的企业解决方案已被证实能简化业务操作、提高效率、降低成本及消除冗余。

我们正处在对解决方案生命周期的每个方面进行改革的浪尖上,而 SOA 则是关键的催化剂。不过,从长远来看,如果我们不谨慎的话,这个抽象和易用性可能会使 IT 架构师或开发人员和计算机科学与技术的根本基础脱离联系。
——Sanjay Bose

不过,为了获得这些好处,必须正确地应用 SOA。必须具有相应企业范围内的远景和转换路线图,必须有业务执行人员的财务支持和承诺,并由有经验的架构师以增量迭代的方式进行部署。这些增量步骤应该首先针对关键业务问题进行,最终的解决方案应该能提供业务价值。这样可以帮助保持和促进使用 SOA 进行端到端企业转换。在采用 SOA 的过程中,SOA 将不断遇到各种重大的挑战,其中包括政治和文化的多样性。

从纯技术角度而言,SOA 平台(包括工具和运行时)也在经历着巨大的转变。开发工具环境包含大量的建模工具、行业根深蒂固的场景、重用模式、方案和丰富的可视表示和控件以及模拟技术。运行时也同样在不断发展,从而提供增强的服务质量、声明性的和基于策略的管理和吸引人的管理和监视 Dashboard(针对 IT 事件和业务事件),并使用具有自我修复功能的自动工具进行检测。我们正处在对解决方案生命周期的每个方面进行改革的浪尖上,而 SOA 则是关键的催化剂。不过,从长远来看,如果我们不谨慎的话,这个抽象和易用性可能会使 IT 架构师或开发人员和计算机科学与技术的根本基础脱离联系。

[ 编者注:有关此主题的更多观点,可以参考 Sanjay Bose 最近与人合著的新书 SOA Compass:Business Value, Planning, and Enterprise Roadmap(此书是 IBM Press 和 Prentice-Hall 联合出版的 developerWorks 系列丛书之一)。







模型驱动的开发和虚拟企业

Don Ferguson 您可能已经选择使用 SOA 了。大部分中型和大型企业都在其应用程序设计中应用了 SOA 元素。结构良好的 CICS® 和 IMS™ 程序通常符合 SOA 的要求。很多公司已构建了由消息驱动的应用程序组成的分布式系统。会话 Enterprise JavaBean 就是“类 SOA 的”。很多 ISV 系统都采用类似于服务的构造;例如 SAP IDocs。SOA 将结构良好的分布式系统的指南系统化,是结构化编程、模型对象 (OO) 的概念的子集和消息驱动的处理的自然发展。

在很短的时间内,我们行业的运行时互操作性和开发工具间的互操作性就达到了前所未有的水平。这个互操作性降低了迁移到 SOA 的成本,从而更容易获得其带来的好处。
——Don Ferguson

Web 服务是一组用于构建 SOA 解决方案的标准。基础结构供应商 (IBM、BEA、Microsoft) 和应用程序供应商 (SAP、Oracle) 正像采用任何软件技术一样迅速地采用 Web 服务。在很短的时间内,我们行业的运行时互操作性 [简单对象访问协议(Simple Object Access Protocol,SOAP)、HTTP、WS-Security、WS-ReliableMessaging] 和开发工具间的互操作性 [Web 服务描述语言(Services Description Language,WSDL)、WS-Policy、Business Process Execution Language for Web Services (BPEL4WS) ] 就达到了前所未有的水平。这个互操作性降低了迁移到 SOA 的成本,从而更容易获得其带来的好处。

都有什么好处呢?此处将不详细讨论全部或任何单个好处。我将简要地提一下两个好处:

  • SOA 支持模型驱动的开发和从业务透视图进行解决方案监视。我们通过使用 WebSphere® Business Modeler 产生一个允许分析人员和业务专业人员进行推断和设计他们的业务流程的工具,从而有了很大进步。SOA 操作是流程中的任务或步骤的自然呈现,而组合服务的实现(BPEL4WS,业务状态机)则是流程的自然表示。根据简单业务规则(使用 WebSphere Process Server 启用),WS-Policy 和服务实现这两种方法都是业务策略的自然表示。
  • Web 服务支持“虚拟企业”。MQ 和 Common Object Request Broker Architecture (CORBA) 等以前的技术主要针对企业内计算进行了优化。Web 服务协议和 WSDL 在 Internet 和内部网络中均可工作。这样就能使用以前用于企业内部应用程集成的相同模型来在 Internet 上实现简单的、快速开发的机会型 B2B 了。







控制问题

David K. Jackson SOA 与已在 IT 行业存在了 30 年甚至更长时间的其他软件模块化流程相似。SOA 所不同的硬件和网络已足够成熟,可以支持这项基于标准的技术。从任何方面而言,SOA 都不是过去行业内的风行的热潮技术,但包含了广泛的行业标准和支持。

SOA 为企业提供了一个机会,以标识其核心能力和决定是否将这些核心能力作为服务向其行业和业务合作伙伴提供。另一方面的事实是;企业可以对作为其核心基础结构(不是核心能力)一部分的流程和应用程序进行标识,然后确定进行购买。请注意,其中一些服务(提供的或购买的)可能仅为业务流程。企业架构师可以牵头开展相应的工作,以发现企业中具有公共功能集的业务流程和 IT 流程。可以将执行功能打包为外部依赖性很小的组件,并作为服务提供。这就使得业务流程创建者或应用程序开发人员的工作得到简化,以将精力放在能满足股东的业务动力的唯一功能上。

让 SOA 正常工作在很大程度上不是技术问题。让 SOA 正常工作是一个业务控制和 IT 控制问题。
——David K. Jackson

让 SOA 正常工作在很大程度上不是技术问题。让 SOA 正常工作是一个业务控制和 IT 控制问题。技术专家可以根据很多存在的成功模式构造一个 SOA 实现。然后让企业使用这些服务,而不再自己进行创建,这是另一个问题。恰当的体系结构控制将对其服务可供新应用程序使用的项目进行标识。要使得 SOA 投资最终能物有所值,唯一的办法就是让高级管理人员承诺控制预算,或采取某种方式保证业务线能不受干扰。IT 架构师还需要向执行股东报告业务从其 SOA 投资和投入方面获得的价值。

为了让 SOA 与业务合作伙伴协作,需要涉及企业已经建立的关系。现在,很少(如果有)客户在其建立的合同关系之外为合作伙伴提供或购买服务。服务级别协议和争议解决的相关事项要求配备封闭的协作系统。有关信任和安全的结构化信息系统发展组织(Organization for the Advancement of Structured Information Systems,OASIS)标准在过去两年中取得了长足的发展,但在等式的法律和业务一边,仍然更倾向于和企业已经了解的伙伴开展此类业务。







这里没有神话

Christina Lau 关于为什么应该考虑 SOA 有三个简单的理由:

1. 这是目前最热门的领域之一;不要落后于时代的步伐。

2. 工具、基础结构和标准经过组合,可为整个 SOA 生命周期提供全面支持。了解我们的端到端编程模型。按照其中提供的详细步骤开展工作,亲身体验成功。

3. 如果您和我们一样不断地追求事半功倍,那么 SOA 可以为您提供帮助。寻找您可以再次利用的东西;不要所有东西都自己从头做起。寻找现有服务,对其进行调整,并加以使用。然后对其中一些服务进行共享。帮助创建一个生态系统,以便在将来能更快地装配更多有意义的解决方案。

可以通过常识来看这个问题。如果您的项目处于十分关键的位置,而您的团队必须投入大量精力学习工具和 API,SOA 就有可能是错误的选择。如果可以在小项目中试用 SOA,则是不错的选择。
——Christina Lau

开始采用 SOA 与采用任何其他技术或体系结构没有什么区别。可以通过常识来看这个问题。如果您的项目处于十分关键的位置,而您的团队必须投入大量精力学习工具和 API,它就有可能是错误的选择。如果可以在小项目中试用 SOA,则是不错的选择;利用这个经验,可以帮助您定义和扩展到下一个更大的项目。循序渐进,这里没有神话。





回页首


只是业务而已

Calvin Lawrence SOA 的支持者不断不畏余力地宣传 SOA 的主要技术优势:松散绑定,能够通过组件封装可重用业务功能,最后(但没有像通常那样刻意强调)还能提供更好的集成。

包括我自己也是 SOA 的支持者之一,但我不断在问自己一个问题:客户真的对这种技术推论感兴趣吗?

在过去两年,我一直在与希望获得 SOA 产生的价值主张的客户全面合作。在与客户沟通时,我经常发现客户认为,有很多其他体系结构能提供比我所提到的更多的技术价值。有些客户可能一厢情愿地得出结论,认为非常有经验的架构师和开发团队可以通过使用传统企业应用程序集成 (EAI) 体系结构获得很大价值。很多客户会争辩说,这些方法经过验证,实现风险并没有直接采用 SOA 进行设计的风险大。

虽然我们不知道其解决方案到底是什么样的,但应当客观地看待每一个问题。请同时根据技术指标和业务指标来确定是否采用 SOA。
——Calvin Lawrence

这个观点可能会让架构师认识到在有些情况下,SOA 是错误的选择,或者,至少不是最好的选择。SOA 的技术可行性是否是选择其作为解决一系列业务问题的体系结构方法的原因?我会说不是:很多业务及 IT 相关的问题(例如缺乏有力的企业控制模型和策略)将减慢或阻碍任何构思良好的技术 SOA 活动的实现。

在最近一次为期三天的 SOA 研讨会上,一位汽车行业的首席技术官 (CTO) 告诉我下面的话:“我对 SOA 看法是‘只是业务而已’。”他告诉我他采用 SOA 的原因在于:

  • 提高他和他的团队实现新产品和流程或更改现有项目的速度
  • 降低实现和拥有成本
  • 通过外包业务元素或从固定定价改为可变定价(根据业务量),从而支持灵活的定价模型
  • 简化合并和收购所需的集成工作
  • 实现更好的 IT 使用率和投资回报

这位 CTO 和他的团队仅关心如何使用其现有的技能(而不必放弃其现有的基础结构)在预算内按时达成这些目标。他们已经在其现有 EAI 基础结构中进行了大量投资。

这位特别的 CTO 的话与很多其他人的说法都不一样。他们只关心关键之处:我如何为股东提供回报?

当然,作为一个有经验的架构师(微笑),我知道一些解决此问题的体系结构备选方案:

  1. 扩展其现有的 EAI 基础结构
  2. 计划采用更多的事件驱动体系结构(完全分离的、发布/订阅,等等)
  3. 或许可采用 SOA

由于这是一个 SOA 研讨会,而客户为此付费,因此我最初准备选择第三个选项。实际上,对于这个情况,我使用了一点 EAI,一点事件驱动和很多 SOA 方面的东西。SOA 允许在必要时包含 EAI 和事件驱动方法。

对于高速发展的汽车行业,为了保持竞争优势和按时在预算内提供产品,企业必须具有灵活性。这个客户的难点集中在对其业务流程进行管理和合并。正如我的同事在此讨论中指出的,将 IT 基础结构与核心业务流程结合,对于达成目标十分关键。SOA 相关的原则已被证明可以简化业务操作,能减少与实际代码关系很小而集中在人机交互和人员活动上的冗余项。在资金有限的业务环境中,几乎没有客户能为解决特定的业务问题无限制地投入资金,而有时间并愿意对其控制流程进行修整的客户则更少了。这样做听起来不错,但却不会实际这样做。

关键在于对现有基础结构、流程和现有控制模型加以利用和扩展。通过恰当地使用现有 SOA 原则,可以对整个设计和实现流程进行管理,如:

  1. 标识问题。
  2. 标识组成业务并是难点所在的流程。
  3. 对这些流程进行建模,以对其进行简化。
  4. 标识现有服务,并编写表示这些流程的其他服务。
  5. 将这些服务部署到可提供运行时功能且操作效率高的环境中。
  6. 监视这些服务和流程,以获得更高的效率。

那么,网络呢?虽然我们不知道其解决方案到底是什么样的,但应当客观地看待每一个问题。请同时根据技术指标和业务指标来确定是否采用 SOA。如果合适,就使用它。如果不合适,就不用它。SOA 概念和原则将始终可以通过某种方式应用到您的体系结构中。







康庄大道

Andras Szakal 我们现在都应该知道了整个行业对 SOA 的 ROI 和采用的赞颂之词——松散耦合、重用更好、推向市场的时间更短、易于集成以及互操作性更好。不过,务必了解,我们目前对 SOA 的关注只是实现即插即用企业(或者说是按需企业)的历程中重要的一步而已。

随着我们进入下一个十年,我们将开始着手大幅度减少将来自不同 IT 供应商的产品或组件组合成可行的有价值的端到端解决方案所需的工作量。供应商提供的业务组件将不依赖于基础结构,可以在各种平台上执行。因此,软件开发人员会将更多的精力放在有效集成供应商组件和确保有效的互操作性上。

IT 业务操作部门所属的人员将是业务和企业体系结构专业人士。无论您是如何定义业务或企业架构师的:为了实现这个远景,整个行业将需要更多的具有 IT 和企业体系结构背景的人士。
——Andras Szakal

客户的 IT 操作部门将主要负责选择最适合业务需求的运行时平台;即提供恰当部署和管理业务组件所需的必要服务质量和运行时支持的平台。

相反,IT 业务操作部门将主要关注如何通过定义业务组件(将由其对应的操作人员部署和管理)中包含业务规则实现组织的业务策略。这将通过 WebSphere Business Process Server 之类的业务流程管理系统完成。

IT 业务操作部门所属的人员将是业务和企业体系结构专业人士。无论您是如何定义业务或企业架构师的:为了实现这个远景,整个行业将需要更多的具有 IT 和企业体系结构背景的人士。

虽然这个远景可能十分诱人,仍然存在很大的风险,在进入组件天堂之前,我们必须小心地减小这些风险。在开始进行实现模型服务的体系结构的任务时,最重要的减小风险方法可能就是要求有强有力的管理良好的控制流程和策略。只有通过强有力的企业服务控制策略才能够避免更改管理问题、服务间的语义不匹配和系统功能结合方面出现的难于调试的问题。IT 部门可以通过制定的控制策略来减少风险,这些控制策略由执行监督团队(其中包括 CIO、CTO 和业务线执行官)提出并加以支持。







改善信息

Dan Wolfson 当然,您已经对 SOA 有所了解了。您也知道 Web 服务、业务流程的重要性、模型驱动的体系结构和所有这些让人诚惶诚恐的 WS-* 标准。

但或许您是一名信息人员。您需要负责组织的信息的完整性和对其进行分析。您关心表示业务状态的数据库的性能和稳定性。正如您所知的,真正重要的部分。因此,您可能会问:“为什么我应该关心 SOA?”

SOA 表示的不仅是服务提供者和使用者的协定,而且也是信息提供者和使用者间的协定
——Dan Wolfson

作为信息人员,我很关心 SOA。我之所以关心 SOA,是因为 SOA 具有直接和间接影响信息管理系统的能力——事实上可以影响信息本身。为了获得成功,我们需要在业务服务所涉及的信息的上下文中对其进行考虑。我们需要知道检索到的信息是准确的。被更新的信息经过了验证。交换的信息的意义对于服务提供者和使用者都是一样的。如果忽略了这些事情,服务的价值和可重用性就会减少。

直接来说,使用 SOA 时,我们需要在提供者和使用者之间形成一个信息协定,以便让各方知晓信息意义的内涵,并且仍然支持异构系统——换句话说,我们必须假定世界是杂乱无章的,必须对其进行整理,以提高信息的价值,了解不同的结构和意义之间的关系,并在可能的情况下就公共对象达成一致。

将信息作为服务公开还将让我们配备额外的信息服务器拓扑来容纳增加的信息负载。它还会要求我们建立可以对信息访问进行虚拟的点(这样用户就无需知道信息的真正位置以及其组织方式)。它还引入了一些方法,允许我们有效地对这些信息进行组合——通过集合或联合。如果没有建立更多的公共机制或引入经过改进的清除机制,则我们稍后很可能被迫投入巨额的额外资金和资源进行清除,从而导致将来的灵活性下降。

可以采用很多办法实现信息协定。其中一个变得越来越重要的就是主数据管理 (MDM) 领域。MDM 系统可为业务应用程序或服务提供经过清除、整合且特定于域的信息。最常见的 MDM 系统是作为客户和产品信息的信息集线器使用的系统。每个集线器都作为中心点使用,可以在此对信息进行添加、更新、审核、清除、搜索和查询。集线器放置于可以将更改传播到相关数据库或可以生产相关服务的事件的位置。MDM 系统可以是事务型的(在操作业务流程的主线中更新),也可以是引用型的(提供业务流程所引用的信息的一致来源)。但最重要的是,我们可以将 MDM 系统看作其本身提供了一个一致的服务集,以供在各种业务流程内使用和进行重用。

通过 MDM 等方法显式地实现信息提供者和使用者之间的协定,可以帮助我们实现 SOA 所承诺的灵活业务流程和服务可重用性,并同时为我们提供提高所管理信息的质量的机会。







适合与不适合的场合,以及需要注意的地方

Bobby Woolf SOA 是一种组织化的方法,用于应用到由面向服务和分布式对象计算组合而成的应用程序体系结构中。让我们来将这个定义分为几部分进行分析。应用程序体系结构 是应用程序各部分的宽泛组织,通常作为层实现。体系结构指定包含哪些部分以及它们如何一起工作。面向服务将功能封装为服务——宽泛的可重用任务,可以在没有任何前一上下文(除承载服务的系统的当前域状态外)的情况下运行。服务的上下文是作为从调用方传递的参数提供的,和函数调用的参数非常相似。分布式对象 以特定方式运行在独立进程中,通过这种方式,一个进程中的对象可以调用另一个进程中的对象上的方法。

服务支持对访问通过宽泛任务的经过良好定义的 API 公开的已良好封装的功能,从而可以通过低频率的调用实现功能的高重用性。SOA 或许是所有方法中最好的一个。
——Bobby Woolf

SOA 向分布式对象添加面向服务,从而可以在进程之间调用服务。它是一种用于设计应用程序体系结构的方法,以便应用程序的各个部分可以在不同的进程中运行,而且还允许不同的应用程序共享和重用正在运行的部分。它是分布式对象计算的演变,用以在多个对立方之间获得更好的平衡:需要访问彼此功能的应用程序;需要封装自己功能的应用程序;需要限制在其应用程序编程接口 (API) 中描述的对外公开的功能的应用程序;需要限制分布式调用的交互应用程序。服务支持访问通过各种任务定义良好的 API 公开的封装良好的功能,从而可以通过低频率的调用实现功能的高重用性。SOA 或许是所有方法中最好的一个。

以下给出了一些简单的技巧,用以确定何时采用 SOA 和何时不应采用 SOA 以及需要提高警惕的情况。

首先,适合采用 SOA 的情况:

  • 当数据分布程度非常高时,使用 SOA。将操作数据的代码放置在与数据较近的位置,然后将其包装为服务,以供在任何地方进行访问。
  • 希望功能具有高可用性时,使用 SOA。将功能作为服务部署在多个冗余的提供程序中,以在其中一些不可使用时,可以使用其他的对等服务。
  • 当应用程序的各个部分需要独立开发、维护和更新时,使用 SOA。只要保持各个部分之间的接口,每个团队(如两个不同的 B2B 公司)就可以使用其喜爱的技术按照自己的计划实现各自的部分。
  • 当多个应用程序需要重用功能和数据时,使用 SOA。共享的代码仅重用功能;服务则允许各个独立应用程序重用一组共享的企业数据,而无需将数据分发给所有应用程序。

以下是不适合使用 SOA 的情况:

  • 当希望开发尽可能简单时,不要使用 SOA。使用一种语言实现,在单个线程中运行,且没有远程访问问题的应用程序复杂性较低一些,因此构建和调试更为方便。
  • 当希望操作环境尽可能简单时,不要使用 SOA。要对松散耦合、事件驱动的分布式应用程序进行故障排除要困难得多,要求对应用程序实现细节和操作环境配置细节及其当前状态有全面的了解。
  • 当网络不可靠或网速慢时,不要使用 SOA。服务组件运行于独立的计算机上,通过网络进行通信,因此,其速度和可靠性依赖于这些计算机及连接这些计算机的网络。
    (注:分布式冗余服务可以帮助减少硬件不可靠和网络延迟的影响。)
  • 进行原型设计时,不要使用 SOA。原型开发应该简单,而 SOA 并不简单。

对于何时需要提高警惕的问题,坦白地说,随时都要提高警惕才行。以下是一些需要谨慎行事的具体情况:

  • 当服务接口不确定时,使用 SOA 需小心。服务接口允许使用者和提供者独立地进行更改,但接口本身必须稳定。SOA 中的接口变化比在单个应用程序(特别是非分布式应用程序)中复杂得多,因为有很多在其他情况下不相关的开发团队必须就接口的更改进行合作。
  • 当安全性极为重要时,使用 SOA 需小心。每个服务都是一个新的易受攻击的点,必须保证其安全性。可以轻易访问服务的人越多(如在公共 Internet 上的服务),可以尝试攻击该服务的人就越多。
  • 当性能极为重要时,使用 SOA 需小心。进程之间的每个服务调用都比进程内的方法慢得多。
  • 希望功能具有高可用性时,使用 SOA 需小心。正如所指出的,冗余服务可以提高可靠性;但同时,活动部分越多出现故障的可能性就大。SOA 应用程序只与其服务一样可靠。

这些列表根本不足以包含所有方面,但我希望这能让您更好地了解什么是 SOA 以及适合使用 SOA 的情况。如果您需要这方面的专业帮助,请访问 IBM Software Services for WebSphere,在其中可以找到各种参考资料。

祝您好运!

posted @ 2006-04-17 04:22 wsdfsdf 阅读(216) | 评论 (0)编辑 收藏

面向服务的体系结构(SOA):对 IBM Workplace 和 Lotus 开发人员的采访

面向服务的体系结构(Service Oriented Architecture),更多的时候被称作 SOA,最近有很多关于它的报道。但是它到底是什么,又能够为您做些什么呢?在该采访中,IBM development 的三名成员将就 SOA 以及 IBM 和 Lotus 产品如何与 SOA 概念相结合进行探讨。

面向服务的体系结构(SOA) 为对业务应用程序进行智能且有效的设计、开发、部署和管理提供了一个广阔的基础设施。为了帮助更好地理解 SOA 是如何影响 Lotus 和 IBM Workplace 产品和技术的,我们访问了 Lotus 和 IBM Workplace 开发团队的几名成员,并探讨了 SOA 为您现实的工作带来了什么。

请简单谈一下你们在 IBM 的职责。
Fernando Salazar:我是 IBM Workplace 团队的高级技术人员。负责 Workplace Server 组件的整体体系结构和内容。

Robert Duffner:我是 WebSphere Portal 和 Workplace 产品的产品经理。还负责在 Workplace、Portal 和 Collaboration (WPLC) 产品部门中围绕 SOA 策略提供帮助信息。

Doug Wilson:我是 WPLC 部门的主要技术负责人,还是体系结构指导委员会和顾问组的成员。我的工作是确保跨 WPLC 产品的产品空间体系结构的一致性,并保证它们适合于整体 Software Group 体系结构策略。

概括地说,什么是 SOA?
Robert:SOA(面向服务的体系结构)并非新的思想。SOA 一直主要是关于如何正确地进行构建,如何创建一种体系结构蓝图,该体系结构蓝图允许进行可重用的构建,允许以更加松散耦合的方式工作,例如您构建了这样一个体系结构并要进行修改,那么无需打破原有设计。还有,如何在流模式下集成异构的 IT 系统。SOA 是真正支持使用可重用的组件或服务装配业务流程的体系结构,这些组件或服务独立于应用程序和它们运行的平台。

这里的关键点是服务为真正可重用的构建块。这些概念确实不是新的了。我认为现在很多供应商创建的产品开始支持 SOA 标准,比如 Web 服务这样的产品,使 SOA 在很多 CIO 的心中占据了优先和中心地位。大型跨平台供应商,如 IBM、Microsoft、Oracle 以及 SAP 都开始以能吸引客户的方式支持这些标准 —— 因为支持更多的标准能帮助客户降低风险,很多标准都是这样产生的。在这种形势下构建 SOA 的能力开始变得很有前景,这可能是今天的 SOA 最激动人心的地方。在这一过程中标准起到了很重要的作用。

Doug:我还要强调 SOA 包括面向服务的体系结构、对业务结构以及支持业务的 IT 系统进行推理的方法。事实上,SOA 是从顶层开始的,通过分析业务是如何运行的,以及如何把支持业务的业务流程分割为基本步骤 —— 人为执行的或者是通过多个自动片断执行的任务。SOA 的强大之处在于它给出了一种一致的方法,用于推理业务的结构,以及推理支持该业务的 IT 基础设施和组织。

Fernando:帮助推动 SOA 的新事物是企业服务总线(Enterprise Service Bus,ESB)这个概念。我们能够通过标准定义所有的服务,这样非常棒。但是,ESB 允许我们安排这些服务,并以满足应用程序需要的方式同步或异步地调用它们。接口和松散耦合是两个由来已久的软件工程概念,但是我认为企业服务总线是使这个概念成为可能的关键因素。企业服务总线是促使 SOA 产生的因素之一。

你们提到 SOA 不是一个新事物,但是看起来直到最近人们才开始关注它。关注背后的主要原因是什么呢?
Doug:我认为在该行业中有两个关键的变化,为考虑如何构造 SOA 重新注入了力量。Web 服务的描述功能与使用无处不在的互联网的 IT 系统相组合,可能是过去两年中许多 SOA 的思想重新热起来的驱动因素。什么都比不上公众的说服力,以及无处不在的技术解决方案,推动着前进的步伐。在过去,一些系统间互连的其他方式要通过专有的或是难于使用的协议,像 CORBA 和 IIOP,结果就我们需要取得一个单一的、通用的中间件基础设施 —— 具体内容要与规则保持高度的一致。Web 服务规范使人们只需很少的 IT 投资就能够解决这个问题。


Doug Wilson
Doug Wilson

哪类行业和公司是 SOA 的主要受益者?
Doug:这是一个很难回答的问题。推动 SOA 实施的一个因素是通过很低的投资,就能够为小型企业提供技术。我认为这在很大程度上能够促使人们接受它,因为您不会被限制在某个范围,就是说不是大型企业或小型企业的问题。问题是 —— 也是机会 —— 任何规模的企业都可以使用 SOA 策略。其中的一个驱动因素是在大多数情况下,小型企业都是较大型企业的服务提供者。例如,如果我想外包运输业务,或者是外包客户满意度跟踪,或者是一个较大业务流程中的几个小型业务,那么我需要一个 IT 结构允许我将行为或服务委托给小型企业。可能在实施的初级阶段,大型企业将是服务的中心,但是许多小型企业将作为较大型企业的服务提供者形式出现。

Robert:这一点十分好。显然,能够从 SOA 得到最大受益的组织,很可能是那些具有处于较高稳定状态的 IT 基础设施的组织。其中所有遗留下来的程序都不能进行及时修改,它们无法支持业务需求的变化。通常,您能够看到许多这样的组织可能支付这样的开销。一些即将成为行业先锋的公司正是那些具有投资和 IT 的公司,并且在这些公司中 IT 的使用比在其他公司中占有更大的比重。但是 SOA,在这一方面,能够从根本上转变 IT 基础设施,使其从业务的阻碍转变为业务变化的推动力。所以,如果您看一下像金融服务和银行之类的组织,它们通常都具有非常尖端的组织。

我还注意到,如果您稍微关注一下,就能够发现一些组织还建立了体系结构控制部门,或者是跨学科和跨区域的群组,他们实际上是整体地研究整个组织的 IT 基础设施和体系结构。这预示着在未来 SOA 将取得成功。

除了 IT 方面外,SOA 会以哪些其他方式影响公司经营业务的方式?
Doug:我认为事实上恰恰相反。业务方式的自我演化正迫使 IT 部门作出响应,SOA 就是由此而产生的强大支持模型。业务在不断地合并、放弃和重构,以及自我重组,并对 IT 部门跟上其发展提出了实质性的挑战。如果 IT 和企业能够为业务结构的推理形成统一的模型,并因此得到相应的 IT 结构,那么这将成为 IT 部门满足它们业务需要的强有力的推动力。

Robert:看一下很多关于 IBM 帮助开始随需应变业务的讨论,当我们考虑一个随需应变的业务时,我们认为企业需要跨他们的组织以及他们所需的全部合作伙伴、供应商和客户,对业务过程进行集成。但是更重要的是,他们能够做出非常灵活的响应,并且能够随客户的需求、市场机会或其他可能出现的任何类型的机会和威胁做出响应。从这一观点出发,只是一味地花费、花费、花费和不进行调整的日子结束了。IT 和业务线正在以过去未曾有的方式结合到了一起。你不再为所有这些 IT 系统持续地花费资金,并且还得不到最初进行这些投资时所预期的回报。有了 IT 和业务线的密切合作,将帮助推动使用 SOA,帮助实现随需应变的业务这一目标。

Fernando:我们描述的过程部分不仅采用了技术、标准和基础设施;并且还从工程的角度进行了分析,以确定什么是您所依靠的(我们将其称作 “原始的”)业务功能。原始的业务功能可能是像运输产品、重新进货报表或支付帐单这样的功能。当将它们作为服务进行嵌入时,就能够分离调用这些服务的逻辑,并且可以放到一个不同的位置。这是您真正获得适应性的地方 —— 如果这样做了,现在就可以用新的算法管理库存或运送包裹。逻辑是从原始的服务中分离出来的。当这样做时,就能够开始从适应性中获益。

SOA 将会成为新的 IBM 特性和产品吗?
Doug:当然。最近,我们宣布了整个产品系列,目的非常明确,是要在我们的客户中推动 SOA 实施。关于我们在世界范围内推动 SOA 这一事件,各种论坛上都有具体和详细的报导。

Robert:SOA 确实触及到了我们所有的软件生产线。请您看一下我们是如何定义 SOA 参考体系结构的,其中涉及建模、部署、变更和管理,我们有帮助实施 SOA 整个周期的产品。SOA 最大的优点是,公司不必一次性地完全加以实施;这里有很多的入口点,他们能够从这些入口点开始。这要依据组织正在做什么。一些组织可能非常依赖集成解决方案,例如消息传递。这些客户会问 “如何将系统集成到一起?如何确保可靠性和保证消息的传递?”。通常,当考虑高速消息传递和消息传递框架时,您将想到企业服务总线。我们有一个整套的产品线,主要为 WebSphere 品牌,我们还有已经宣布的带有业务集成的新产品,这些新产品还具有一些其他功能以支持 SOA 的核心。我们的其他产品,如 WebSphere Portal 和 IBM Workplace 产品,能够作为 SOA 的最好的组成部分。


Robert Duffner
Robert Duffner

某些组织可能会选择从一些有机会的项目开始。这可能比较简单,“我需要构建门户中的一部分。我该如何开始组织、构建并将其放在具有面向服务体系结构特征的系统中?换句话说,在可以较高程度的重用的地方该如何做?”。您可以从定义服务开始。一个服务可以简单到只有一个业务流程,或是客户必须进行的一个操作,例如检查某个产品订单的状态。这个服务可以在客户将要登录的门户中自我显示。这个门户和服务将显示为一个 portlet,占用屏幕的一小部分。我将登录到系统中 —— 我能够快速地查看订单状态。这就是客户将会看到的。客户还会问 “我们如何进行构建?我们如何进行软件生命周期管理?我们如何开发和部署这些产品?”。所以我们在支持 SOA 的 Rational 品牌中还有另外一组完整的产品线。这里还有 Tivoli 产品集,使您能够进行安全性管理,并保证这些系统能够正常运行。我们的另外一个产品线用于信息管理;例如 DB2 产品线。它们带来了一整套的产品用于 SOA 策略的所有方面。

最终情况依赖于我们的客户的需要。我们可以把更多的精力放在某些组织的整个能力的广度上,他们试图进行部署、考虑部署或者是想要部署面向服务的体系结构。在他们想从投资中获得回报时,就是他们开始的时机,这要根据业务的需求而定。

我们可以详细阐述一下在 SOA 中 WebSphere Portal 技术所扮演的角色吗?
Robert:按照 Gene Phifer 的说法,他是 Gartner Research 的一个门户权威,WebSphere Portal 是 SOA 出名之前的一种 SOA。回到互联网刚产生的时候,当我们过去使用门户时,我们中的很多人都理解门户和 portlet 的概念,这些门户如今在 Yahoo、AOL 和诸如此类的站点中变得十分流行。但是猜一猜怎么样?企业和大型组织想做同样的事情,但是在这种情况下内容不是必需的,却是有 “如何将所有的系统进行集成并提供单点访问?” 这一问题。因此,创建一个平台供重复使用这一想法实际上已经非常接近面向对象的体系结构。对许多组织而言,门户代表进入 SOA 的逻辑上的过渡,因为它允许组织做我们正在谈论的事情。您可以在一个基础设施上进行标准化,这样如果您开发了一个雇员门户,然后必须进行另外一个项目,那么您能够重用许多资产和基础设施,并开始从 SOA 中获益。对一些组织而言,门户是一个逻辑上、战略上的 SOA 入口点,这并不意味着您必须从这里开始,但是它为您提供了一个平滑的入口点。

Doug:大多数的业务流程在处理过程中需要用户的参与。门户为构造人与面向服务的体系结构之间的用户交互提供了一种较好的方法。将服务的用户界面映射到屏幕上特定的小矩形中,例如 portlet,是一种非常常见的操作。portlet 还对用户能够访问的服务类型进行管理,并安排这些服务呈现在用户前的方式。这些功能,诸如 WebSphere Portal 的处理功能,允许用户安排一组服务和一组用户界面间的用户活动流。我们将门户的这些非常常见的部分作为体系结构中 Web 服务的基本表现工具。想像一下门户作为 SOA 的前端。正是在这里 SOA 触及到了用户。

SOA 会影响其他 IBM 产品吗,例如 Notes/Domino 和 IBM Workplace?
Doug:Domino 作为一项集成技术,通过在 Domino 基础设施中添加定义 Web 服务并执行这些 Web 服务的功能,在支持 SOA 的过程中迈出了重大的一步。这是一个重要的新功能。许多 SOA 工作的初始阶段包括调整现有的系统,使之适应面向服务的体系结构。通常,这意味着在 Web 服务中封装这些系统的一些业务功能,并且在环境中显示 Web 服务。Domino 是这个领域中新的参与者。而 IBM Workplace 一开始就被设计为基于面向服务体系结构的应用程序系列。

Fernando:确实是这样。IBM Workplace 是一组协作功能,会在门户中用到这些功能,但是其本质结构都是面向服务的体系结构。主要协作功能有一些服务接口,例如创建文档、发送电子邮件消息、创建 Web 会议等等。这些接口可以被调用、组合并与想开发的任何其他应用程序中的其他服务集成。例如,使用 Workplace,完全有可能调整组织中新员工的注册以及他们在想参加的课程中的注册,这些课程是由 Workplace Learning 提供的。所有这些都可以通过 Workplace 提供的 Web 服务 API 来实现。我们从一开始就将这作为我们的功能的整体意图,并且我们一直在努力提高这些 API 的功能以与其他流程集成,并提高整个系统的功能以支持这些用户交互。


Fernando Salazar
Fernando Salazar

需要些什么才能够使 IT 部门对 SOA 的理解同对业务线的理解相匹配?
Robert:显然,要对 IT 部门进行创新。同时也要让业务线以不同于以前的方式加入进来。在我所工作过的某些组织中,技术从来不是阻碍成功的因素;而阻碍成功的因素通常与组织问题、部门问题、政治、组织间合作方式、设置管理方式等问题有关。用户不想定义业务线试图去做什么,而是将那些需求收集工作都交给 IT 人员,然后希望在 9 到 12 个月内就能取得巨大成果。

组织正在重新思考他们当前的组织方式。现在可以看到 IT 和业务线的跨学科、跨功能角色的信息都聚集到一起,以更好地理解什么是业务需求,从而更好地理解技术如何帮助他们从一种组织方式转换到另一种组织方式。这就是 IBM 的业务咨询服务的重要作用,他们能帮助公司了解他们如何重新处理或重新思考作为一个组织应该如何运作,以及如何以不同于以前的方式来利用 IT,因此 IT 能成为组织的极具竞争性的优势。

我希望 SOA 在组织中能像它在技术领域中那样流行,但通常并非如此。它实际上是让业务线和 IT 人员以更好地理解什么是需求的方式工作,从而确保项目取得成功,并理解每个需求在取得整个成功过程中都有其作用。而不是用户将项目交给 IT 人员,IT 人员又将其交给业务线这样一种运作方式。

Doug:从入门角度来说,有多种可能的方法。一种是自顶向下的方法,从业务开始,然后是业务分析、为组织建模,最后是对业务流程进行建模。这种方法受 Rational Software Architect 套件的工具支持。更常见的是 “双向逼近” 战略,IT 人员从认识 Web 服务和 SOA 的封装和集成战略开始,并构建一定数量的体系结构,然后加入到业务中以便在可能的情况下利用这些体系结构。正如 Robert 所说的,SOA 实际上是关于将业务和 IT 组织合并到一起,在粒度级和业务行为方面达成一致,从而由服务对其进行建模。

IT 组织如何能够使 SOA 被业务线获得和使用?
Robert:这又回到了我们刚才谈论的话题,就是关于如何使用 WebSphere Portal 技术来实现 SOA,并将 Workplace 作为 Portal 技术的一种超集。通过将服务目录映射到 portlet 目录(即为所提供的服务创建用户界面),并且通过使用 WebSphere Portal 来驱动服务和用户之间的用户交互,这是一个很好的过渡,适合于很多客户已经进行的 IT 工作。因此我们认为 WebSphere Portal 是业务线用户能够访问 SOA 的关键。

Fernando:要详细描述这一点,也可以这么说,IT 领域和业务线领域之间的常见分工是,开发人员在 IT 方构建标准的组件。这些界面可以作为 portlet,这些 portlet 访问企业服务,然后 IT 组织会将 portlet 组织到模板中。模板是服务的可重用组合,不同业务线的终端用户都可以访问这些服务,并根据他们的自身需要对这些服务进行定制(这是一个关键部分)。同时使用 WebSphere Portal 和 Workplace,用户的系统可以变得更灵活,由此可以为销售群组或研发部门定制能访问这些企业服务的标准模板,以包括特定类型的表单,从而收集自己的信息或涵盖您所感兴趣的项的特定文档集,或上面标记了对您的团队来说非常重要的事件和里程碑的特定日历。这是一种本地定制,这些本地格式化的企业工作空间使这些组织内的各个群组可以利用 SOA 的价值。

Robert:的确如此,他说出了我们工作的意义和 WPLC 组织是什么。随着组织开始使他们的基础设施变得合理,并试图提高工作效率,您将看到这些流程驱动的门户、企业工作空间、企业桌面 —— 这些是您所听到的用于描述这些事情的术语 —— 作为公司跨企业优化他们的协作业务流程的首选方法而出现。WebSphere Portal 和 Workplace 能扮演如此重要角色是因为它们是商业人士实际所用的工具。用户无需接触很多集成技术,因为这些都是底层技术。但是他们的确接触到了这些桌面 —— 这些企业工作空间。

你们如何看待 SOA 将塑造软件工业的未来(或是这方面的其他工业)?
Doug:我将更清晰地预测一下未来,我们已经说过 SOA 是业务和 IT 组织很好的交汇场所。我认为这将导致根本上的变化。我们还略微提到了一些 Web 服务,尤其是互联网上的 Web 服务,允许小型业务和大型业务集合到一起,使 IT 基础设施的花费同时适用于它们。并且其通过互联网创建大型的、面向服务的系统的能力,我认为前景非常广阔。随着互联网支持大量其他新出现的业务模型,我认为在服务提供者和服务消费者的领域,将会有一整套新的业务模型。

Robert:我认为服务的重点是继续强调虚拟化和适应的作用,这就像软件产品的交付。如今,我们经常需要深入了解软件系统的参数和选项才能进行安装,然后再来调整这些参数和选项。软件在某种程度上来说本身就是一种服务,用户将其添加到网络基础设施中并让其工作,现在该软件即是可以作为端点来访问的服务。可以对该服务进行管理,将其连接到其他服务,但是不需要深入了解这些服务的内部工作原理。用户更多的是注意它所带来的价值。作为软件开发人员,这对我们来说并不容易,实际上,我认为这是一件很难的事情。但是让我们所有的产品以相同的方式互相通信是我们的预期目标。

有什么需要补充吗?
Doug:我要再强调一下,我们将 WebSphere Portal 和 IBM Workplace 技术作为该行业的关键技术。随着人们在互联网上提供服务的改进和增加、组织内部对服务可用性的改进、业务线帮助他们自身和创建新的最适合其业务需要的服务组合的机会,这些都将越来越多地需要 IT 基础设施。IBM Workplace 是一种旨在允许业务线用户创建和构建他们自己的结构、能力以及应用程序的产品,以可用的协作服务和由 IT 组织或应用程序供应商带入到应用环境中的其他服务为基础。因此我们认为自我服务和用户驱动这两者相结合非常重要。

Robert:我将借用一下别人的展望和预测 —— 如果您看一下 IDC 上系统专家的分析,那么就会看到他们的确相信一个新的用户工作环境将在今后的五年中出现,一种新的、统一的、模块化的企业软件组合将为该环境提供支持,该环境构建在面向服务的体系结构之上。他们称其为企业工作空间,它将极大地改进应用程序和工作人员之间的交互,以及工作人员之间的协作。您将看到前所未有的效率水平。

posted @ 2006-04-17 04:19 wsdfsdf 阅读(196) | 评论 (0)编辑 收藏

IBM WebSphere 开发者技术期刊: 使用服务组件体系结构构建 SOA 解决方案——第 2 部分-----组装 SCA 组件

检验 IBM WebSphere Integration Developer 组装的SCA 组件的上下文中的引用和连线。

摘自 IBM WebSphere 开发者技术期刊

引言

在这一系列文章的第 1 部分,我们引入了服务组件体系结构(Service Component Architecture,SCA)作为编程模型来构建和组装集成解决方案,包括简要介绍什么是 SCA,以及一些相关术语的定义。我们还提供了一个通过 IBM WebSphere Integration Developer 使用 Java™ 构建 SCA 组件的示例,测试了该 SCA 组件,并使用 SCA 客户端编程模型构建了一个调用该 SCA 组件的示例 JSP 文件。在第 2 部分中,我们将继续描述引用和连线,并介绍如何使用它们来组装 SCA 组件。







概述

第 1 部分介绍的示例中,我们使用了一个简单的 JSP 客户端来调用 SCA 组件。该示例只用于演示;当构建您自己的实际自定义应用程序时,您可能会使用标准 J2EE™ 组件模型来实现应用程序逻辑。J2EE Web 应用程序将继续调用 Enterprise JavaBean 来访问特定于应用程序的功能。实际上,SCA 编程模型是用于业务集成、应用程序组合和解决方案组装的,而不是用于 J2EE 应用程序开发的。SCA 客户端(它可以是 J2EE)通常在进程管理器外,例如它可以使用 BPEL 流程来编排工作流。与 BPEL 流程联合部署的 Web 应用程序也可以使用 SCA 编程模型来调用特定于应用程序的功能。图 1 显示了 SCA 生态系统的一个示例。


图 1. SCA 生态系统
图 1. SCA 生态系统

SCA 位于集成层。SCA 组件可以通过导入来调用 SCA 运行时外的应用程序。非 SCA 客户端可以通过导出调用 SCA 组件。在集成层内,可以通过定义引用和使用连线来组合 SCA 组件,这将在本文中重点介绍。有了连线和引用,您就可以在开发时定义运行时调用的特性;例如,使调用同步或异步,标记调用的转换边界,等等。这些特性是在部署时读取的,它们可以启用所需的运行时行为。图 2 阐释了这些高级概念。


图 2. 引用和连线的高级视图
图 2. 引用和连线的高级视图

再次说明,我们关注的是集成层,而不是应用层。另外,我们介绍的是较高级的集成,例如工作流编排或与 EIS 系统的高级集成。然而,出于演示目的,我们使用简单的 Java 示例来显示如何将组件连接到集成层中,强调的是连线和引用的功能而不是组件本身的实现。(在后续文章中,我们将介绍如何将 SCA 组件实现为 BPEL 流程和状态机,以及如何应用连线技术。)因此我们使用一个按比例缩减的模型来阐释引用和连线,如图 3 所示;然而,我们要记住图 2 中合适的 SCA 使用远景。


图 3. 简化的引用和连线模型
图 3. 简化的引用和连线模型






引用

正如第 1 部分所讨论的,SCA 组件被打包成一个 SCA 模块。一个模块中的 SCA 组件通过对调用的 SCA 组件定义引用来彼此交互,并且将这些引用连线到相同模块中的其他 SCA 组件。图 4 阐释了这一概念。


图 4. 引用和连线概念
图 4. 引用和连线概念

对调用组件的引用是用 SCDL 表示的,如下所示:


清单 1
												
																		
<scdl:component xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:java="http://www.ibm.com/xmlns/prod/websphere/scdl/java/6.0.0"
xmlns:ns1="http://CreditApproval/CreditRequest"
xmlns:scdl="http://www.ibm.com/xmlns/prod/websphere/scdl/6.0.0"
xmlns:wsdl="http://www.ibm.com/xmlns/prod/websphere/scdl/wsdl/6.0.0"
displayName="CreditApproval" name="CreditApproval">
  <interfaces>
    <interface xsi:type="wsdl:WSDLPortType" portType="ns1:CreditRequest">
      <method name="calulateCreditScore"/>
    </interface>
  </interfaces>
  <references>
    <reference name="CreditHistoryPartner">
      <interface xsi:type="java:JavaInterface" 
      interface="approval.credit.credit.history.CreditHistory">
        <method name="getCreditLimit"/>
      </interface>
      <wire target="CreditHistory"/>
    </reference>
    <reference name="CreditAgencyPartner">
      <interface xsi:type="java:JavaInterface" 
      interface="approval.credit.credit.agency.CreditAgency">
        <method name="getCreditScore"/>
      </interface>
      <wire target="CreditAgency"/>
    </reference>
  </references>
  <implementation xsi:type="java:JavaImplementation" 
  class="sca.component.java.impl.CreditApprovalImpl"/>
</scdl:component>
												
										

引用的好处之一是能够定义调用期间的服务质量。当在 Assembly Editor 中连线组件时,可以指定服务质量 (QoS) 限定符。这些限定符定义了调用期间在 SCA 运行时管理组件的必要条件。







限定符

使用 SCA,您无需编程或更改服务实现代码就可以对组件应用 QoS 限定符(例如事务、安全性和可靠的异步调用)。在连线组件时,您可以指定限定符来为组件以及访问服务的客户端提供扩展的服务质量。在 IBM WebSphere Process Server 中,您可以在三个地方定义 SCA 限定符:

  • 引用
  • 接口
  • 实现

在运行时,这些规范确定了客户端如何与目标组件进行交互。运行时环境可以提供所需的任何额外处理,这取决于所指定的限定符。

用于引用的限定符

引用限定符可以指定异步调用的可靠性,以及是否应该联合目标组件的方法,使之成为任何客户端事务的一部分。

引用限定符包括:

  • Asynchronous reliability - 允许发生异步调用。这些限定符还允许您指定消息的可靠性、请求和响应超时。同时也能配置 Service Integration Bus——它在 IBM WebSphere Application Server 运行时中提供消息传递平台,因此对 WebSphere Process Server 可用。(有关 Service Integration Bus 的信息,请参阅参考资料。)

  • Suspend transaction - 对于同步调用,当使用同步编辑模型进行调用时,客户端全局事务上下文始终会被传播到目标组件。(此限定符只影响客户端全局事务,因为本地事务从不传播到目标组件。)对于客户端不想让目标组件与客户端事务联合的用例,需要使用挂起事务限定符设置来进一步限定引用:

    • True 会在通过服务引用调用组件之前挂起当前全局事务。
    • False(缺省值)指示运行时在通过服务引用调用组件之前不要挂起全局事务。
  • Asynchronous invocation - 确定是否应该进行异步调用(作为任何客户端事务的一部分)。值:

    • Call(缺省值)指示运行时在进行服务调用的同时将消息提交给异步调用的目的地。
    • Commit 指示运行时将消息提交给异步调用的目的地的工作交给当前工作范围单元处理。
  • Suspend activity session - 活动会话能够对可能不支持分布式事务的资源进行更高级的协调。集成解决方案中更可能出现此类情况;客户端不想让目标组件与客户端的活动会话相联合,所以需要使用挂起活动会话限定符设置来进一步地限定引用:

    • True 会在通过服务引用调用组件之前挂起当前活动会话(如果存在)。
    • False(缺省值)指示运行时在通过服务引用调用组件之前不要挂起任何处于活动状态的活动会话。

您可以指定引用限定符,以便它们应用于服务组件的所有引用或者只应用于独立引用。如果需要,您还可以为每个引用指定这些限定符,在这种情况下它们将重写任何顶级限定符设置。在 Properties 视图中以灰色表示继承的限定符,以黑色表示已赋值的限定符。继承的限定符不能更改,除非您选择定义它们的所在元素。

用于接口的限定符

接口限定符说明了被目标服务支持的QoS,因此代表了一个与该服务客户端的约定。

接口限定符包括:

  • Join activity session - 确定目标服务是否愿意加入传播的活动会话范围。值:

    • True 指示运行时不要在接口边界挂起活动会话(如果存在)。
    • False(缺省值)指示运行时在接口边界挂起活动会话(如果存在)。
  • Join transaction - 确定目标服务是否愿意加入传播的全局事务。值:

    • True 指示运行时不要在接口边界挂起全局事务(如果存在)。
    • False(缺省值)指示运行时在接口边界挂起全局事务(如果存在)。
  • Security permission - 使您能够在 SCA 组件上定义 J2EE 角色。只有与声明的角色相关联的客户端才能调用该组件。

所有接口限定符都可以应用于组件的三个级别:

  • 用于其所有接口
  • 用于单个接口
  • 用于某个接口的单个操作。

操作的限定符覆盖接口的限定符;接口的限定符覆盖组件的所有接口的限定符。

用于实现的限定符

实现限定符提供确定服务权限和/或表示其对事务环境的需求的功能。

接口限定符包括:

  • Activity session - 确定组件的处理是否在一个活动会话中执行,除了全局事务上下文所提供的,它还提供一个备选的工作范围单元。值:

    • True:组件将在活动会话的上下文中执行。如果活动会话是在调用时出现的,则会添加该组件。
    • False(缺省值):组件将在现有的全局事务(如果存在)或本地事务的上下文中执行。实现限定符为 activitySession=false 的组件必须使用接口限定符 joinActivitySession=false。
    • Any:如果存在活动会话,则组件会加入当前活动会话。如果不存在活动会话,则组件会在现有的工作范围单元或本地事务的上下文中执行。
  • Transaction - 确定组件处理执行的逻辑工作单元。对于逻辑工作单元,事务期间所做的全部数据修改都是作为一个单元一起提交或作为一个单元回滚的:

    • Global:组件将在全局事务的上下文中执行。如果在调用时存在一个全局事务,则该组件会被添加到该全局事务范围。如果不存在全局事务,则会建立新的事务范围。
    • Local(缺省值):组件将在本地事务的上下文中执行。
    • Any:如果存在一个全局事务,则组件将加入当前全局事务范围。如果不存在全局事务,则组件将在本地事务的上下文中执行。
  • Security identity - 使您能够指定组件担当的身份,与部署描述符上的 J2EE Run-As 约束类似。

限定符是在 SCDL 文件中定义的:接口限定符是在接口部分定义的,实现限定符是在实现部分定义的,引用限定符是在引用部分定义的。(有关详细信息,请查阅 WebSphere Process Server Information Center。)







连线组件

在对引用有了新的理解之后,我们现在可以将一些组件通过连线连接起来。我们将使用的示例十分简单,但在这个过程中我们也会检查各种可用的服务质量。我们将继续介绍在第 1 部分使用的信贷审批示例。

在我们的示例中:

  • Credit Approval 组件必须调用 Credit History 组件以及 Credit Agency 组件。
  • Credit Approval 组件将作为这两个服务的一个 Facade。
  • Credit Approval 组件需要连线到其他组件。

这一练习所需要的文件可以从本文所附带的下载文件中获得。

设置工作区

  1. 启动 WebSphere Integration Developer 并创建一个新的工作区(图 5)。


    图 5. 在 WebSphere Integration Developer 中创建工作区
    图 5. 在 WebSphere Integration Developer 中创建工作区
  2. 关闭欢迎屏幕(图 6)。


    图 6. WebSphere Integration Developer 欢迎屏幕
    图 6. WebSphere Integration Developer 欢迎屏幕
  3. 要从下载的文件导入项目交换文件,请右键单击 Business Integration 视图并选择 Import(图 7)。


    图 7. 导入下载文件
    图 7. 导入下载文件
  4. 选择 Project Interchange,然后单击 Next(图 8)。


    图 8. 导入项目
    图 8. 导入项目
  5. 假设您已经将下载的文件解压缩到 C: 驱动器,则选择 CreditApprovalPart2.zip 文件,然后单击 Select All Finish(图 9)。


    图 9. 导入项目
    图 9. 导入项目

检查组件

在我们的示例中,我们将使用自底向上的开发风格:我们有一个现有的 SCA 组件集并准备对它们进行集成。从 Business Integration 视图中,您可以检查该 SCA 模块:

  1. 展开 CreditApproval 模块(图 10)。


    图 10. 展开的 Credit Approval 模块
    图 10. 展开的 Credit Approval 模块
  2. 请注意,它有三个接口和三个 Java 实现。打开 CreditApprovalImpl Java 实现并转到 calculateCreditScore() 方法。请注意,calculateCreditScore 同时与 CreditAgency 组件和 CreditHistory 组件进行交互来完成其服务。您很容易想到将 CreditApproval Service 实现为 BPEL 流程或其他组件类型,但在本例中,我们用一个简单的 Java 组件来作为 Facade。


    清单 2
    																
    																								
    public DataObject calulateCreditScore(DataObject creditApp) {
    		
    	ServiceManager serviceManager = new ServiceManager();
    
    	BOFactory bof = (BOFactory)serviceManager.locateService("com/ibm/websphere/bo/BOFactory");
    
    	DataObject creditRating = bof.create("http://CreditApproval", "CreditRating");
    
    	creditRating.setString("customerId", creditApp.getString("customerId"));
    		
    	CreditAgency creditAgency = (CreditAgency) 
    	serviceManager.locateService("CreditAgencyPartner");
    
    	Integer creditScore = creditAgency.getCreditScore(creditApp);
    
    	CreditHistory creditHistory = (CreditHistory) 
    	serviceManager.locateService("CreditHistoryPartner");
    		
    	Double creditLimit = creditHistory.getCreditLimit(creditApp);
    
    		
    	creditRating.setInt("creditScore", creditScore.intValue());
    	creditRating.setDouble("creditLimit", creditLimit.doubleValue());
    
    	return creditRating;
    	}
    																
    														

  3. 要打开 Assembly Editor,请双击 CreditApproval 集合(图 11)。当 Assembly Editor 打开时,会显示三个组件(图 12)。


    图 11. 打开 Assembly Editor
    图 11. 打开 Assembly Editor

    图 12. Assembly Editor 中的组件
    图 12. Assembly Editor 中的组件

连线组件

CreditApproval 组件通过使用简单的 SCA 客户端 API 来与 CreditAgency 和 CreditHistory 进行交互。然而,要让运行时正确地调用这些服务,需要将组件“连线”起来,使用 WebSphere Integration Developer 来进行这一操作非常简单。在我们的示例中,我们将接受缺省值。

  1. 选择 CreditAproval 组件并将其连线到 CreditAgency 组件(图 13)。


    图 13. 连线组件
    图 13. 连线组件
  2. 将显示一个对话框(图 14),表明将在 CreditApproval 组件上创建一个引用。选择 OK


    图 14. 匹配引用对话框
    图 14. 匹配引用对话框
  3. 由于 CreditApproval 组件是一个 Java 组件,所以我们需要用 WebSphere Integration Developer 生成 Java 接口以便能够调用该组件。因此,在下一个对话框(图 15)中选择 Yes。如果 CreditApproval 已经是一个完整的 BPEL 流程,则选择 No。(请记住,在大多数情况下将使用 WSDL 作为集成层中的接口选择。如果 User Interface 是与集成解决方案联合部署的,则可以使用 Java 接口。)


    图 15. 生成 Java 接口对话框
    图 15. 生成 Java 接口对话框
  4. 重复步骤 9 到 11,将 CreditApproval 组件连线到 CreditHistory 组件。结果应该与图 16 类似。


    图 16. 组件连线完成
    图 16. 组件连线完成

单元测试组件

因为我们使用 Java 作为我们的实现,所以可以在 Java SE 环境中对组件进行单元测试。正如在第 1 部分所做的,我们很容易在 WebSphere Integration Developer 中调出单元测试工具:

  1. 右键单击 CreditApproval 组件并选择 Test Component(图 17)。


    图 17. 测试组件
    图 17. 测试组件
  2. 将显示单元测试工具。该单元测试功能的一个很好的优点是它允许独立测试组件,并且可以检测引用和创建模拟器。在我们的例子中,我们自己测试集成,所以需要删除模拟器。

  3. 切换到 Configurations 选项卡。

  4. 展开 Module CreditApproval 模块,突出显示 CreditAgency CreditHistory,并将它们从 Emulators 列表中删除(图 18)。现在,测试 CreditApproval 组件将导致调用 CreditHistory 和 CreditAgency 组件,而不会模拟交互。


    图 18. 删除模拟器
    图 18. 删除模拟器
  5. 切换回 Events 选项卡并突出显示 Invoke 项(图 19)。


    图 19. Events 选项卡
    图 19. Events 选项卡
  6. 填充输入,如图 20 所示。


    图 20. 数据参数
    图 20. 数据参数
  7. 单击 Continue

  8. 选择 Eclipse 1.4 JVM 选项(图 21)。


    图 21. 选择部署位置
    图 21. 选择部署位置
  9. 检查每个步骤的流程。您可以实际看到流经组件的数据(图 22)。


    图 22. 事件流
    图 22. 事件流
  10. 最终结果应该与图 23 类似。


    图 23. 测试结果
    图 23. 测试结果
  11. 关闭测试编辑器,不进行保存。

检查服务质量

引用和连线是集成解决方案的关键,因为它们抽象出调用的方式和场合。当在 WebSphere Process Server 中运行时,您可以定义想为调用设定的服务质量。例如,您可以使调用异步化、可以更改事务上下文,或者使异步调用更加可靠。这里我们将通过检查引用属性来查看各种 QoS 选项。

  1. 选择 CreditApproval 组件上的 CreditAgency 引用,如图 24 所示。


    图 24. 组件引用
    图 24. 组件引用
  2. 转到 Properties 视图。您将注意到该引用被选中。


    图 25. 选中的引用
    图 25. 选中的引用
  3. Details 选项卡上(图 26),将显示被调用的接口和多样性,以及作为目标的连线。您可以更改调用的多样性;对于异步调用,这样可以以一种发布/订阅方式调用几个组件。


    图 26. 引用详细信息
    图 26. 引用详细信息
  4. 切换至 Qualifiers 选项卡(图 27)以设置特定服务质量。


    图 27. Qualifiers 选项卡
    图 27. Qualifiers 选项卡
  5. 单击 Add 按钮来查看几个可用的服务质量(图 28)。


    图 28. 服务质量限定符
    图 28. 服务质量限定符
  6. 作为自我练习,您可以试验这些限定符,请记住,这些质量需要在 WebSphere Process Server 运行时中测试。这些限定符包括事务质量和异步质量;要测试事务工作,您需要与资源交互的组件。特定服务质量是在接口中定义的。这使得该组件能够控制其他组件调用它的方式。

  7. 突出显示 Assembly Editor 中的 CreditApproval 接口(图 29),或者导航至 Properties 编辑器。


    图 29. Assembly Editor 中选定的 CreditApproval
    图 29. Assembly Editor 中选定的 CreditApproval
  8. 检查服务质量限定符(图 30)和实现限定符。请注意,这些限定符是在被调用的服务(而不是调用它的服务)上定义的。


    图 30. 检查限定符
    图 30. 检查限定符

在 WebSphere Process Server 测试环境中测试

要测试服务质量,您通常需要在 WebSphere Process Server 中运行,或者在 WebSphere Integration Developer 中为测试提供的 WebSphere Process Server 运行时运行。

  1. Servers 视图中,右键单击该服务器并选择 Start(图 31)。


    图 31. 启动测试环境中的服务器
    图 31. 启动测试环境中的服务器

    图 32. 服务器已启动
    图 32. 服务器已启动
  2. 当服务器启动后,您可以按照管理控制台中的指示(图 32),以一种类似于添加 J2EE 应用程序的方式将该 SCA 模块添加到服务器中,因为 SCA 模块被包装成 EAR 文件(如第 1 部分所提到的)。再次右键单击服务器并选择 Add and remove rojects...(图 33)。


    图 33. 添加和删除项目
    图 33. 添加和删除项目
  3. 选择 CreditApprovalApp 并将它添加到已配置的项目一侧(图 34)。


    图 34. 将项目添加到服务器
    图 34. 将项目添加到服务器
  4. 检查管理控制台,确保 SCA 模块已启动(图 35)。


    图 35. 表明 SCA 模块已启动的控制台消息
    图 35. 表明 SCA 模块已启动的控制台消息
  5. 要使用同一 WebSphere Integration Developer 单元测试功能来测试该组件,请按照前面所执行的操作,再次右键单击该组件,然后选择 Test Component(图 36)。


    图 36. 测试 SCA 组件
    图 36. 测试 SCA 组件
  6. 再次说明,请删除模拟器,以使测试能够流经 SCA 组件(图 37)。


    图 37. 删除模拟器
    图 37. 删除模拟器
  7. 键入输入参数,如图 38 所示。


    图 38. 数据参数
    图 38. 数据参数
  8. 选择 WebSphere Process Server V6.0 作为部署位置(图 39)。


    图 39. 选择部署位置
    图 39. 选择部署位置
  9. 检查测试结果。

作为自我练习,请更改组件以进行数据库更新,然后试验事务属性。您也可以在管理控制台中使调用异步化以及检查基础 Service Integration Bus 配置。







结束语

本文介绍了使用 WebSphere Integration Developer 组装服务组件体系结构组件的上下文中的引用和连线。这一系列的下一篇文章将讨论导入和导出,以便您能够集成 SCA 模块。该系列以后的文章还将介绍更复杂的组件以及与非 SCA 组件相集成。







致谢

作者真诚感谢 Eric Herness、Keys Botzum 和 Paul Ilechko 对本文的审阅。








下载

名字 大小 下载方法
CreditApprovalPart2.zip 23 KB  FTP|HTTP

posted @ 2006-04-17 04:18 wsdfsdf 阅读(267) | 评论 (0)编辑 收藏

用于实现 Web 服务的 SOA 编程模型,第 7 部分: 保护面向服务的应用程序

保护面向服务的体系结构(service-oriented architecture,SOA)中的应用程序具有挑战性,因为 SOA 的松耦合特性可能暴露现有安全实现的弱点。以下解决方案包括定义明确的信任模型(基于可接受的验证形式),并糅合了策略、Web 服务安全性和安全工程最佳实践。

引言

对于任何应用程序来说,保护信息访问的安全都是最基本的要求。由于按 SOA 原则构造的实现的服务、应用程序以及跨组织操作的松耦合,因此安全对其甚至更为重要。这种环境往往会暴露现有安全实现的弱点或局限性。

即使不考虑通过由模型驱动的开发和基于 SOA 的服务管理所提高的效率,业务应用程序仍须保护信息。只保护周边设施(如防火墙和路由器)是不够的,因为随需应变的企业必须能够随着其合作伙伴、客户和雇员之间的关系发展而建立和断绝动态信任关系。因此,安全的随需应变企业需要灵活的、可自定义的基础设施,以适应新要求和规章制度。要提供这种灵活性,不应将策略生搬硬套到基础设施中;应该通过由策略驱动的基础设施满足安全模型的要求,这任务可不简单。

本文将阐释业务应用程序利用随需应变安全基础设施的安全功能的方式,以及建立用于保护面向服务的应用程序的编程模型的设计原则。







业务应用程序和安全基础设施

安全集成以及对业务应用程序和信息的访问通常是通过身份验证、授权和责任实现的。企业探讨管理身份验证、授权和责任的方式在很大程度上取决于其对客户、雇员和合作伙伴之间的信任关系的看法;这些关系对业务应用程序安全的影响;以及这些应用程序的相对重要性和安全性。

在业务合作伙伴之间交换敏感信息时,敏感信息必须受到保护。可能还需要用安全的方式保存敏感信息。必须保证消息源的完整性(如通过公证服务)才能在必要时启用验证、审核和认可。可能需要对敏感信息进行加密以实现机密性,或对其进行数字签名以实现完整性。(数字签名也可用于认可。)完整的 SOA 设计必须不但涵盖消息级和传输级安全性,而且还要满足保护保存的内容以遵守政府规章制度和业界最佳实践的需要。

安全策略的制定和执行以及所执行的安全级别,基本上都取决于企业及其雇员、客户和合作伙伴之间的信任关系。证书和密钥之类的相关技术可用于反映和管理这些信任关系。工具可用于建立业务合作伙伴、客户和企业等之间的信任关系模型并指定信任关系,还可以将信任定义转换成适用于 IT 环境的技术。







SOA 安全模型

SOA 安全模型基于 Web 服务可能需要其中的传入消息以验证一系列声明的过程。名称、密钥、权限和功能都是声明的例子。根据所提供的证据,会在请求者、服务端点和一系列可能的中介之间应用适当的信任模型。

消息可能会通过请求者和目标服务之间的若干中介。端到端安全性必须考虑到请求者、中介和最终端点服务(提供者)之间的信任模型,如图 1 所示。


图 1. 从请求者通过中介到提供者的信任模型
信任模型

对于消息处理,网络和传输中介(如防火墙、路由器和代理服务器)一般不受信任。应该防止传输中的所有消息受到不可靠中介的篡改。

OASIS Web 服务安全性(Web Services Security,WSS)规范提供对传输中的简单对象访问协议(Simple Object Access Protocol,SOAP)消息的保护。可用 WSS 防止消息的真实性、完整性和机密性受到不可靠网络和传输中介的攻击。


图 2. 消息中介代理信任关系和联合
消息中介代理

并不是所有中介都不可靠。Web 服务网关和企业服务总线中介服务都是消息转换中介的例子,其在 SOA 内的功能包括检查,在某些情况下还包括对消息有效负载的修改 [请参阅此系列中的第 4 部分,“IBM 企业服务总线简介”(developerworks,2005 年)]。在设计 SOA 安全基础设施时,请考虑允许某些受信任的中介。

处理请求者和应用程序服务主机之间的信任关系的消息代理可能是另一个受信任的中介。在这种设计中,安全责任由代理和服务端点来分担。如图 2 所示,消息中介将负责消息级安全、请求者和提供者环境之间的身份联合,以及管理请求者和服务提供者之间的信任关系。服务只有为了满足特定于服务的安全要求(如建立(通过中介映射和联合)访问特定于消息有效负载中应用程序数据的服务、完整性和机密性数据的身份)才会继续起安全作用。通过分解业务应用程序中脆弱或复杂的基础设施代码并将其委派给容器,基于 SOA 的安全方法可以提高灵活性并降低发生不测事件的可能性。







消息安全性

WSS 规范还提供一系列有助于 Web 服务开发人员保护 SOAP 交换的基本消息级完整性、机密性和身份验证机制。可用各种方式组合这些机制,以便用各种加密技术建立各种安全模型。

WSS 还提供可扩展的机制,以便将安全令牌与含有各种身份验证及授权格式和机制的消息相关联。例如,客户机可能会提供身份证据及其具有特定业务证书的已签名声明。然后收到这种消息的 Web 服务就可以确定是否要信任其声明和信任的程度。

安全令牌声明可由授权机构核准或不核准。一组已核准的声明通常表示为安全令牌(经过数字签名或受到授权机构加密保护)。X.509 证书就是一个熟悉的已签名安全令牌例子;它断言某人的身份和公钥之间的绑定关系。安全令牌可以“推送到”消息中或者在消息中携带安全令牌,也可以通过引用表示安全令牌,以便接收方从授权机构“拉取”该声明。

因为安全令牌是在信任域内起作用的,所以需要有链接信任域作用范围的方式。可通过协议或通过实现一系列规则强制执行信任策略来手动链接。这样,如果发送方和接收方之间有已确立的信任关系,则可信任未经核准的声明。例如,如果发送方和接收方使用的是其通过带外信任关系建立的可靠连接,则发送方为 Bob 的未核准声明足以让某些接收方认为发送方实际上就是 Bob。在本例中,此可靠连接的存在可作为确凿的证据。

防止消息内容受到非法访问(机密性)或非法修改(完整性)是主要的安全事务。WSS 规范提供通过对主体、标题、附件或其任意组合(或部分)进行加密和/或数字签名保护消息的方法。

身份验证请求基于可选网络、由传输支持的安全性和消息中已批准的信息(声明)的组合,这种技术称为消息源身份验证可能更好一些。通过网络和由传输提供的安全性、消息中已批准的声明,以及用收件人已知的密钥对请求进行加密,请求者可以对收件人进行身份验证。







信任模型

演示安全令牌已授权应用的一种方式是,添加采用相关联密钥(来自于占有证据令牌)的数字签名。这会使请求者可通过将安全令牌(如 X.509 公钥基础设施(Public Key Infrastructure for X.509,PKIX)证书或 X.509 证书)与消息相关联来证明所请求的声明组。

如果请求者没有向服务证明请求的声明所必要的令牌,则可与相应的授权机构(我们称为安全令牌服务)联系,并用正当的声明请求所需的令牌。安全令牌通过发布一系列安全令牌(可用于在不同的信任域之间代理信任关系)来形成信任的基础。

一种机制是应用 WS-Trust(对于有关 WS-Trust 规范的更多信息,请参阅参考资料)中所定义的质询回应协议。这种机制由 Web 服务用来对请求者进行更多质询,以确保消息不过时,以及验证安全令牌的使用是否已经授权。图 3 所示的就是此模型,可以看出任何请求者也都可以是服务,请求者和目标服务都具有受信任的第三方安全令牌服务,这种服务有助于验证每个目标服务策略所需的安全令牌。


图 3. 安全令牌服务
安全令牌服务

此 SOA 安全模型(声明、策略和安全令牌)还含有并支持若干特定模型,如基于身份的授权、访问控制列表和基于功能的授权。通过该模型可使用现有的技术,如 X.509 公钥证书、基于 XML 的令牌、Kerberos 共享秘密票证,甚至口令摘要。SOA 模型结合 Web 服务安全对话语言(Web Services Secure Conversation Language,WSSC)和 Web 服务策略框架基本要素,这足以构造高级密钥交换、身份验证、基于策略的访问控制、审核和复杂的信任关系。

将对 Web 服务应用策略,Web 服务会从请求者收到可能包括安全令牌的消息,还可能会对其通过 WSSC 机制应用某些保护措施。下面是由 Web 服务的信任引擎执行的主要步骤:

  • 验证令牌中的声明是否足以遵从策略,以及消息是否与策略一致。
  • 验证申请人的特征是否可由签名来证明。在代理式信任模型中,签名不可以证明申请人的身份;签名可以证明中介(只是可断言申请人的身份)的身份。声明经过批准或不是基于策略。
  • 验证安全令牌(包括所有相关和即将颁发的安全令牌)的颁发者是否可信,可以颁发其所作的声明。信任引擎可能需要外部验证或代理令牌(也就是向安全令牌提供服务发送令牌,以便用其交换其他可直接用在其评估中的安全令牌)。

如果满足了这些条件,而且请求者有权执行操作,则服务可以处理服务请求。

可将 IP 安全(IP Security,IPSec)或传输层安全/安全套接字层(Transport Layer Security/Secure Sockets Layer,TLS/SSL)之类的网络和传输保护机制与此 SOA 安全模型结合使用,以支持不同的安全要求和方案。如果可用,作为附加安全技术,请求者应该考虑采用网络或传输安全机制,以便在颁发、验证或更新安全令牌时对收件人预先进行身份验证。







编程模型设计原则

从安全的角度来看,编程模型包括对于谁负责实现安全策略(如基础设施或应用程序)所作的决策,以及需要让请求者得到此信息的哪一部分。除了操作方面,某些设计期间的策略(如在 J2EE 描述符中捕获的)也有助于管理应用程序。是通过使基础设施能够实现安全模型,还是通过将安全的实现转换成每个应用程序中的代码来最大程度地满足业务需求,这是关键实现决策之一。要考虑的另一方面是调用服务的变数。服务的消费者是否通过可在订阅期间定制的选择得到了灵活性?最后,在实现安全解决方案时,应该考虑安全工程——用于构建安全应用程序的工程方法。







由基础设施管理的安全与由应用程序管理的安全

每个组织通常都会让某些人负责确定和实现其安全策略。在许多情况下此过程都是手动的,从而导致组织投入大量资源在不同的实体和应用程序之间协调访问。

我们建议复杂的组织在基础设施中集中实现与解决方案相关的安全策略——也就是验证用户质询(如用户 ID/密码)、控制对应用程序的访问(如对 travelService 执行 reserve() 方法),以及委派身份(如运行方式 travelAgency id),以确保方法一致。可在某些部署构件(如 J2EE 应用程序的部署描述符)中定义初始应用程序安全策略。部署完毕后,熟悉大部分应用程序逻辑时就可以向部署环境提供策略信息了。可将策略声明概括成高级策略要求,以备将来细化成实现约束条件,这被认为是部署阶段的工作。

应用程序设计中引入了有关由基础设施管理的安全与由应用程序管理的安全的决策。安全约束和条件是附加到实现构件的。决定是让基础设施处理安全,还是将安全转换成应用程序中的代码的时机在实现阶段,此时通常可以得到有关应用程序平台(如 Java™ Platform Enterprise Edition (J2EE) 和 Microsoft® .NET)的信息。

我们建议将应用程序的重点放在业务逻辑、延迟服务访问的保护和送往基础设施的消息(承载应用程序的运行时容器)上。在这种由基础设施管理的方法中,附加到设计构件的安全策略将被转换成特定于平台的策略 [例如,通过统一建模语言(Unified Modeling Language,UML)模型表示的要求将转换成 J2EE 部署描述符]。

在由应用程序管理的方法中,安全实现是在应用程序中实现的,必须实现相应的安全调用。即使是由应用程序管理的安全也必须通过 Java 身份验证和授权服务(Java Authentication and Authorization Service,JAAS)将其安全调用(如 authenticate())转换成相应的特定于平台的功能[如 loginContext.login()]。

授权和访问控制的粒度粗细不等。细粒度访问(对于解决方案本身)与粗粒度访问(对于其操作之一)的选择通常取决于业务和技术考虑。粒度也会受各种因素的影响,包括信息实体的实例(如特定游客的信用帐户概要信息)、上下文信息,如用户特征(如旅行社)、时间约束(如从早上九点到下午五点)、访问目的(如进行旅游预订的目的)、访问路径(例如,内部网请求与外部请求),以及许多其他因素。

可通过定义应用程序角色概括与授权相关的策略,其中的角色是指一组通过其可对特定应用程序资源执行某些操作的权限。例如,旅行应用程序可声明对 ReservationBean 执行的 view()change() 预订方法可由 TravelAgent 角色访问。换句话说,TravelAgent 是由实现方案定义的角色,可以确定可由“旅行社”执行的操作;根据一组用于对各自企业 JavaBean(Enterprise JavaBean,EJB)调用特定方法的权限。在实现阶段不大可能定义的是谁拥有 TravelAgent 特权。用户到角色的指派通常是在部署时开始的,然后会在应用程序的整个生命周期内对其进行管理。清单 1 所示的是用于定义某些基于角色的方法权限的示例代码。


清单 1. 用于定义某些基于角色的方法权限的代码
												
														<method-permission>
<role-name>TravelAgent</role-name>
<method>
   <ejb-name>ReservationBean</ejb-name>
<method-permission>
<role-name>TravelAgent</role-name>
<method>
   <ejb-name>ReservationBean</ejb-name>
   <method-name> view</method-name>
   <method-name> change</method-name>
</method>
</method-permission>
			
												
										

在执行某些业务逻辑之前要求提供通过身份验证的身份信息的应用程序必须从基础设施中得到该信息。例如,在 J2EE 环境中,运行时会在身份验证后确定用户的身份;应用程序可通过 API(如 getCallerPrincipal())检索此信息。







选择的灵活性

客户机运行时有时需要某些对访问服务本身的要求或约束(包括身份验证、完整性和机密性要求)。而支持各种客户机运行时(如浏览器客户机、非浏览器客户机和 PDA 瘦客户机)可能是令人满意的。要支持各种客户机运行时,请发布断言客户机运行时必须确保消息机密性,并必须提供用户身份的证据(用户 ID/密码或证书)的策略。身份验证的策略概括可列出替代选项,如可接受的凭据类型,或所信任的凭据颁发机构。

例如,TravelService Web 服务可声明其要求某些安全令牌类型的意图和机密性要求。实现方案可通过描述符支持意图声明。工具则可进而生成必要的机器级详细信息(如 WS-SecurityPolicy 表达式),如清单 2 所示。


清单 2. WS-Security 策略描述符示例
												
														<wsp:Policy>
  <sp:SymmetricBinding>
    <wsp:Policy>
      <sp:ProtectionToken>
        <wsp:Policy>
          <sp:KerberosV5APREQToken
              sp:IncludeToken=".../IncludeToken/Once" />
        </wsp:Policy>
      </sp:ProtectionToken>
      <sp:SignBeforeEncrypting />
      <sp:EncryptSignature />
    </wsp:Policy>
  </sp:SymmetricBinding>
  <sp:SignedParts>
    <sp:Body/>
    <sp:Header
       Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"
    />
  </sp:SignedParts>
  <sp:EncryptedParts>
    <sp:Body/>
  </sp:EncryptedParts>
</wsp:Policy>
			
												
										







安全工程

在开发安全解决方案的过程中,安全工程是最佳实践之一——请遵循定义明确的模式,以使您的应用程序、服务或组件可以完全实现其设计者和用户的期望。您应该估计每个实现方案构件中固有的风险,对其进行设计和实现以防其暴露在弱点下(例如,高效的内存管理并避免出现隐蔽的通道)。工具支持和代码评审也有助于将对从中部署解决方案的环境的损害降到最低(或彻底避免)。







总结

SOA 编程模型必须确保每个服务调用都符合对请求者和服务端点均有效的安全策略。安全基础设施(包括对请求者进行身份验证和对其授予服务访问权的能力、基于基本信任模型跨 Web 服务请求传播安全上下文、审核重要事件,以及有效地保护数据和内容)形成了有助于保护组件和服务的 SOA 环境的结构。所有 SOA 安全的核心都是基于策略的基础设施和策略的管理。在理想的情况下,SOA 应用程序的重点在于业务逻辑、委派安全策略的实现,以及处理基础设施的信任关系。基于 Web 服务安全规范的 Web 服务安全模型和方法有助于解决保护面向服务的应用程序的难题。

posted @ 2006-04-17 04:14 wsdfsdf 阅读(176) | 评论 (0)编辑 收藏

实现 Web 服务的 SOA 编程模型,第 6 部分: 不断发展的组件模型-----实现 SOA 的系统方法

与语言无关、基于组件的面向服务的体系结构 (SOA) 编程模型简化了实现 Web 服务以及将其组装到解决方案中的过程。使用编程模型,非编程人员可以在没有掌握复杂的技术的情况下使用现有的 IT 资产。它满足了解决方案设计人员和业务分析人员的需要,提供了更高级别的抽象来隐藏实现技术之间的差异,同时还提高了业务可靠性。

为什么需要基于组件的编程模型?

推动 IBM 的 SOA 编程模型的远景依赖于两个重要的观察结果,请看以下两段引言中的精辟描述:

“根据时髦词语设计 (Design-by-buzzword) 是一种常见的情况。至少在软件行业,这种行为或多或少与缺乏对一组给定的有用体系结构约束的理解有关。换句话说,在选择要重用的软件体系结构时,设计人员并没有真正弄清楚这些体系结构之所以好的原因。”
——Roy Thomas Fielding,“Architectural Styles and the Design of Network-based Software Architectures”(请参阅参考资料以获得指向此研究报告的链接)。

这个问题可以通过将详细了解体系结构约束的原因的人的经验融入一组模式、编程构件和工具来解决。

第二个重要的观察结果同人以及人与技术的交互有关:

“创建面向服务的体系结构 (SOA) 意味着重新考虑当前用于构建系统的实践、组织的技能,以及团队成员协作的方式。面向服务的作用在于通过组装不同的应用程序来开发解决方案,SOA 是体系结构样式,强调独立服务提供者的松散耦合。”
——A.W. Brown 等,“Realizing service-oriented solutions with the IBM software development platform”(请参阅参考资料以获得指向这篇文章的链接)。

基于 XML 的 Web 服务标准使人想到了基于组件的编程模型的某些方面。诸如 Web 服务互操作性 (WS-I)、Web 服务描述语言 (WSDL) 和 Web 服务策略 (WS-Policy) 之类的标准尝试创建与平台无关的抽象和统一的框架来进行业务软件集成。而 Web 服务的价值来源于在 SOA 中使用它们。

大多数关于 Web 服务的资料都集中于互操作性协议和服务接口及其使用。而本文把重点放在用于实现服务并将服务组装成解决方案的编程模型上。组件模型简化了构建和组装服务的过程。

良好定义的组件应该支持生态系统中的各种用户角色——例如业务分析人员、集成开发人员、适配器开发人员和解决方案管理员——通过实例化、使用、组装和自定义符合用户目标、技能和概念性框架的不同组件类型,来创建面向服务的应用程序。(注意:编程人员作为专业人员和重要的软件开发角色仍然存在,但并非每个人都必须成为专业编程人员才能高效地使用 SOA 构件。)

Web 服务标准中的组件模型明确地定义了组件和组件类型,以及定义和构造组件的方式,以便由适合角色的工具重用和操作,这与我们对技术使用中人的方面的观察结果是一致的。

基于组件的编程模型有许多好处,最显著的好处是可以减少复杂性。没有哪个角色需要了解实现功能的所有方式或所有的系统接口。公开给每个角色的复杂性是有限的,而公开给开发人员角色的复杂性有助于他们使用适合于其任务的工具以定义良好的方式开发解决方案。

组件模型必须是抽象的,并且与语言无关,因为它的作用在于隐藏技术细节和差异。

组件模型还必须简化非编程人员组装和定制“解决方案部分”的过程。因此,与组装和调整有关的组件(或组件集合)的所有方面必须以与语言无关的方式显式地声明,这样无需编程人员修改源代码就可以通过工具操作它们。我们使用 XML 来表示这些声明。

SOA 的确切特征还有待探讨,不过一些关键的方面已经得到广泛承认:

  1. SOA 是一种分布式组件 体系结构。不管在企业内部还是企业外部,SOA 组件都是透明的,并且可以通过一系列统一支持的、可互操作远程过程调用和消息传递协议来统一访问。接口定义标准支持开发人员工具之间的互操作性。网络上 (on the wire) 协议互操作性——相对于代码可移植性——是 SOA 组件的中心部分,支持统一访问和平台独立。调用方不知道组件的基础实现技术,例如 Java™ 2 Platform、Enterprise Edition (J2EE)、Microsoft® .Net 和 PHP。
  2. SOA 组件封装功能,并支持通过业务分析人员和业务模型建模的抽象级别的重用。这使 IT 功能和它所支持的业务功能之间的映射更加直接,从而提高了可靠性。
  3. 声明性的、计算机可处理的约定允许第三方访问 SOA 组件提供的服务。这些约定显式地声明功能性特征以及非功能性(服务质量或 QoS)特征和需求。SOA 组件使用 WSDL 记录它们的操作。还可以使用用于 Web 服务的业务流程执行语言 (BPEL4WS) 来定义组件的有效操作序列。
  4. 可以动态地发现、选择、绑定(通过其声明性属性)和集成(使用组合机制,例如本系列第 3 部分“Process choreography and business state machines”(developerWorks,2005 年 7 月)中描述的组合机制)SOA 组件。







组件实现和专用组件类型

开发人员可以选择使用 J2EE、PHP 或其他工具实现基本组件。作为一种编程模型,从根本上讲,SOA 更多地关系到与组件的交互以及如何将这些交互集成到复合组件、应用程序和解决方案。

我们的编程模型还引入了一些定义良好的组件类型,可以建模开发人员生产和部署到解决方案中的常见构件。其中包括 Plain Old Java Objects (POJOs)、Business Processes (BPEL4WS)、Structured Query Language (SQL) 服务、Adaptive Business Objects、通过 J2EE Connector (J2C) 体系结构资源适配器访问的 Customer Information Control System (CICS) 程序、使用 SAP 的业务应用程序编程接口的应用程序、J2EE 无状态会话 Bean 和 IBM MQSeries® 应用程序。

因为在性质上 SOA 组件模型是虚拟的,所以许多 SOA 组件自然支持多种实现技术。另一方面,不同的实现技术更好地适合于不同的任务。为了提高透明度,我们引入了服务组件类型的概念,每种类型都适合于具有特定技能、执行特定任务和使用特定工具的开发人员。对于查询,编程人员实现了一个 SQL 文件和一个包含一组 XQuery 语句的文件;对于文档转换,使用为此任务优化的工具实现 XSLT 样式表等等。不需要知道 Web 服务、Enterprise JavaBean (EJB) 或其他组件是在部署时生成的,这是因为总体结果是作为通用 SOA 组件公开和使用的。

编程人员构建一种适合于该任务的特定组件类型,集中于要解决的问题和要使用的工具,而不是结果构件。SOA 开发工具应该集中于开发人员的技能和他或她理解的概念。后续文章将简要介绍一些组件类型,通过三个完全不同的示例——Java 对象、信息管理系统 (IMS) 事务和 SQL 语句——演示如何将任何实现技术映射到公共 SOA 组件模型,同时满足特定开发人员的需要。






组合

虽然可以使用特定于平台的技术实现 SOA 组合,但是新的以 SOA 为中心的组合类型可以自己实现,而无需转换为另一种编程模型。

使用组合模型,可以发现具有所需的接口和所需的基础设施 (QoS) 策略的服务,并且将这些服务聚合到新的服务、模块和解决方案中。可以组合这些新的服务。

我们的方法统一了创建和访问业务逻辑的范型。我们的 SOA 编程模型比现有的编程构造复杂,隐藏了实现技术之间的不同。在这种模型中,组件组装到模块中,而模块又可以组合到解决方案中。组件公开了可以通过可寻址接口调用的接口。接口是使用 WSDL、Java 或其他语言描述的。实现可能有无法解析的对所需服务的引用,这些服务是执行之前由连接在一起的组件提供的。可以由解决方案集成人员或解决方案组装人员使用适合于角色的工具进行连网操作,他们可以运用可能不为最初开发这些组件的人所知的企业策略和企业服务总线 (ESB) 部署拓扑知识来进行工作。







在没有进行编程的情况下自定义

不可能始终在没有进行配置、自定义或调整的情况下按原样重用服务。在需要更改时,当前的技术发展水平是修改源代码。然而,是否能够交付可以大量重用的组件在很大程度上取决于组件适应其使用环境的功能。SOA 编程模型应该支持构建“编程人员”可以在没有修改源代码的情况下进行自定义的服务和模块。当使用组件的编程人员与构建组件的编程人员不在一个单位时,这一点尤为重要。

基于组件的 SOA 编程模型提供了几种在没有进行编程的情况下自定义组件的机制。

旨在重用的组件可以打包成具有可变点 (points of variability) 的模板,在将模板放入解决方案时可以对其做一些调整。这种适应性是我们的编程模型最重要的部分,此外,编程模型还包括规则语言和相关工具,用于给新的用户提供自定义功能。

中介主要用于处理动态消息。通常可以在没有进行编程的情况下组合中介。作为一个多协议构造,企业服务总线发挥了重要的作用,可以将服务组件组合在一起进行无缝交互,另外,还允许在消息的路径中插入称为中介 的组件,以在不改变现有端点的情况下代理服务之间的交互,从而在主要方面解决整个企业范围内的问题,例如审核、记录、路由、不匹配接口的适应性、等效组件的增量替换和安全性。

SOA 编程模型的另一个好处(来源于前面提到的特性)是能够在软件生命周期的不同阶段用一个组件替换另一个组件。通过将声明的接口延迟绑定到支持这些接口的实现可以做到这一点。企业为什么需要替换功能单元,有许多方面的原因。其中最重要的原因可能是减少在大型企业中管理更改的困难。以增量的方式引入更改并且通过遵循定义的接口限制其影响可以提高灵活性。这种做法也适合于松散耦合,而松散耦合常常是大型组织的特征。此外,使用服务组件,有不同的技能、需求和时间安排的组可以以人力资源和系统资源两方面的效率都最高的方式在 IT 基础设施中协同工作,这样企业就可以快速地响应业务级的更改,从而使企业大大获益。







组件定义

我们的 SOA 是由以下规范定义的:

  1. 服务规范 以组件提供和使用的一组服务的形式提供了组件的视图。它由以下三组规范定义:
    • 接口,通常是 WSDL portTypes
    • 策略,记录 QoS 属性,例如事务行为和安全性。
    • 行为描述,例如 BPEL4WS 抽象流程。另一个例子可能是统一建模语言 V2 (UML2) 状态模型,该模型指定了哪些操作对不同的状态和操作所引发的状态事务是有效的。调用方可以通过状态模型计算有效的操作序列。
  2. 服务组件实现 是由以下四组规范定义的:
    • 提供的服务规范。
    • 需要的服务规范。
    • 可以在组件上设置以调整或自定义的属性。
    • 为此提供基本支持的属性;更复杂的方案使用可变点和对自定义组件的外部调用。
    • 对所有实现实例都保持不变的容器指示(策略)。
    • 定义组件实现的实现构件(例如 Java 类、BPEL 文档或 XSLT 规则集)。
  3. 服务组件(实例)由以下规范定义:
    • 名称。
    • 服务组件实现。
    • 实现的任何属性的值,设置用于调整实例。
    • 任何服务的规范,解析实现需要的服务规范。它们可以是连接组件实例的“网络”,也可以是在运行时执行以查找组件的“查询”,所查找的组件实现相关接口,具有相关的 QoS 策略,并且匹配指定的行为(例如抽象流程或状态模型)。

有两种定义 SOA 组件的基本方法。这些定义可以通过开发工具生成,也可以由开发人员手动创建。

第一种方法是控制文件,顾名思义,控制文件即关联或联接组件的所有部分的文档。例如,控制文件可以引用 WSDL 定义(提供的接口)、实现组件的 Java 类(实现构件)或相关的策略文档(策略断言)。 它们可以是对文件系统、类路径、源代码管理系统或 Web URL 的引用。控制文件方法将多个单独开发的构件聚合在一起组成组件。应用程序开发工具可以帮助定义控制文件。

第二种方法是使用 pragmas,指定相同信息的语言元素,但是包含在单个源文件的主体中。Java 方面的支持正在不断增加(例如,JSR 175 中的 XDoclet 标记),以用 Java 语言编写这些批注部分。但是这种方法尚不支持其他等同的有效 SOA 组件实现技术(如 SQL 或 XQuery 语句集)。每种组件类型都有用于其实现构件的相关源文件格式,例如 Java 文件、状态机或 SQL 文件。IBM WebSphere® Rapid Deployment 中的批注支持可以生成所有组成包含 pragmas 的源文件中的组件的单个元素。例如,Java 源文件中的结构化注释指示哪些 Java 方法将成为所生成的定义组件的服务接口中的 Web 服务操作。







总结

基于组件的编程模型——由面向任务的工具和运行时基础设施支持——是快速采用 SOA 的关键。借助于期望的优势(如新的软件重用方法),专业人员(不必是编程人员)可以在新的业务需求出现时使用 SOA 组件创建新的业务解决方案和改写现有的业务解决方案。

posted @ 2006-04-17 04:12 wsdfsdf 阅读(154) | 评论 (0)编辑 收藏

IBM WebSphere 开发者技术期刊: 使用服务组件体系结构构建 SOA 解决方案——第 1 部分-----太棒了,出现了另一个编程模型?

     摘要: 随着 IBM® WebSphere Integration Developer 和 WebSphere Process Server 的发布,出现了一种用于构建面向服务的体系结构 (SOA) 的新编程范式,称为服务组件体系结构,它是为在 SOA 中构建和组装业务解决方案而专门设计的一个新编程模型,旨在集成和组合服务。 摘自 IBM WebSphere 开发者技术期刊。...  阅读全文

posted @ 2006-04-17 04:10 wsdfsdf 阅读(218) | 评论 (0)编辑 收藏

在企业级 SOA 中使用 Web 服务,第 7 部分: 使用 XML 二进制优化打包规范加速 Web 服务应用程序

您是否希望了解如何使用 XML 二进制优化打包 (XOP) 规范来优化 Web 服务应用程序?Judith M. Myerson 将向您展示在处理 Web 服务时,XOP 包比 XML 解析器更有效的原因。她将讨论在多 SOA 中 Web 服务变得过于庞大的两个场景。为了解决此问题,她讨论了 XOP 包可以如何比 XML 解析器更为有效地处理二进制(而非文本)格式的大型文件。她给出了 XOP 处理前后的代码示例,以帮助开发人员了解需要更改哪些元素。

引言

在本系列的第 2 部分中,我讨论了可以如何实现原始应用程序 Web 服务的业务流程并确定系统可以承载的可互操作 SOA 的最大个数,以避免 SOA 过载。在本系列的第 5 部分中,我强调了将业务流程规则作为优化 Web 服务的首要事项的重要性,并给出了一些示例,以说明可以如何减少 Web 请求的数量和执行时间。

在这一部分中,我将讨论基于 XML 的 Web 服务应用程序是如何变得过于庞大的。当大量使用 Web 服务时,这些 Web 服务将阻塞网络通信,从而导致系统过载。为了解决此问题,我将讨论可以如何应用 XML 二进制优化打包 (XOP) 规范(请参阅参考资料)来加速 Web 服务。

此标准草案旨在比当前 XML 解析器更有效地处理 Web 服务。解析器的行为更像解释器,而不是编译器。当解析器读写大型文件(特别是文本格式的大型文件)时,并不能达到其读取较小的文件或计算简单函数时的性能。甚至加密也可能使 Web 服务陷于停顿,因为必须执行复杂的计算才能获得希望的结果。







两个场景

我在第 2 部分中提到,从企业应用程序提取组件,然后将其重新构造为外部 Web 服务,这种做法更为恰当。如果这样,您就可以更改 Web 服务中的代码,而不用重新设计并编译长时间运行的大型复杂应用程序。

第一个 SOA 中经过重新设计而显得更加紧凑的应用程序(请参见图 1)可以通过发送 Web 请求来与第二个 SOA 中的外部企业 MRP(托管资源原型)Web 服务进行动态链接。而 MRP Web 服务又指向第三个 SOA 中的外部企业 CRM Web 服务。客户关系管理 (CRM) Web 服务随后将请求和信息发送到该应用程序以进行进一步处理。


图 1. 动态链接到 Web 服务
与 Web 服务动态链接

让我们假定在任何给定时间都可能出现对多个基于 XML 的 Web 服务的多个 Web 请求。链接到其他遗留系统或大型企业系统的企业应用程序未在上图中显示,而这些系统又与接收多个 Web 请求的多个 Web 服务链接。当大量使用时,Web 服务会变得过于庞大,从而阻塞网络通信。

一个解决方案就是向基于 XML 的 MRP 和 CRM Web 服务应用 XOP 包(请参见图 2),从而以二进制格式进行处理。


图 2. 将 XOP 包应用于 Web 服务
图 2. 将 XOP 包应用于 Web 服务

在第二个场景中,可以首先开发业务流程规则,然后开发根据现有 Web 服务构建新的 Web 服务所需的基于 XML 的 Web 请求。如果新的 Web 服务(业务逻辑 Web 服务或以数据为中心的 Web 服务)可以提供更好的或额外的服务和功能,则必须减少或完全消除冗余的 Web 请求、执行时间、访问时间和带宽。

问题在于,当创建新的 Web 服务并大量使用时,它们将会变得过于庞大。与第一个场景类似,您需要将 XOP 包应用于 Web 服务。对于这两个场景,您都需要与系统管理员协作,以确定在不引起系统过载的情况下可以使用 XOP 包的 Web 服务的最大数目。







XOP 处理前的 Infoset

为了理解 XOP 的工作方式,我将首先讨论一个与 SOAP 消息相似的 XML Infoset,其中描述了包含一张图片和一个签名的 XML 文档。在清单 1 中,我使用粗体来突出显示原始 XML Infoset,以说明哪些原始元素在 XOP 处理之前。


清单 1. XOP 处理前的 XML Infoset
												
																		

<soap:Envelope
    xmlns:soap='http://www.w3.org/2003/05/soap-envelope' 
    xmlns:xop='http://www.w3.org/2003/12/xop/include' 
    xmlns:xmlmime='http://www.w3.org/2004/06/xmlmime'>
  <soap:Body>
    <m:data xmlns:m='http://example.org/stuff'>
    
      
														
																
																		
																				<m:photo xmlmime:content-type='image/png'>
        /aWKKapGGyQ=
      </m:photo>
      <m:sig xmlmime:content-type='application/pkcs7-signature'>
        Faa7vROi2VQ=
      </m:sig>
																		`
      
    </m:data>
  </soap:Body>
</soap:Envelope>
  

														
												
										

正如您所看到的,其中有两个元素:m:photo m:sigm:photo 元素采用 base64 编码的内容为 /aWKKapGGyQ=,而 m:sig 元素采用 base64 编码的内容为 Faa7vROi2VQ=。这些元素也称为元素信息项。内容是元素的子项。请将该元素当作此子项的父项。子项是字符信息项,即包含字母数字字符的项。例如,m: photo 是子项 /aWKKapGGyQ= 的父项。该子项的名称不便阅读且难于发音,很容易出现键入错误。

当通过 XOP 处理放置 XML Infoset 时,可以解决此问题。XOP 的工作方式是:从原始 Infoset 提取优化内容,然后创建 XOP Infoset。优化内容是我刚刚谈到的经过缩减的内容。在清单 2 中,我突出显示了要删除的内容。


清单 2. 要删除的内容
												
																		

<m:photo xmlmime:content-type='image/png'>
        /aWKKapGGyQ=
      </m:photo>
      <m:sig xmlmime:content-type='application/pkcs7-signature'>`
        Faa7vROi2VQ=
      </m:sig>


												
										







XOP 处理后的 Infoset

XOP 处理涉及到三个步骤。第一步,使用 Infoset 中的二进制元素替换文本元素。第二步,在包含已替换元素的 Infoset 前添加 MIME 包。第三步,在该 Infoset 后添加另一个包。

第 1 步:替换元素

XOP 包使用名为 xop:Include 的新元素信息项来替换删除的内容。xop: Include 元素包含一个属性信息项,带有指向 XOP 包部分的链接,XOP 包承载从原始元素中删除的数据的二进制表示。在清单 3 中,我突出显示了替换原始 Infoset 中的图片和签名元素的内容的 xop: Include


清单 3. 替换后的元素
												
																		
 <m:photo xmlmime:content-type='image/png'>
        <xop:Include href='cid:http://example.org/me.png'/>
      </m:photo>
      <m:sig xmlmime:content-type='application/pkcs7-signature'>
        <xop:Include href='cid:http://example.org/my.hsh'/>
      </m:sig>
       
 
												
										

正如您所看到的, href='cid:http://example.org/me.png'/ 是图片元素的属性信息项,而 href='cid:http://example.org/my.hsh' 是签名元素的属性信息项。

更新 Infoset 部分(请参见清单 4)。而行数保持不变。


清单 4. 更新后的 XML Infoset 部分
												
																		
<soap:Envelope
    xmlns:soap='http://www.w3.org/2003/05/soap-envelope'
    xmlns:xop='http://www.w3.org/2003/12/xop/include'
    xmlns:xmlmime='http://www.w3.org/2004/06/xmlmime'>
  <soap:Body>
    <m:data xmlns:m='http://example.org/stuff'>
      <m:photo xmlmime:content-type='image/png'>
        <xop:Include href='cid:http://example.org/me.png'/>
      </m:photo>
      <m:sig xmlmime:content-type='application/pkcs7-signature'>
        <xop:Include href='cid:http://example.org/my.hsh'/>
      </m:sig>
    </m:data>
  </soap:Body>
</soap:Envelope>

												
										

第 2 步:在 Infoset 前添加 MIME 包

为了完成更新,需要使用 MIME Multipart/Related 包中的 XOP 对原始 Infoset 进行序列化。XOP 是一种更有效的方法,用于序列化包含特定类型的 Xquery 和 Xpath 2.0 元素内容的 XML Infoset。

在更新后的 Infoset 前后各添加一个 MIME 包,以分别描述包含文本格式和二进制格式的图片和签名的 XML 文档。在清单 5 中,我突出显示了 XOP 包识别 8 位文本格式的 XML Infoset 的代码。


清单 5. Infoset 前的 XOP 包部分
												
																		
 MIME-Version: 1.0
Content-Type: Multipart/Related;boundary=MIME_boundary;
	      type=text/xml;start="<mymessage.xml@example.org>"
Content-Description: An XML document with my picture and signature in it

--MIME_boundary

														
																
																		
																				Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: 8bit
																		
Content-ID: mymessage.xml@example.org

 
														
												
										

第 3 步:在 Infoset 后添加 MIME 包。

清单 6 显示了 XOP 包如何识别已被删除的数据的二进制表示。


清单 6. Infoset 后的 XOP 包部分
												
																		
  --MIME_boundary

														
																
																		
																				Content-Type: image/png
Content-Transfer-Encoding: binary
																		
Content-ID: <http://example.org/me.png>

// binary octets for png

--MIME_boundary

														
														
																
																		
																				Content-Type: application/pkcs7-signature
Content-Transfer-Encoding: binary
																		
Content-ID: <http://example.org/my.hsh>

// binary octets for signature

--MIME_boundary--
      
  
														
												
										

正如您所看到的,Infoset 后的 Content-ID 的二进制内容,xop: Include element 中提到的链接代替了 Infoset 前的消息的文本内容。







最终结果

清单 7 给出了序列化为 XOP 包的整个 XML Infoset。尽管其中还有其他行,但是此包比原始 Infoset 的 XML 解析器的效率高得多。


清单 7. 序列化为 XOP 包的 XML Infoset
												
																		

MIME-Version: 1.0
Content-Type: Multipart/Related;boundary=MIME_boundary;
	      type=text/xml;start="<mymessage.xml@example.org>"
Content-Description: An XML document with my picture and signature in it

--MIME_boundary
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: 8bit
Content-ID: <mymessage.xml@example.org>

<soap:Envelope
    xmlns:soap='http://www.w3.org/2003/05/soap-envelope'
    xmlns:xop='http://www.w3.org/2003/12/xop/include'
    xmlns:xmlmime='http://www.w3.org/2004/06/xmlmime'>
  <soap:Body>
    <m:data xmlns:m='http://example.org/stuff'>
      <m:photo xmlmime:content-type='image/png'>
        <xop:Include href='cid:http://example.org/me.png'/>
      </m:photo>
      <m:sig xmlmime:content-type='application/pkcs7-signature'>
        <xop:Include href='cid:http://example.org/my.hsh'/>
      </m:sig>
    </m:data>
  </soap:Body>
</soap:Envelope>

--MIME_boundary
Content-Type: image/png
Content-Transfer-Encoding: binary
Content-ID: <http://example.org/me.png>

// binary octets for png

--MIME_boundary
Content-Type: application/pkcs7-signature
Content-Transfer-Encoding: binary
Content-ID: <http://example.org/my.hsh>

// binary octets for signature

--MIME_boundary--
        

												
										







结束语

为了运行具有 XOP 包的 Web 服务,需要事先进行计划,以确定应该如何设计应用程序,从而避免高峰时过载。应该就优化 Web 服务时应采用何种编码技术与系统管理员团队进行沟通。

您会发现解决这些问题后,您的 Web 服务应用程序优化工作变得容易得多。您可以使用 IBM Relational Web Developer for WebSphere® Software 来开发基于业务流程的 Web 服务,然后在 SOA 内部及各个 SOA 之间将其与 XOP 包一起使用。管理员会发现,解决了这些问题也使得他们的网络管理工作变得更加轻松。他们能确定在不引起系统过载的前提下,可以将多少应用程序与 XOP 包一起使用。

posted @ 2006-04-17 04:06 wsdfsdf 阅读(202) | 评论 (0)编辑 收藏

在企业级 SOA 中使用 Web 服务,第 6 部分: 使用 WebSphere Application Server 平衡 Web 服务应用程序的负载

您希望了解 SOA 内服务器间 Web 服务应用程序的负载平衡么?在本文中,Judith M. Myerson 与我们一起探讨了用户在高峰流量期间所需求的快速响应的重要性,并且列举了一些负载平衡技术的示例。此外,她还与我们一起探讨了负载平衡工具——WebSphere® Application Server 和 WebSphere Edge Server,开发人员、系统管理员和网络管理员可以使用这些工具在服务器间平衡 Web 服务应用程序的负载,从而确保网络在高峰流量期间保持高性能、高可靠性和高可用性。

引言

在本系列第 4 部分“使用 Rational 开发工具构建 SOA 中间件应用程序”(请参阅参考资料)一文中,我讲解了如何使用 Web 开发工具创建 SOA 中间件应用程序。在本系列第 5 部分“使用 WebSphere Business Integration 工具优化 Web 服务应用程序”(请参阅参考资料)一文中,我讲解了如何使用业务流程工具集成和优化 Web 服务应用程序。在第 5 部分,我还讲解了减少 Web 请求数量、执行时间、访问时间和带宽量的方法,这些方法都可以用来优化 Web 服务应用程序。

在本文中,我介绍了负载应用程序的某些问题如何影响了 Web 服务应用程序间的互操作方式。文中包含了一个流量瓶颈的实例,导致该瓶颈的原因是:在特定期间有太多的访问者基于业务流程发送了太多的请求到一个 Web 服务应用程序。接着又讲了如何从负载平衡技术中获益。

请记住,Web 请求与访问者的请求是不同的。Web 请求的数量不仅依赖于访问者的请求数量,也依赖于由访问者请求生成的、已优化的 Web 请求的类型和内容。







响应迟缓

为了更好地认清这种差异,请看接下来的这个实例。如果某个访问者在将请求通过 Web 服务发送到一台服务器后等了很久才得到回复,那么该访问者很可能为了获得更快的响应时间而转向使用另一种 Web 服务或网站。该始发端 Web 服务将处理传入的访问者请求,以生成并优化传输到目标 Web 服务的 Web 请求。

始发端 Web 服务响应迟缓,可能表明目标服务器繁忙,或是没有足够的系统空间来处理多个访问者请求(多线程处理)。处理这种负载问题的方法之一是平衡服务器间的负载,这样访问者就不会为得到答复而等待太久。这种技术称为负载平衡。







加快响应

平衡服务器间负载要优于外包 Web 服务,负载平衡技术不仅全面考虑到增加的服务器容量、改善的站点设计和使用独立磁盘冗余阵列(Redundant Array of Independent Disk,RAID)的能力,而且也提供了处理预期高峰流量所需的带宽。在服务器的长期运行中,它们会消耗更多的服务器资源。通过使用负载平衡技术,我们有更好的机会来提高服务器的性能和可靠性,并同时减少带宽量、执行时间和访问时间(假定服务器中包含故障转移机制 )。

由于上述原因,负载平衡技术成为了大多数公司在处理大流量时(尤其在高峰流量期间经受服务器停滞时)的首选技术。这些公司希望更快地响应用户需求,从而在较短的时间内完成更多的工作任务。

您可以将负载路由到域名系统中不同的服务器主机地址,或者将一台服务器要处理的工作总量分摊到两台或多台服务器上。您不仅需要使用另外一台服务器智能化地选择出将工作分配给哪台服务器,还需要使用故障转移和备份服务将这些服务器联合到一起,以防某台服务器出现故障(尤其当服务器集散于不同地理位置时)。







类比购物车

作为一个类比,请把负载平衡服务器看为超市的 4 个付款台。让我们瞧瞧超市是如何在 4 个付款台间实现“负载平衡”的。

假设您排在 1 号付款台前的长队中,您可以粗略地估算出大概需要多久时间才能排到自己付款。如果您发现这条队伍移动缓慢,而且此时看到一名收银员走向 4 号付款台打开机器准备工作,那您一定会推着购物车快速地跑到 4 号付款台(请参见图 1)。

接着又有一名收银员打开了 3 号付款台,并挥手示意第一队排在您前面的购物者到 3 号付款台排队。这些购物者当然会移到 3 号付款台。2 号付款台此时仍然保持关闭状态。


图 1. 购物车的负载平衡
购物车的负载平衡






减少服务时间

让我们看看另一种负载平衡方式。如果您推着一辆满满的购物车,里面装着您一家十口一个月的杂货,您可能希望将货物分给多个付款台结帐。在没有家人陪同的情况下,这种想法尤为强烈。您可以将购物车中的物品分为几份,然后分从几个清闲可用的付款台结帐,这样就减少了付款时间。

虽然这在实际生活中是不可能的,但您可以使用负载平衡器实现类似的目的,它能把在线购物车(Web 服务应用程序)的请求从繁忙的服务器上转移到其他清闲可用的服务器上(请参见图 2)。如果其他服务器通过优化可以满足服务需求,就没必要再启用新服务器。


图 2. 在线购物车请求的负载平衡
在线购物车请求的负载平衡






问题

您该怎样解决该问题?更快地跑到付款台前(增加带宽)?增加付款台数量(增加服务器容量)?找其他人帮您买(外包)?这些方法都不适用。

请您回答以下这些问题:

  • 您将要平衡哪种应用程序的负载?
  • 在整个分布式网络中,该应用程序是否为长期运行?
  • 一台服务器或一个服务器集群超时接收了多少请求?
  • 在高峰流量期间,需要多少流量和带宽量?
  • 怎样利用服务器平衡应用程序负载?
  • 在不同时段,预计有多少访问者?
  • 访问者最多能够发送多少请求?

在您答完这些问题后,请与一名网络管理员或系统管理员检查和整理这些答案,以促进相互了解。然后使用某种算法、技术或工具开发一个负载平衡程序,实现将繁忙的服务器上的访问者和 Web 请求重定向到清闲可用的服务器上。







负载平衡技术

负载平衡技术包括以下几种:

  • 简单路由
  • DNS Round Robin
  • 复杂算法
  • 智能路由

由于实际工作中的流量需要按优先级处理,所以在开发 Web 服务应用程序时,请考虑上述技术中的最后两种技术。因为包含要求更快响应的服务器和访问者的分布式网络正在不断地扩张。由于前两种技术不需要按流量的优先级进行处理,所以我们将不在有关流量瓶颈的问题中讨论它们。

当您使用复杂算法时,分发请求是基于服务器性能、服务器使用的硬件种类和处理客户优先级的方法等等。这表明,最快的服务器将获得更多具有最高客户优先级的请求。智能路由基于请求的内容和(在始发端服务器发生故障时)流量重定向到另一台服务器的方式。







基于服务器的软件

虽然您可以使用软件、硬件或两者来达到负载平衡,但您最好还是在应用程序服务器集群上使用基于服务器的软件。基于服务器的软件的价格要远低于基于硬件的专用服务器。硬件升级的价格要远高于相应软件升级的价格。

在将基于服务器的软件添加到网络中之前,请检查网络是否配置正确,负载平衡器是否“灵活”。“灵活”在这里的解释是:虽然负载平衡器可能已为目前的 Web 服务应用程序做好了充分的配置,但它还必须能够通过扩展满足未来应用程序的需求。

IBM WebSphere Application Server 就是一款基于服务器的软件,它在负载平衡和故障转移中同时使用了复杂算法和智能路由。它的负载平衡器有能力根据 Web 服务应用程序的未来需求进行扩展。您需要为负载平衡建立一个服务器集群,并测试其故障转移机制(请参阅参考资料)。

面向多平台的 WebSphere Edge Server V2.0 是另一款基于服务器的软件。它专门设计用于改善服务器选择、负载优化和容错。它还附带了网络地址转换(Network Address Translation,NAT)和用于 Cisco CSS 交换机的 WebSphere Edge Server Consultant,并且支持内核级的基于内容路由(Content Based Routing,CSR)。(请参阅参考资料







结束语

Web 服务应用程序的负载平衡需要提早计划,以确定在高峰流量期间如何在服务器间平衡负载。在设计 Web 服务的过程中,请多与系统管理员交流负载平衡技术相关的问题。

解决这些问题能使您更容易地创建负载平衡的 Web 服务应用程序。您可以在 SOA 内部(或跨 SOA)基于业务流程开发 Web 服务和平衡 Web 服务负载。解决这些问题还能使管理员更容易地平衡 Web 服务应用程序的负载,并确定在 SOA 中使用哪种负载平衡方法,以及能够平衡多少应用程序的负载。

posted @ 2006-04-17 04:04 wsdfsdf 阅读(140) | 评论 (0)编辑 收藏

架构设计师与SOA, 第 1 部分

SOA(Service-Oriented Architecture),即面向服务的架构,这是最近一两年出现在各种技术期刊上最多的词汇了。现在有很多架构设计师和设计开发人员简单的把SOA和Web Services技术等同起来,认为SOA就是Web Service的一种实现。本质上来说,SOA体现的是一种新的系统架构,SOA的出现,将为整个企业级软件架构设计带来巨大的影响。本系列两部分文章将根据作者自己的理解来帮助大家分析和了解什么是SOA架构,SOA将怎样对企业系统架构设计带来积极的影响,什么是SOA架构设计师的角色,以及SOA架构师在设计SOA系统架构时有哪些应该特别注意的地方。

1. 什么是架构?什么是基于SOA的架构?

1.1 什么是架构

从架构设计师的角度来看,架构就是一套构建系统的准则。通过这套准则,我们可以把一个复杂的系统划分为一套更简单的子系统的集合,这些子系统之间应该保持相互独立,并与整个系统保持一致。而且每一个子系统还可以继续细分下去,从而构成一个复杂的企业级架构。

当一名架构设计师在构建某个企业级的软件系统时,除了要考虑这个系统的架构以及其应具有的功能行为以外,还要关注整个架构的可用性,性能问题,容错能力,可重用性,安全性,扩展性,可管理维护性,可靠性等各个相关方面。有的时候一名好的架构设计师甚至还需要考虑所构建的系统架构是否合乎美学要求。由此我们可以看到,我们衡量一个好的架构设计并不能只从功能角度出发,还要考虑很多其他的因素,对任何一个方面的欠缺考虑都有可能为整个系统的构建埋下隐患。

1.2 什么是基于SOA的架构

SOA本身就是一种面向企业级服务的系统架构,简单来说,SOA就是一种进行系统开发的新的体系架构,在基于SOA架构的系统中,具体应用程序的功能是由一些松耦合并且具有统一接口定义方式的组件(也就是service)组合构建起来的。因此,基于SOA的架构也一定是从企业的具体需求开始构建的。但是,SOA和其它企业架构的不同之处就在于SOA提供的业务灵活性。业务灵活性是指企业能对业务变更快速和有效地进行响应、并且利用业务变更来得到竞争优势的能力。对企业级架构设计师来说,创建一个业务灵活的架构意味着创建一个可以满足当前还未知的业务需求的IT架构。

利用基于SOA的系统构建方法,如图1中所示的一样,一个基于SOA架构的系统中的所有的程序功能都被封装在一些功能模块中,我们就是利用这些已经封装好的功能模块组装构建我们所需要的程序或者系统,而这些功能模块就是SOA架构中的不同的服务(services)。


图1
图1

因此,SOA架构本质上来说体现了一种复合的概念:它不仅为一个企业中商业流程的组织和实现提供了一种指导模式,同时也为具体的底层service开发提供了指导。







2. SOA架构设计师的角色

2.1 SOA架构设计师应该具备什么?

谈到SOA架构设计师的角色,我们首先要了解架构设计师应具有的能力。总体上来说,一个好的架构设计师不仅应该是一个成熟的,具有实际经验的并具有快速学习能力的人,而且他还应该具有良好的管理能力和沟通能力。只有具备了必需的能力,架构设计师才能在关键的时刻作出困难的决定,这就是一名架构设计师应该承担的责任。从角色上来看,SOA 架构师不仅会负责端到端的服务请求者和提供者的设计,并且会负责对系统中非功能服务请求的调研和表述。

对于任何一名经验丰富的架构设计师来说,不论他是采用基于传统的架构设计方法(基于J2EE架构或者.NET架构)还是采用基于SOA的架构设计方法来构建一个企业级的系统架构,具有相关商业领域的知识对于架构设计师来说都是必不可少的,架构设计师往往可以通过实际的工作经验积累以及接受相关的专项培训来获得这些商业领域的知识。除了具有相关商业领域的知识以外,一名合格的架构设计师必须具有较广泛的技术背景,这可能包括软硬件,通信,安全等各个方面的知识。但这并不是意味着要成为一名架构设计师就必须熟悉每一门具体技术的细节,架构设计师必须至少能对各种技术有一个整体上的了解,能够熟知每种技术的特点以及优缺点,只有这样架构设计师才能在特定的应用场景下正确地选择各种技术来设计企业整体架构。

2.2 什么是SOA架构设计师的职责?

那什么是企业级SOA架构设计师的具体角色呢?什么是SOA架构设计师与设计和开发人员之间的差别呢?相信这些都是使大家最容易产生迷惑的问题。举个实际的例子来说,当构建一个基于SOA架构的系统的时候,针对一个具体的 service,系统设计人员主要应该关注的是这个service能够为外部用户提供什么样的服务,也就是说系统设计人员关注的是这个service所提供的功能。而对于SOA架构设计师来说,他们更关心的可能是当有一千个用户同时调用这个 service的时候,什么会发生?也就是说架构设计师关注的应该是一些商业需求和服务级别(service-level)需求。所有的架构设计师的角色都包含了在构建一个系统的一开始就应该尽量减少可能存在的技术风险。而技术风险一般指的是一切未知的、未经证明的或未经测试所带来的风险。这些风险通常与服务级别(service-level)需求相关,偶尔也会与企业具体的业务需求相关。无论是哪种类型的风险,在项目初期设计整体系统架构的过程中更易于发掘这些风险,如果等到架构实施时再发觉这些风险,那么很可能会致使大量的开发人员等在那里,直到这些风险被妥善解决。如果进一步的细化,我们可以看到SOA架构设计师的主要任务包括对整个系统解决方案轮廓的构建,需求分析,对体系结构的整体决策,相关组件建模,相关操作建模,系统组件的逻辑和物理布局设计。

作为SOA架构设计师必须要能够领导整个开发团队,这样才能保证设计和开发人员是按照构建好的系统架构来开发整个系统的,这一点十分的重要。这就要求一名架构设计师不仅要有很好的技术洞察力,同时还要具有一定的项目管理和项目实施的能力。在系统开发的过程中,架构设计师必须要有良好的沟通和表达能力,这就体现在由架构设计师构建的系统模型是否具有很好的可读性和易理解性。如果由架构设计师构造出的系统模型不是很清晰的话,就可能会影响设计和开发人员对于整个系统架构的理解。为了避免这种情况的出现,定期由架构设计师主持的开发团队内部讨论是十分重要的。







3. 构建SOA架构时应该注意的问题

3.1 原有系统架构中的集成需求

当架构师基于SOA来构建一个企业级的系统架构的时候,一定要注意对原有系统架构中的集成需求进行细致的分析和整理。我们都知道,面向服务的体系结构是当前及未来应用程序系统开发的重点,面向服务的体系结构本质上来说是一种具有特殊性质的体系结构,它由具有互操作性和位置透明的组件集成构建并互连而成。基于SOA的企业系统架构通常都是在现有系统架构投资的基础上发展起来的,我们并不需要彻底重新开发全部的子系统;SOA可以通过利用当前系统已有的资源(开发人员、软件语言、硬件平台、数据库和应用程序)来重复利用系统中现有的系统和资源。SOA是一种可适应的、灵活的体系结构类型,基于SOA构建的系统架构可以在系统的开发和维护中缩短产品上市时间,因而可以降低企业系统开发的成本和风险。因此,当SOA架构师遇到一个十分复杂的企业系统时,首先考虑的应该是如何重用已有的投资而不是替换遗留系统,因为如果考虑到有限的预算,整体系统替换的成本是十分高昂的。

当SOA架构师分析原有系统中的集成需求的时候,不应该只限定为基于组件构建的已有应用程序的集成,真正的集成比这要宽泛得多。在分析和评估一个已有系统体系结构的集成需求时,我们必须考虑一些更加具体的集成的类型,这主要包括以下几个方面:应用程序集成的需求,终端用户界面集成的需求,流程集成的需求以及已有系统信息集成的需求。当SOA架构师分析和评估现有系统中所有可能的集成需求的时候,我们可以发现实际上所有集成方式在任何种类的企业中都有一定程度的体现。针对不同的企业类型,这些集成方式可能是简化的,或者没有明确地进行定义的。因而,SOA架构师在着手设计新的体系结构框架时,必须要全面的考虑所有可能的集成需求。例如,在一些类型的企业系统环境中可能只有很少的数据源类型,因此,系统中对消息集成的需求就可能会很简单,但在一些特定的系统中,例如航运系统中的EDI(Electronic Data Interchange 电子数据交换)系统,会有大量的电子数据交换处理的需求,因此也就会存在很多不同的数据源类型,在这种情况下整个系统对于消息数据的集成需求就会比较复杂。因此,如果SOA架构师希望所构建的系统架构能够随着企业的成长和变化成功地继续得以保持,则整个系统构架中的集成功能就应该由服务提供,而不是由特定的应用程序来完成。

3.2 服务粒度的控制以及无状态服务的设计

当SOA架构师构建一个企业级的SOA系统架构的时候,关于系统中最重要的元素,也就是SOA系统中的服务的构建有两点需要特别注意的地方:首先是对于服务粒度的控制,另外就是对于无状态服务的设计。

服务粒度的控制

SOA系统中的服务粒度的控制是一项十分重要的设计任务。通常来说,对于将暴露在整个系统外部的服务推荐使用粗粒度的接口,而相对较细粒度的服务接口通常用于企业系统架构的内部。从技术上讲,粗粒度的服务接口可能是一个特定服务的完整执行,而细粒度的服务接口可能是实现这个粗粒度服务接口的具体的内部操作。 举个例子来说,对于一个基于SOA架构的网上商店来说,粗粒度的服务可能就是暴露给外部用户使用的提交购买表单的操作,而系统内部的细粒度的服务可能就是实现这个提交购买表单服务的一系列的内部服务,比如说创建购买记录,设置客户地址,更新数据库等一系列的操作。虽然细粒度的接口能为服务请求者提供了更加细化和更多的灵活性,但同时也意味着引入较难控制的交互模式易变性,也就是说服务的交互模式可能随着不同的服务请求者而不同。如果我们暴露这些易于变化的服务接口给系统的外部用户,就可能造成外部服务请求者难于支持不断变化的服务提供者所暴露的细粒度服务接口。而粗粒度服务接口保证了服务请求者将以一致的方式使用系统中所暴露出的服务。虽然面向服务的体系结构(SOA)并不强制要求一定要使用粗粒度的服务接口,但是建议使用它们作为外部集成的接口。通常架构设计师可以使用BPEL来创建由细粒度操作组成的业务流程的粗粒度的服务接口。

无状态服务的设计

SOA系统架构中的具体服务应该都是独立的、自包含的请求,在实现这些服务的时候不需要前一个请求的状态,也就是说服务不应该依赖于其他服务的上下文和状态,即SOA架构中的服务应该是无状态的服务。当某一个服务需要依赖时,我们最好把它定义成具体的业务流程(BPEL)。在服务的具体实现机制上,我们可以通过使用 EJB 组件来实现粗粒度的服务。我们通常会利用无状态的Session Bean来实现具体的服务,如果基于Web Service技术,我们就可以将无状态的Session Bean暴露为外部用户可以调用的到的Web服务,也就是把传统的Session Facade模型转化为了 EJB 的Web服务端点,这样,我们就可以向 Web 服务客户提供粗粒度的服务。

如果我们要在 J2EE的环境下(基于WebSphere)构建Web服务,Web 服务客户可以通过两种方式访问 J2EE 应用程序。客户可以访问用 JAX-RPC API 创建的 Web 服务(使用 Servlet 来实现);Web 服务客户也可以通过 EJB的服务端点接口访问无状态的Session Bean,但Web 服务客户不能访问其他类型的企业Bean,如有状态的Session Bean,实体Bean和消息驱动Bean。后一种选择(公开无状态 EJB 组件作为 Web 服务)有很多优势,基于已有的EJB组件,我们可以利用现有的业务逻辑和流程。在许多企业中,现有的业务逻辑可能已经使用 EJB 组件编写,通过 Web 服务公开它可能是实现从外界访问这些服务的最佳选择。EJB 端点是一种很好的选择,因为它使业务逻辑和端点位于同一层上。另外EJB容器会自动提供对并发的支持,作为无状态Session Bean实现的 EJB 服务端点不必担心多线程访问,因为 EJB 容器必须串行化对无状态会话 bean 任何特定实例的请求。 由于EJB容器都会提供对于Security和Transaction的支持,因此Bean的开发人员可以不需要编写安全代码以及事务处理代码。 性能问题对于Web服务来说一直都是一个问题,由于几乎所有 EJB 容器都提供了对无状态会话 Bean 群集的支持以及对无状态Session Bean 池与资源管理的支持,因此当负载增加时,可以向群集中增加机器,Web 服务请求可以定向到这些不同的服务器,同时由于无状态Session Bean 池改进了资源利用和内存管理,使 Web 服务能够有效地响应多个客户请求。由此我们可以看到,通过把 Web 服务模型化为 EJB 端点,可以使服务具有更强的可伸缩性,并增强了系统整体的可靠性。







4. 结束语

本文简要介绍了有关架构设计师以及SOA架构的知识,分析了SOA架构师在设计SOA系统架构时有哪些应该特别注意的地方。

本文的第二部分将向您介绍在构建基于SOA架构的企业系统时应该怎样保证所构建的系统架构能够满足系统中不同的服务级别需求。从架构设计师的角度,SOA是一种新的设计模式,方法学。因此,SOA本身涵盖了很多的内容,也触及到了系统整体架构设计、实现、维护等各个方面。本文的内容只是涉及到了有关于架构方面的一部分内容,希望能对广大的SOA系统开发设计人员起到一定的帮助作用。

posted @ 2006-04-17 04:03 wsdfsdf 阅读(142) | 评论 (0)编辑 收藏

仅列出标题
共19页: First 10 11 12 13 14 15 16 17 18 Last