凌枫佳境
风霜凌绝顶,红枫绚佳境
引言

    我们会经常遇到越来越多的客户要求完成根本不使用 SOA项目,而仅仅在其中实现企业服务总线(Enterprise Service Bus,ESB)体系结构。此类面向 ESB 的体系结构并不困难,但是其成功与否却难下定论。要求进行此类项目的客户并不了解这一点:面向 ESB 的体系结构并不带来业务价值。基于面向 ESB 的体系结构的项目需要成为基于 SOA 的项目,才能帮助确保成功地提供业务价值。

    仅使用 ESB 体系结构

    SOA 基于业务需求。SOA 可保持 IT 与业务的一致性,使 IT 系统按照业务系统的方式工作,帮助确保 IT 产生业务价值。有关更多细节,请参见 IBM 白皮书“IBM SOA Foundation: An architectural introduction and overview”

    SOA 的主要目标是在业务领域与 IT 领域之间保持一致,从而同时提高二者的效率。

    使用 IBM 产品和服务构建 IT 系统的 IT 部门可能对其业务需求了解并不够。对于习惯于精确计划系统将如何工作的工程师,业务工作的方式可能会让人觉得没有计划,是随机的。说明内容看起来不一致,不可行,业务用户的需求似乎不现实,而且总在变。业务需求成了“都市神话”,似乎存在于组织中,但仔细分析却又找不到。

    从这个角度而言,将 IT 与业务保持一致是不现实的。业务部门似乎不知道自己需要什么。其流程对自动化构成了挑战。实现流程自动化的工作没有效果,而且站不住脚。

    工程师所了解的是技术。技术并不需要想像的需求列表,仅仅需要代码而已。代码不会抱怨不好用,编译器也不会每天改变自己的需求。代码要么运行,要么不运行。如果今天代码在运行,那么明天它也会运行。

    技术对于工程师来说更容易掌握,也让他们觉得比较满意。这也碰巧成为了大多数企业软件公司销售的主要内容。ESB 是技术,用于连接到其他技术。

    SOA 非常复杂,而与此不同,ESB 理解起来较为容易。ESB 并不需要任何这样的业务需求,仅仅需要技术需求。ESB 非常精确,以各项标准为基础:数据格式、连接协议、XML、IP、HTTP、SOAP、JMS、JAX-RPC、JAX-WS 等等。SOA 可能会永远都处在分析停滞状态,而构建 ESB 可以实际完成一些看得见的工作。

    这经常被称为连接一切 的项目。客户有很多部分——应用程 序、计算机系统、数据中心、部门、子公司、外派机构、合作伙伴和客户——这些部分彼此并不通信。各个部分对其他部分所进行的工作毫不知情。一个部分拥有另 一个部分需要的数据,因此这两个部分需要协同工作。只有所有的部分连接到一起,才能够都正常工作。与尝试了解业务需求的无效果相比,连接一切是一个能够解决的问题,因为其解决方案是技术。如果将 IT 部门比作锤子,则 ESB 就是 SOA 的钉子。

    他们的想法经常是,“我们不知道还需要别的什么,因此目前我们将仅仅构建 ESB。”但这与“您开始编写代码,我们将了解他们需要什么”方法有什么实际的区别么?

    ESB“梦话之地”介绍

    读者经常通过单个属于来对连接一切的想法进行总结:企业服务总线(ESB)。那么,他们在说需要 ESB 的时候到底是希望什么呢?他们的 ESB 指的是什么呢?是否真的有必要将其称为 ESB?

    客户经常喜欢将 ESB 中的第一个词替换掉。他们不使用企业,而使用其它的组织单位,如公司、部门或政府。有时候还会使用其用途进行描述,如采购或工资单。或者描述其将传递的内 容,如产品或订单。即使客户所需的是公司产品采购服务总线,也不要被服务总线 之前的词语所迷惑。这些客户需要的是 ESB。他们有时候甚至会这样描述需求“一个 ESB,但……”。

    客户的重点实际上在最后一部分:总线。在包括总线的技术拓扑中,所有对象都连接到总线,因此,也使用总线连接到所有其他对象。总线是各个部分间通信的主干道。应用程序间的通信(甚至网络上计算机之间的通信)通常都使用消息(即一系列不同的信息数据包)完成。Enterprise Integration Patterns 一书对此进行了很好的概述,其中将此类连接称为消息总线。

    客户机经常不会太多考虑 ESB 的服务部分。xSB(x 可以为企业或别的什么)用于调用服务,否则就只是消息总线。服务调用指一个应用程序告知另一个应用程序进行什么工作,而后者将完成此工作,而且通常会发送回响应,以报告结果。

    因此,如果客户希望构建的是 xSB,那服务是什么?IT 人员可能会说,“服务可以是所需要的任何形式的东西”。这是最明确地指出,该项目实际上仍然是一个技术性的解决方案。暗示服务不相关,就是在说使用总线的 应用程序不相关,应用程序如何使用总线不相关,而且应用程序集成需求(算不上业务需求)不相关。xSB 将用于任何目的。针对 SOA 进行了体系结构设计的 ESB 最初可能会忽略很多这样的服务需求,因为服务会在充实 SOA 的过程中变得明显起来。但没有 SOA 的 ESB 没有服务,因此只是总线而已。

    只构建总线 的项目可以视为 IT 梦话之地 项目。就像 Kevin Costner 在“梦话之地”(Field of Dreams) 这部棒球运动电影中的角色一样,IT 部门所持有的态度是,“如果您建了,他们就会来。”如果构建了总线,人们就会围绕总线构建 SOA 应用程序。“梦话之地”的问题在于,与好莱坞的世界不 一样,在业务世界中并不能保证服务将会出现。如果人们构建 SOA 应用程序,可能不会像您所构建的应用程序那样,因此可能必须进行大量的重新构建工作后才能使用。即使最后投入了使用而且效果非常好,得到回报的延迟也非常 大,而这可能会让 IT 部门在等待“电影”最后的美满结局的过程中感到十分难熬。

  了解面向 ESB 的体系结构的局限性

    ESB 有什么问题呢?还记得在电影的中间 Annie 想和 Ray 离婚的部分吗?(就是整个第二幕的内容,此时每个人都认为 Ray 是个傻瓜。)您的项目也将经过这样一个时间段,项目赞助人可能并不希望他的员工离自己而去!

    问题是:ESB 本身不产生任何业务价值。ESB 是实现目的的手段,而不是目的本身。ESB 就像 SOA 的电线或水管。水管并不产生价值,带有能放出水的水龙头的水池能带来价值。电线不会产生价值;但电灯(特别是连接到开关的电灯)具有价值。除非一条路能够 让您从一个位置达到另一个位置,否则这条路就没有价值。没有 SOA 的 ESB 就像一条起点和终点没有意义的路。人们可能会最终希望去这些地方,但此前这条路所带来的全是成本,没有好处。

    面向 ESB 的体系结构有个固有的缺点,即它所构建的是没有人要使用的连接。除非系统彼此连接并协同工作,否则业务并不会带来任何其他价值。在此之前,ESB 只是没有好处的开销而已。IT 部门可能会因为搭建了某些实际的东西而感觉不错,但业务部门决不会有任何好的感觉,业务部门依然无法完成那些在没有 ESB 时候就无法完成的工作。ESB 成了 IT 部门可有可无的东西,也成了已部署的应用程序拓扑中的累赘。

    不要遵循 IT“梦话之地”方法所奉行的“如果您建了,他们就会来”,极限编程(Extreme Programming,XP)中的一句话可能更为恰当:“您将不需要它。”这句话代表了一个非常实用的原则:

    在真正需要的时候实现所需的内容,而不要在预计会使用时进行实现。

    这个原则(直到需要时才构建)与 IT“梦话之地”方法奉行的原则相反。不要因为希望有人将会使用而进行相关的构建工作,而是要在知道有人真正需要时才进行构建。这样就可以确保能构建他们 真正所想要的东西,而不是您认为他们可能会最终需要的东西。这样只有在您真正想获得这个构建带来的好处时才进行构建,直到这个时候您才需要付出相应的成 本。此原则是一个很好的业务哲学,也适用于 IT 部门和业务的其他部分。

   

posted on 2009-02-20 10:16  凌枫  阅读(259)  评论(0编辑  收藏  举报