技术开发 频道

企业该如何具体实施SOA?

【IT168 技术文章】

     早在SOA刚开始引起关注的时候,其目的只是为了把应用功能作为共享服务来提供。许多公司在发展过程中组建了各自的SOA架构,当然现在仍在这么做。只不过区别在于,在过去的几年里业务部门更加了解IT具有的战略价值,而IT部门也更加了解业务部门所要承受的竞争压力。因而, SOA就有可能让IT部门和业务部门之间比过去更紧密、更协调。

     业务部门需要可重新组合的一组服务,从而获得新的业务流程来支持新的产品或者服务。而SOA的作用正是发布这些服务,并提供稳定一致的框架。按照该框架,服务可得到治理并编制成应用。虽然许多SOA计划仍处在早期阶段,但提高业务反应能力的承诺却是实实在在的。我们也看到越来越多的企业正向更高级的部署阶段迈进。

     下面介绍的这些案例,就是实施SOA的典例。

     康卡斯特公司依托领域专门知识建立SOA

     你在决定要采用SOA方案时,忍不住会开始购买企业服务总线(Enterprise Service Bus,ESB)、注册中心及其他工具。康卡斯特(Comcast)公司负责应用架构和IT治理的高级经理Tom Adler说,但是这忽视了SOA的重要价值:你可以把创建及部署的应用与它们执行的业务流程结合起来。从架构入手有助于确保你有合理的框架做到这一点,无论现在还是将来需求变化时都是如此。

     一年半前,康卡斯特(Comcast)公司启动这个项目时,顶住了请来厂商的诱惑,而是请来了专家,弄清楚公司首先需要什么。而所有厂商只想把ESB卖给康卡斯特。架构方面的工作不仅仅在于确立框架,还要开始确认你在业务流程和应用方面哪些地方存在冗余。这是得到业务部门认可及支持的关键,因为这非常具体地表明了哪些地方有机会节约成本,从而有助于证明有必要对SOA基础设施和工具进行投入,还能表明在何处使用通用服务有助于减少维护和整合方面的复杂性,以便将来提高开发工作的响应能力。而这个目标让公司可以消除冗余服务。

     开发架构之后――Adler称之为通用领域模型,康卡斯特的下一步就是开发治理框架,用于服务开发及部署。服务必须进行治理,否则没有人会知道存在某一服务,也不会遵循相应的政策和程序。只有经过治理的服务才添加到服务注册中心中,供其他人重复使用。

     很快出现的一个治理挑战就是决定谁拥有服务。康卡斯特公司相当分散,所以这种企业文化自然支持让服务创建者拥有其相应领域的服务。像单次登录这些通用服务自然属于IT部门。

     Adler现在意识到康卡斯特漏掉了一个步骤,就是在确定架构后还要开发通用数据服务模型。由于没有标准的数据服务访问公司信息、管理系统之间的相互关系,所以开发人员最终开发的服务以不同方式来完成任务,从而导致不一致性,因而无法兑现SOA的承诺,即轻松实现服务组件的混合搭配。事实上,康卡斯特先前低估了这一重要性,而代价就是事后改动了一些服务,强制使用这种模型。  

     与单单认为SOA只是技术问题相比,康卡斯特的SOA项目注重架构。这有助于SOA概念得到更广泛的应用,因为公司一开始并没有认为SOA意味着单单使用Web服务,而是把SOA概念运用到了所有项目中,不只是明显具有Web服务功能的项目。Web服务只是公布服务的一种方式――它只是个实现细节而已。实际上,内部的初期SOA项目大多针对遗留应用,从而减少了公司内外(如外部的开票公司)的集成点,而这是让业务部门深为头痛的一大难点。

     举例说,开发人员平时使用最适合各自的知识及所构建应用的众多工具和编程语言。由于使用标准的流程和政策,而不是特定的工具和技术方法,开发人员可以更好地遵循架构的意图,而不是让每个项目受制于某一特定的工具或者技术。既遵循统一架构,又允许技术多样性,这也是有实际原因的,在一家有9000名员工的公司,让每个人都使用相同方法是不切合实际的。

     类似于那些大规模的公司还要适应不断变化的业务需求和技术机遇。所以定期评审参考架构很重要,避免它不成为约束性措施或者一纸空文,那样就没人会理睬。不管出现哪一种情况,你都得不到SOA的好处。虽然架构不是每个月都在变化,但在康卡斯特公司里Adler还是每个月都要评审一次。

     Leapfrog愿意考虑开源的SOA方案

     各个地方的IT开发人员通常都面临这样一个问题:一年下来,不同部门开发的应用搬到网站门户这样的通用系统上后,根本无法很好地协同运行。

     2007年初,Leapfrog Enterprise就遇到了这样的困境:当时这家玩具公司需要稳定一致地为供应商和顾客提供各种应用,希望更充分地利用基于互联网的商业交易。Leapfrog Enterprise公司的系统基础设施主管Eugene Ciurana说,公司在今年3月决定需要一种新的方式来开发应用,于是启动了SOA项目,最初的努力如今收到了成效。他说:“我们希望为Web基础设施和系统奠定基础,于是我们从新的起点开始。”

     Leapfrog有着典型SOA项目通常会有的许多目标:更多地重复使用代码、缩短开发时间以及方便整合。但是这家公司不想让SOA对开发工具和整合平台而言只是“换汤不换药”。相反,Leapfrog希望自己的开发人员能从遵循某个平台的非常好的实践概念中解放出来,以便致力于应用的功能、使用最适合每项任务的一系列广泛的开发技术——Leapfrog的开发人员现在使用诸多开发技术,包括Java 5与Java 6、微软的C#以及附带各种第三方库的Web服务。

     举例说,Ciurana不想迫使开发人员都使用相同的传输机制。按照他的说法,如何传输并不重要。他决定使用开源的Mule ESB作为消息传输骨干,靠它来处理诸多传输接口。这样一来,开发人员可以尽量少去关注服务的实现,而是把精力集中所要实现的功能上。结果就是,开发人员往往使用HTTP作为传输机制,不过也有人使用代表性状态传输(Representational State Transfer,REST)和简单对象访问协议(SOAP)。只要效果优秀,或者开发人员觉得用起来最方便,什么传输机制都行。有了Mule ESB的方案,开发人员他们用不着担心在特定的SOAP堆栈中有什么或者使用什么集成开发环境(IDE)。Ciurana之前在沃尔玛网站的时候就用过Mule,所以他确信这是Leapfrog的“新起点”项目需要的基础。

     Ciurana 指出,Leapfrog之所以能采用这种方法,是因为把重点放在了整合应用上。大部分整合是在应用层面进行的,即应用与应用进行联系。所以应用只要进行输入及输出。开发人员把服务作为普通的Java对象(Plain Old Java Object,POJO)来编写,让Mule ESB把POJO“传送”到消息传输网络,从而在ESB里面完成各种转换。如果你使用SOAP和REST,往往通常会考虑如何连接外界。但要是使用POJO,就用不着这么做。

     Ciurana还喜欢Mule ESB的简单,因为只需要管理消息传输。所有商业的SOA厂商都希望把一整套产品卖给用户企业。不过这只不过从一种专有的SOA系统换成另一种专有的系统。由于使用Mule ESB,Leapfrog必须组合SOA堆栈的各层,但Ciurana乐于付出这样的代价,以换取使用上的灵活性。

     Leapfrog使用两个ESB,一个ESB用于管理企业资源规划(ERP)、活动目录和数据仓库等内部系统之间的数据流以及应用相互联系;另一个ESB用于面向客户、基于Web的应用,譬如提供给消费者的客户账户自我管理应用和在线游戏。这不但为安全管理和访问管理带来了自然的界限,还提供了为对方充当后备的功能:一旦需要,其中一个ESB就能接过另一个ESB的工作。

     Ciurana指出,Leapfrog确实不得不创建通用的服务命名模式,以便服务在每个ESB上都能运行。要求极其准确的名称可以让所有服务井然有序。为了获得ESB方面的自由,这是很小的代价。

0
相关文章