SOA(Service-Oriented Architecture)可以给我们带来的好处非常多: 提高代码的重用性、降低集成成本、更加安全,同时带给企业更大的灵活性。然而,要真正获得这些好处,除了在编码时要保证程序质量外,更重要的是人们必须在开发和部署策略和流程上做更多的工作。
听起来也许与我们的直觉不太一致,SOA相比其他的开发模式,组织必须更加强调纪律和原则。直觉告诉我们: 灵活往往意味着更少的规则或者说约束,然而,实事并非如此。
想想今天的汽车产业: 我们之所以能够在为福特车购买轮胎时候,可以不到福特的专卖店里去购买福特牌的轮胎,正是得益于标准化,各种规范和规则给了我们很大的灵活性,保证我们可以在其他的地方购买轮胎,而根本不用担心它们与自己的汽车不配套。
对SOA而言,也正是标准化使其具有跨组织的特性。SOA的实现并非易事,为了确保IT人员不至于被其复杂性弄得不知所措,业内推出了多种支持软件,包括注册软件、知识库和运行时的治理系统等,这些软件将帮助组织贯彻各种规定的执行。然而,实施SOA需要的远不是使用SOA工具这么简单,它需要IT部门甚至整个组织对软件系统的设计进行认真地分析,制定设计规范。
SOA治理
设计规范定义各种接口,统一开发思路,同时描述各子系统功能划分,其基本目标是提高系统的模块化程度,以及基于服务API提供定义良好的抽象模型。在确定设计规范的过程中,必须与有关人员进行沟通,还应该对此过程进行记录,而且一旦确定就应该严格执行。
设计规范及其执行通常被称为“策略(Policies)”,SOA策略的制定以及执行过程被称为SOA治理(SOA Governance)。治理与软件架构是相关的,而且共同发挥作用: 采用相同的方式进行程序编码、确定标准、进行治理为建立最合理的软件架构提供了基础保证,而SOA治理则为软件系统的架构师和设计人员提供所需要的环境。
“假如没有SOA治理,IT人员将会被各种版本Web服务的‘DLL Hell’所折磨,”SOA的注册软件提供商Systinet的首席软件架构师兼创始人Roman Stank说,“SOA治理保证软件的一致性和可猜测性,它保证一个大的应用可以通过一个个小的系统组建而成。”
假如组织中已经有了一个非常良好IT治理,这将为SOA治理提供一个非常好的基础。反之,假如组织过去没有建立正式的治理规则,在向SOA迁移的过程中,可能需要进行更多的改变,包括如何治理开发过程和运转流程等。
“假如没有建立适当的治理模型,大多数组织可能会失败得很惨。”Buton集团副总裁Anne Thomas Manes说,“SOA是一种行为,它不是你能够买得到东西,你必须改变自己的行为方式才能有效果。”
关于SOA治理的说法往往能让IT人员很矛盾。开发人员,非凡那些具有创新意识的开发人员就非常担心这些策略和规则会束缚他们。更糟糕的是,根据他们的经验,很多策略往往是不现实的,他们担心治理会导致瓶颈的出现,会带来一些不实际的、过于理想化的东西。不过,只要小心,建立一种支持面向服务架构的治理流程,并且给那些遵守这些流程的人以明显的回报,是完全可能的。
确定合适的策略
Systinet的Stank认为,有效的治理依靠确定策略的过程,也就是采用何种方式做出决定、为此进行沟通并且执行这种决定的方式。
一个好的SOA治理过程应该类似于市民大会,而不是法令的颁布。“在SOA治理过程中,组织最轻易犯的错误就是沟通和协调不足。”Burton集团的Manes说。
做出决定可以采用很多方式,但最终这还是一个社会性的过程,必须基于组织的文化背景。
“像LinkedIn(这是一种类似俱乐部的交友网站,加入者可以在这里结交很多爱好爱好相同的人,也可以熟悉生意伙伴——译者注)这样的社会性软件系统的产生,有助于SOA治理过程得到更多人的参与,”Infravio市场部副总裁Miko Matsumura说,“人是具有社会性的,这一观点正在被普遍接受。因此,SOA治理必须按照组织动力学和人在组织中如何表现来综合最佳实践。”
某大型金融服务结构的企业架构师描述了缺少沟通会如何给治理带来困难,他说: “作为企业IT治理的一部分,假如在企业中针对SOA项目建立了一种正式的评估体系后,就指望那些根本不了解这些策略的开发人员会遵守和执行,是不现实的。这些策略必须落到纸上,而且让他们了解,还要说清楚对他们的要求。因此,假如你制定出的策略像纳税代码那么复杂或者还要复杂的话,其结果一定不会太好。”
有些组织在企业软件架构组中建立了卓越中心(Center of Excellence)或者是其他类似的小组,专门提供资源和指导,充当企业最佳实践的知识库,他们负责使用支持SOA治理流程的各种工具。
加拿大消费者忠诚计划供给商Andre Hebert就把SOA治理融入它们的日常经营过程中。“我们建立了软件架构的路线图,遵循它已成为常识。任何时候提出新项目,或者内外部需要什么新功能,我们都会让架构委员会来把一下关,” Andre Hebert技术和电子商务副总裁说,“SOA治理已经与企业天天的活动密不可分了。”
简而言之,治理流程应该让人们更易于用正确的方式做事,而难于用错误的方式做事。“建的是学校,而不是监狱。”Mindreef公司CTO Mark Ericson说,“目的是帮助人们遵循最佳实践,而不是约束他们。”
从标准起步
策略可以影响服务生命周期的每一个环节,包括设计、部署和运行。例如,一个设计策略可能是规定企业的命名空间,一个部署策略可能要求生产级的服务满足WS-I(Web Services InterOperability)组织的某些规定,而一个运行策略可能要求所有部署的服务必须使用企业安全基础设施进行治理。
不过,对大多数组织而言,从各种标准开始制定策略是一个不错办法。究竟,正是这些标准让SOA成为可能。每个企业都要决定它们在什么时候、什么地方使用什么标准。例如,您的企业需要WS-Security和WS-Policy标准吗?在什么样的情况下需要?
你可以在各个策略中分别采用对应的标准,但一个更好的办法是建立一个交互性框架(Interoperability Framework,IF)。建立IF是一种非凡的策略,在IF中可以列出整个组织范围内使用的全部标准,并指出在什么地方使用,以及某个决议所处的状态: 批准(ApPRoved)、实施(De facto)、刚刚形成(Emerging)、保持(Sustain)、将废弃(Sunset),或者处于酝酿之中。
上述状态本身的意义比较清楚,这里只非凡对保持(Sustain)和将废弃(Sunset)做一些说明。“保持(Sustain)”的意思是,虽然组织已经决定在相应的领域采用其他标准,然而旧的标准也还可以使用。“将废弃(Sunset)”意味着,开发人员应该尽快地从这些标准转向更实用的标准。
IF可以分别跟踪各个策略在标准上的快速变化,使得它们易于被治理。总体而言,IF是一个非常好的起点,究竟在标准上达成一致是最轻易的一项策略。
充分利用SOA治理资产
治理流程会产生策略、xml规范、WSDL文档、各种文件和各种其他的东西,它们大都分布在组织内的很多地方。有效的交流意味着不仅仅是将这些东西E-mail给别人或者把它们发不到网站上。为了提高可用性,治理的内容应该是可搜索、被版本化的,准确地说就是轻易被借鉴和参考的。而且,其中大部分的内容还应该以一种电脑可以动态查找或绑定的格式保存。
Registry(注册)软件是一种基本工具,除了保证一些要害的治理活动自动进行外,组织也用它们来对治理的资料进行治理或者就这些资料进行交流。Registry(注册)工具是服务的引用中心或者是系统的记录中心。可以把它设想成这样的地方: 组织内的供给者在这里把服务广告出去,而使用者则在这里找到它们所需要的服务——这是保证服务的可用性、版本化,以及符合内外部的各种需求的一个控制点。
有些供给商提供一种称为“Repository-Registry”的工具软件,这些软件可以用来保存服务所需的WSDL文档以外的元数据。因为Repository和Registry软件对于开发流程非常重要,所以应该采用那些能和组织的开发环境紧密集成的软件。例如,假如你采用Eclipse开发环境,就应该选择那些有Eclipse插件的Registry软件。
Registry提供API接口,应用程序可以在运行时找到所需的服务或者与策略保持动态的联系。例如,附带的元数据可以告诉服务的消费者,该服务需要什么样的安全策略,从而使服务的客户端能够动态地进行调整以适应服务的新要求。
假如运行策略能够在Web服务治理系统 (Web Services Management,WSM)表示,效率将是最高的,Actional、AmberPonit、Blue Titan以及其他的SOA软件供给商都提供类似的产品。大多数WSM产品可以保证运行时SOAP包满足某些条件。例如,WSM可以保证某些服务必须采用一种专门的安全协议,或者它们必须被封装在符合某种非凡规范的XML文档中。
这样的WSM系统是最理想的: 它不仅让人们治理策略、进行版本化,以及在设计和运行时发现策略,而且还能提高策略的重用性。同时,能独立地为某个非凡的服务制定和治理策略,这一特性有助于充分利用现有的策略资产。
一般而言,企业应该尽可能地实现治理流程的自动化。这需要企业在人力、组织保证和工具上进行投资,从而为企业实施SOA创造条件。假如执行得当,治理流程和相关的基础设施很可能是企业在部署SOA项目时惟一需要集中的要素。
规则的执行贯穿到设计到运行的整个过程
治理策略(Governance Polices)包括规则的制定和执行。规则的执行贯穿到设计到运行的整个过程,而运行阶段除了涉及到服务的提供者外,还涉及到服务的消费者。
执行是要害
假如没有人监督实施,各种建筑规范本身并不能保证大楼的安全和舒适。与此类似,除非得到贯彻执行,否则,SOA策略就一文不值。
有些策略可以在WSM中形成规则,或者单独开发系统,这样可以保证得到自动执行。但也有些策略主要用于改变和规范人们的行为,如规定在生产级的应用中使用的服务必须在生产注册中心进行登记,就难于保证它被自动执行。
企业的项目治理中心经常是执行策略的“一站式”机构。项目经理可以指导项目符合各种规定,同时不给项目带来太多的负担。其他办法还有在进行资金投入之前,由SOA治理小组对项目进行评估。
最重要的是,SOA策略的目标需要和经济上的激励措施相结合。否则,要满足SOA的要求、支持服务很可能会成为一个火药桶。“在现实生活中,开发部门经常因为面临资金和开发时间的压力而不愿意或者不去遵循SOA治理的要求。因此,没有一个有效的治理流程,SOA项目的部署就很难顺利进行,非凡是在跨部门时,”MIC的首席架构师Bob Laird说,“假如组织中有些部门不支持SOA,SOA的优势就很难发挥出来。”
SOA策略的执行还应该根据反馈进行调整。假如发现某个服务或者某个流程不符合要求,需要对此进行修改。另一方面,不符合要求也有可能表明某个策略过于严格或者表述得不是很清楚。应该确保反馈流程顺畅,这有助于对策略进行调整和改善。
同样,无论策略考虑得多么周全,有时候开发人员为了组织利益的最大化在执行策略时还是会有例外发生。应该保证每个策略都有一个提出例外和批准例外的规定流程。通常会依据角色,制定一个策略负责人,他(她)有权批准例外。
拟定内部合同
策略不应该非常宽泛,而应该是具体针对服务的各种规则,因而最好用某种形式的合同来表述。这听起来有些希奇,在你的组织中一个部门和另一个部门订立合同。然而,这些合同可以保证提供者交付的是服务,而不仅仅是程序代码。
“合同把消费者(Consumer)和生产者(ProdUCer)的生命周期联系起来,”Systinet的Stanek解释说,“合同是描述双方需求的一个参考点。”合同不仅仅是服务级别的协议,它可以约定消费者的行为,从而让服务的提供者制定开发计划。其目的是让生产者对消费者的需求有一定了解。
合同对双方同意遵守的策略进行具体描述。尽管在合同的表述上目前没有标准,不过不妨参考用“金、银、铜”来定义服务的级别,还可以参考一些模板来映射概念和制定的策略。这里的合同与其说是法律文书,还不如说是支持消费者和生产者进行交互的约定。
尽早着手
在SPA项目早期治理很轻易被忽略。这在SOA项目的试验阶段影响不大,但随着服务开始进入生产阶段,情形就会大不一样。事实上,很多组织不是从一开始就考虑到治理,而是到事情发展到不可收拾了才想到它。
SOA治理始于人们对治理的美好期待,而要真正实现人们心中的目标需要方方面面人员的共同努力,包括设计者、编码者和服务的使用者,不仅涉及开发人员,也涉及IT治理者和业务部门的领导。无论如何,参与者对SOA的认可和支持是目标达成的基础和前提。
AmberPoint产品战略副总裁Ed Horst认为,企业应该尽早建立治理的基础设施。“尽可能早地引入治理、注册和安全的工具,哪怕只有一点点,这对养成良好的习惯非常重要。一旦在这些方面养成了坏习惯,随着SOA项目规模的扩大,将会大大增添治理的复杂性。比如,假如没有部署治理系统,开发人员就可能把治理逻辑硬编码到Web服务中,这要花时间。更重要的是,当他们在真正的治理系统下部署SOA项目时,也不知道如何获得治理信息。”