面向服務架構(SOA)的原則

       Web service已經不再是新婚的娘子。 众多企业都已经创建各种实验性Web Services 项目,事实证明,这项新兴的分布式计算技术确实能够降低集成和开发的成本。眾多企業都已經創建各種實驗性Web Services項目,事實證明,這項新興的分佈式計算技術確實能夠降低集成和開發的成本。 另外,一些关键的Web Services标准纷纷制定,强安全(robust security)和管理方面的产品也陆续问世。另外,一些關鍵的Web Services標準紛紛制定,強安全(robust security)和管理方面的產品也陸續問世。 对于志向远大的企业来说,他们已经在考虑下一步了。對於志向遠大的企業來說,他們已經在考慮下一步了。

对大多数公司来说,下一步要考虑的不再是点对点的应用,而是Web services在企业间以及业务伙伴间更为宽广的应用。對大多數公司來說,下一步要考慮的不再是點對點的應用,而是Web services在企業間以及業務夥伴間更為寬廣的應用。 这种技术的变迁需要更松散耦合、面向基于标准的服务的架构。這種技術的變遷需要更鬆散耦合、面向基於標準的服務的架構。 这样一个架构要求对IT在组织中的角色有新的观点和认识,而不仅仅是一种实现方法。這樣一個架構要求對IT在組織中的角色有新的觀點和認識,而不僅僅是一種實現方法。 通过对业务的敏捷反应,企业可以得到实实在在的回报,而要达到这一点,面向服务架构设计师的角色非常关键。通過對業務的敏捷反應,企業可以得到實實在在的回報,而要達到這一點,面向服務架構設計師的角色非常關鍵。 除此之外,潜在的回报更是不可胜数-分布计算技术能够保证对业务需求足够灵活的反应,而这种业务上的敏捷正是各公司梦寐以求而目前还遥不可及的。除此之外,潛在的回報更是不可勝數-分佈計算技術能夠保證對業務需求足夠靈活的反應,而這種業務上的敏捷正是各公司夢寐以求而目前還遙不可及的。

分布式计算将网络上分布的软件资源看作是各种服务。分佈式計算將網絡上分佈的軟件資源看作是各種服務。 面向服务架构是一种不错的解决方案。面向服務架構是一種不錯的解決方案。 但这种架构不是什么新思想;CORBADCOM就很类似,但是,这些过去的面向服务架构都受到一些难题的困扰:首先,它们是紧密耦合的,这就意味着如分布计算连接的两端都必须遵循同样API的约束。但這種架構不是什麼新思想;CORBADCOM就很類似,但是,這些過去的面向服務架構都受到一些難題的困擾:首先,它們是緊密耦合的,這就意味著如分佈計算連接的兩端都必須遵循同樣API的約束。 打比方说,如果一个COM对象的代码有了更改,那么访问该对象的代码也必须作出相应更改。打比方說,如果一個COM對象的代碼有了更改,那麼訪問該對象的代碼也必須作出相應更改。 其二,这些面向服务架构受到厂商的约束。其二,這些面向服務架構受到廠商的約束。 Microsoft控制DCOM自不必说,CORBA也只是一个伪装的标准化努力,事实上,实现一个CORBA架构,经常都是在某个厂商对规范的实现上进行工作。 Microsoft控制DCOM自不必說,CORBA也只是一個偽裝的標準化努力,事實上,實現一個CORBA架構,經常都是在某個廠商對規範的實現上進行工作。

Web services是在改进DCOMCORBA缺点上的努力。 Web services是在改進DCOMCORBA缺點上的努力。 今天应用Web services的面向服务架构与过去不同的特点就在于它们是基于标准以及松散耦合的。今天應用Web services的面向服務架構與過去不同的特點就在於它們是基於標準以及鬆散耦合的。 广泛接受的标准(如XMLSOAP)提供了在各不同厂商解决方案之间的交互性。廣泛接受的標準(如XMLSOAP)提供了在各不同廠商解決方案之間的交互性。 而松散耦合将分布计算中的参与者隔离开来,交互两边某一方的改动并不会影响到另一方。而鬆散耦合將分佈計算中的參與者隔離開來,交互兩邊某一方的改動並不會影響到另一方。 这两者的结合意味着公司可以实现某些Web services而不用对使用这些Web services的客户端的知识有任何了解。這兩者的結合意味著公司可以實現某些Web services而不用對使用這些Web services的客戶端的知識有任何了解。 我们将这种基于标准的、松散耦合的面向服务的架构简称为SOA我們將這種基於標準的、鬆散耦合的面向服務的架構簡稱為SOA

SOA的强大和灵活性将给企业带来巨大的好处。 SOA的強大和靈活性將給企業帶來巨大的好處。 如果某组织将其IT架构抽象出来,将其功能以粗粒度的服务形式表示出来,每种服务都清晰地表示其业务价值,那么,这些服务的顾客(可能在公司内部,也可能是公司的某个业务伙伴)就可以得到这些服务,而不必考虑其后台实现的具体技术。如果某組織將其IT架構抽像出來,將其功能以粗粒度的服務形式表示出來,每種服務都清晰地表示其業務價值,那麼,這些服務的顧客(可能在公司內部,也可能是公司的某個業務夥伴)就可以得到這些服務,而不必考慮其後台實現的具體技術。 更进一步,如果顾客能够发现并绑定可用的服务,那么在这些服务背后的IT系统能够提供更大的灵活性。更進一步,如果顧客能夠發現並綁定可用的服務,那麼在這些服務背後的IT系統能夠提供更大的靈活性。
但是,要得到种强大和灵活性,需要有一种实现架构的新方法,这是一项艰巨的任务。但是,要得到種強大和靈活性,需要有一種實現架構的新方法,這是一項艱鉅的任務。 企业架构设计师必须要变成面向服务的架构设计师,不仅要理解SOA,还要理解SOA的实践。企業架構設計師必須要變成面向服務的架構設計師,不僅要理解SOA,還要理解SOA的實踐。 在架构实践和最后得到的架构结果之间的区别非常微妙,也非常关键。在架構實踐和最後得到的架構結果之間的區別非常微妙,也非常關鍵。 本文将讨论SOA的实践,即:面向架构的设计师在构建SOA时必须要做的事情。本文將討論SOA的實踐,即:面向架構的設計師在構建SOA時必須要做的事情。

SOA的原则 SOA的原則

SOA是一种企业架构,因此,它是从企业的需求开始的。 SOA是一種企業架構,因此,它是從企業的需求開始的。 但是,SOA和其它企业架构方法的不同之处在于SOA提供的业务敏捷性。但是,SOA和其它企業架構方法的不同之處在於SOA提供的業務敏捷性。 业务敏捷性是指企业对变更快速和有效地进行响应、并且利用变更来得到竞争优势的能力。業務敏捷性是指企業對變更快速和有效地進行響應、並且利用變更來得到競爭優勢的能力。 对架构设计师来说,创建一个业务敏捷的架构意味着创建这样一个IT架构,它可以满足当前还未知的业务需求。對架構設計師來說,創建一個業務敏捷的架構意味著創建這樣一個IT架構,它可以滿足當前還未知的業務需求。

要满足这种业务敏捷性,SOA的实践必须遵循以下原则:要滿足這種業務敏捷性,SOA的實踐必須遵循以下原則:

* 业务驱动服务,服务驱动技术 *業務驅動服務,服務驅動技術

从本质上说,在抽象层次上,服务位于业务和技术中间。從本質上說,在抽象層次上,服務位於業務和技術中間。 面向服务的架构设计师一方面必须理解在业务需求和可以提供的服务之间的动态关系,另一方面,同样要理解服务与提供这些服务的底层技术之间的关系。面向服務的架構設計師一方面必須理解在業務需求和可以提供的服務之間的動態關係,另一方面,同樣要理解服務與提供這些服務的底層技術之間的關係。

* 业务敏捷是基本的业务需求 *業務敏捷是基本的業務需求

SOA考虑的是下一个抽象层次:提供响应变化需求的能力是新的元需求,而不是处理一些业务上的固定不变的需求。 SOA考慮的是下一個抽象層次:提供響應變化需求的能力是新的元需求,而不是處理一些業務上的固定不變的需求。 从硬件系统而上的整个架构都必须满足业务敏捷的需求,因为,在SOA中任何的瓶颈都会影响到整个IT环境的灵活性。從硬件系統而上的整個架構都必須滿足業務敏捷的需求,因為,在SOA中任何的瓶頸都會影響到整個IT環境的靈活性。

* 一个成功的SOA总在变化之中 *一個成功的SOA總在變化之中

SOA工作的场景,更象是一个活的生物体,而不是象传统所说的盖一栋房子 SOA工作的場景,更像是一個活的生物體,而不是像傳統所說的蓋一棟房子IT环境唯一不变的就是变化,因此面向服务架构设计师的工作永远不会结束。 IT環境唯一不變的就是變化,因此面向服務架構設計師的工作永遠不會結束。 对于习惯于盖房子的设计师来说,要转向设计一个活的生物体要求崭新的思维方式。對於習慣於蓋房子的設計師來說,要轉向設計一個活的生物體要求嶄新的思維方式。 如下文所写的,SOA的基础还是一些类似的架构准则。如下文所寫的,SOA的基礎還是一些類似的架構準則。

SOA基础 SOA基礎

IT行业有两个越来越普遍的发展方向,一个是架构方面的,一个是方法学方面的,面向服务的架构设计师可以从中有所收获。IT行業有兩個越來越普遍的發展方向,一個是架構方面的,一個是方法學方面的,面向服務的架構設計師可以從中有所收穫。 第一个就是MDA(模型驱动架构),由提出CORBAOMG模型提出。第一個就是MDA(模型驅動架構),由提出CORBAOMG模型提出。 MDA认为架构设计师首先要对待创建的系统有一个形式化的UML(也是由OMG提出)的模型。 MDA認為架構設計師首先要對待創建的系統有一個形式化的UML(也是由OMG提出)的模型。 MDA首先给出一个平台无关的模型来表示系统的功能需求和use cases,根据系统搭建的平台,架构设计师可以由这个平台无关的模型得到平台相关的模型,这些平台相关模型足够详细,以至于可以用来直接生成需要的代码。 MDA首先給出一個平台無關的模型來表示系統的功能需求和use cases,根據系統搭建的平台,架構設計師可以由這個平台無關的模型得到平台相關的模型,這些平台相關模型足夠詳細,以至於可以用來直接生成需要的代碼。

MDA的核心就在于在设计阶段系统就已经完全描述,这样,在创建系统的时候,几乎就没有错误解释的可能,模型也就可以直接生成代码。 MDA的核心就在於在設計階段系統就已經完全描述,這樣,在創建系統的時候,幾乎就沒有錯誤解釋的可能,模型也就可以直接生成代碼。 MDA有一些局限性:首先,MDA假设在创建模型之前,业务需求已经全部描述,而这一点,在当前典型的动态业务环境中几乎是不可能的。MDA有一些局限性:首先,MDA假設在創建模型之前,業務需求已經全部描述,而這一點,在當前典型的動態業務環境中幾乎是不可能的。 第二,MDA没有一个反馈机制。第二,MDA沒有一個反饋機制。 如果开发人员对模型有需要改动的地方,并没有提供给他们这么一个途径。如果開發人員對模型有需要改動的地方,並沒有提供給他們這麼一個途徑。

SOA的另一个基础是敏捷方法(AM),其中非常有名的方法是极限编程(XP)。 SOA的另一個基礎是敏捷方法(AM),其中非常有名的方法是極限編程(XP)。 XP这样的AM提供了在需求未知或者多变的环境中创建软件系统的过程。XP這樣的AM提供了在需求未知或者多變的環境中創建軟件系統的過程。 XP要求在开发团队中要有一个用户代表,他帮助书写测试来指导开发人员的日常工作。 XP要求在開發團隊中要有一個用戶代表,他幫助書寫測試來指導開發人員的日常工作。 开发团队中的所有成员都参与到设计之中,并且设计要尽量小并且非形式化。開發團隊中的所有成員都參與到設計之中,並且設計要盡量小並且非形式化。 AM的目标是仅仅创建用户想要的,而不是在一些形式化模型上耗费工作量。 AM的目標是僅僅創建用戶想要的,而不是在一些形式化模型上耗費工作量。 AM的核心思想就在于其敏捷性-处理需求变更的敏捷性。 AM的核心思想就在於其敏捷性-處理需求變更的敏捷性。 AM的主要弱点是其规模上的限制,例如,XP在一个小团队和中型项目中效果不错,但是当项目规模增大时,如果没有一个一致的清晰的计划,项目成员很难把握项目中的方方面面。 AM的主要弱點是其規模上的限制,例如,XP在一個小團隊和中型項目中效果不錯,但是當項目規模增大時,如果沒有一個一致的清晰的計劃,項目成員很難把握項目中的方方面面。

从表面看来,MDAAM似乎是相对立的-MDA假定需求是固定的,而AM恰恰相反。從表面看來,MDAAM似乎是相對立的-MDA假定需求是固定的,而AM恰恰相反。 MDA的中心是形式化的模型,而AM恰恰要避开它们。 MDA的中心是形式化的模型,而AM恰恰要避開它們。 但是,我们还是决定冒险把这些不同方法中的一些元素提取出来,放入到一个一致的架构实践中。但是,我們還是決定冒險把這些不同方法中的一些元素提取出來,放入到一個一致的架構實踐中。

SOA中有三个抽象层次,按照SOA的第一条准则:业务驱动服务、服务驱动技术。SOA中有三個抽象層次,按照SOA的第一條準則:業務驅動服務、服務驅動技術。 AM将业务模型直接和实践连接起来,表现在平台相关的模型之中。 AM將業務模型直接和實踐連接起來,表現在平台相關的模型之中。 MDA并没有把业务模型和平台无关模型分开来,而是把平台无关模型做为起点。 MDA並沒有把業務模型和平台無關模型分開來,而是把平台無關模型做為起點。 SOA必须连接这些模型,或者说抽象层次,得到单一的架构方法。 SOA必須連接這些模型,或者說抽象層次,得到單一的架構方法。 我们将从五个视图的架构实现方法来实现这个连接。我們將從五個視圖的架構實現方法來實現這個連接。

SOA的五视图实现方法 SOA的五視圖實現方法

企业架构设计师发现他们的职业非常有竞争力并且值得骄傲,因为他们要从很多方面来通盘考虑IT系统。企業架構設計師發現他們的職業非常有競爭力並且值得驕傲,因為他們要從很多方面來通盤考慮IT系統。 KruchtenRUP的开发负责人)将这些方面提取出来,在应用到SOA时,我们称为五视图实现方法(five-view approach)。 KruchtenRUP的開發負責人)將這些方面提取出來,在應用到SOA時,我們稱為五視圖實現方法(five-view approach)。

四个方框表示对一个架构的不同审视方法,分别代表不同的涉众(stakeholder)。四個方框表示對一個架構的不同審視方法,分別代表不同的涉眾(stakeholder)。 弟五个视图,use-case视图涵盖了其它视图,在架构中扮演的是一个特殊的角色。弟五個視圖,use-case視圖涵蓋了其它視圖,在架構中扮演的是一個特殊的角色。 部署视图将软件映射到底层平台和相关硬件上,是系统部署人员对架构的视图;实现视图描述了软件代码的组织,是从开发人员角度出发的视图;业务分析人员则利用过程视图进行工作,它描述的是软件系统的运行时特性。部署視圖將軟件映射到底層平台和相關硬件上,是系統部署人員對架構的視圖;實現視圖描述了軟件代碼的組織,是從開發人員角度出發的視圖;業務分析人員則利用過程視圖進行工作,它描述的是軟件系統的運行時特性。 最后,逻辑视图表示的是用户的功能需求。最後,邏輯視圖表示的是用戶的功能需求。 SOA中,面向服务的架构必须能够以use-case视图中的用例将用户连接到服务,将服务连接到底层的技术。SOA中,面向服務的架構必須能夠以use-case視圖中的用例將用戶連接到服務,將服務連接到底層的技術。

为了表示面向对象的架构是如何工作在这些视图之上,让我们将他们置于SOA元模型的上下文之中。為了表示面向對象的架構是如何工作在這些視圖之上,讓我們將他們置於SOA元模型的上下文之中。 SOA中两个领域存在重叠:由业务模型和服务模型表示的业务领域和由服务模型及平台相关模型表示的技术领域(两个领域共享服务模型)。 SOA中兩個領域存在重疊:由業務模型和服務模型表示的業務領域和由服務模型及平台相關模型表示的技術領域(兩個領域共享服務模型)。 业务用户通过逻辑视图和过程视图处理粗粒度的业务服务,根据变化的业务需求,按照需要将它们安排在过程之中。業務用戶通過邏輯視圖和過程視圖處理粗粒度的業務服務,根據變化的業務需求,按照需要將它們安排在過程之中。 另一方面,技术专家的工作是创建并维护服务和地层技术之间的抽象层。另一方面,技術專家的工作是創建並維護服務和地層技術之間的抽象層。 表示这些服务的中间模型,起到的是轴心的作用,业务以它为中心进行。表示這些服務的中間模型,起到的是軸心的作用,業務以它為中心進行。

SOA元模型从MDA中继承平台无关模型和平台相关模型,但是添加了AM和用户交互以及敏捷的反馈这两部分,后者通过椭圆之间的双向箭头来表现。 SOA元模型從MDA中繼承平台無關模型和平台相關模型,但是添加了AM和用戶交互以及敏捷的反饋這兩部分,後者通過橢圓之間的雙向箭頭來表現。 类似地,元模型通过引入由中心的服务模型提供的中间层抽象解决了AM在伸缩性方面的问题。類似地,元模型通過引入由中心的服務模型提供的中間層抽象解決了AM在伸縮性方面的問題。 这样,服务模型中的任何需求的变化,都会反映到用户每天的业务处理中。這樣,服務模型中的任何需求的變化,都會反映到用戶每天的業務處理中。 同样,由于底层技术是模型驱动的,技术专家也可以根据这些变化的需求迅速而有效地作出应变。同樣,由於底層技術是模型驅動的,技術專家也可以根據這些變化的需求迅速而有效地作出應變。

SOA实践和过去解决企业架构传统方式的不同之处就在于其对敏捷性的支持。 SOA實踐和過去解決企業架構傳統方式的不同之處就在於其對敏捷性的支持。 如前所说,SOA的第三条原则就在于它总在变化之中。如前所說,SOA的第三條原則就在於它總在變化之中。 这种恒在的变化性环境是SOA实践的基石。這種恆在的變化性環境是SOA實踐的基石。 如图所示,涉众(stakeholders,译者注:RUP中也有这个词,表示软件开发中涉及到的各种角色如:用户、设计人员、开发人员乃至测试人员等等。)在一个必需的基础上影响到整个架构的变化。如圖所示,涉眾(stakeholders,譯者註:RUP中也有這個詞,表示軟件開發中涉及到的各種角色如:用戶、設計人員、開發人員乃至測試人員等等。)在一個必需的基礎上影響到整個架構的變化。 在当技术专家在每天的日常工作中不断对变化的业务需求作出响应的这种情况下,设计阶段和运行阶段之间的界限变得模糊起来,很难清晰地分离这两个阶段。在當技術專家在每天的日常工作中不斷對變化的業務需求作出響應的這種情況下,設計階段和運行階段之間的界限變得模糊起來,很難清晰地分離這兩個階段。

剩下的部分 剩下的部分

我们已经为面向服务的架构提供了一个高层次的框架,其中MDAAM的元素帮助工具的使用者来创建和维护SOA我們已經為面向服務的架構提供了一個高層次的框架,其中MDAAM的元素幫助工具的使用者來創建和維護SOA但是,SOA中还缺少一些内容-那就是软件开发商和专业的服务组织必需提供的。但是,SOA中還缺少一些內容-那就是軟件開發商和專業的服務組織必需提供的。 理想情况下,开发商必需提供面向服务的业务流程、工作流以及服务的协调工具和服务;另外,能够以一种敏捷的、平台无关的方式充分反映业务服务的建模工具也是必须的;技术专家必须配备可以从模型中自动生成代码,并在代码变化时更新模型的工具,最后,开发商必须提供支持SOA的软件,帮助面向服务的架构设计师以一种可信并且可伸缩的方式创建位于服务和底层技术之间的抽象层次。理想情況下,開發商必需提供面向服務的業務流程、工作流以及服務的協調工具和服務;另外,能夠以一種敏捷的、平台無關的方式充分反映業務服務的建模工具也是必須的;技術專家必須配備可以從模型中自動生成代碼,並在代碼變化時更新模型的工具,最後,開發商必須提供支持SOA的軟件,幫助面向服務的架構設計師以一種可信並且可伸縮的方式創建位於服務和底層技術之間的抽象層次。 幸运的是,这方面的产品即将上市。幸運的是,這方面的產品即將上市。

另外,最重要的就是贯穿本文的自顶而下的SOA实现方法了。另外,最重要的就是貫穿本文的自頂而下的SOA實現方法了。 今天关于Web services的大部分思考都是自底而上的:这是如何创建Web services的方法,现在,我们来使用它们集成吧,对Web services技术的这种方法是伟大的第一步,因为它可以惊人地降低集成的开销,这是现在的技术管理人员最乐意见到的了。今天關於Web services的大部分思考都是自底而上的:這是如何創建Web services的方法,現在,我們來使用它們集成吧,對Web services技術的這種方法是偉大的第一步,因為它可以驚人地降低集成的開銷,這是現在的技術管理人員最樂意見到的了。 但当经济进一步发展,IT走出低谷,企业会寻求IT的帮助来提高组织战略意义上的核心价值。但當經濟進一步發展,IT走出低谷,企業會尋求IT的幫助來提高組織戰略意義上的核心價值。 使用面向服务的架构,IT可以提供给企业实现业务敏捷性的这样一个框架。使用面向服務的架構,IT可以提供給企業實現業務敏捷性的這樣一個框架。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值