下载本文示例代码
引言
我们会经常遇到越来越多的客户要求完成根本不使用SOA的项目,而仅仅在其中实现企业服务总线(Enterprise Service Bus,ESB)体系结构。此类面向 ESB 的体系结构并不困难,但是其成功与否却难下定论。要求进行此类项目的客户并不了解这一点:面向 ESB 的体系结构并不带来业务价值。基于面向 ESB 的体系结构的项目需要成为基于 SOA 的项目,才能帮助确保成功地提供业务价值。
仅使用 ESB 体系结构
SOA 基于业务需求。SOA 可保持 IT 与业务的一致性,使 IT 系统按照业务系统的方式工作,帮助确保 IT 产生业务价值。 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 部门和业务的其他部分。
使用 SOA
现在来回顾一下前面的内容,下面列出了一些任何软件开发过程都适用的原则:
直到需要时才构建。
构建可带来业务价值的东西。
使 IT 与业务保持一致。
不要采用面向 ESB 的体系结构,而要采用 SOA,将 ESB 作为 SOA 的一部分构建。也就是说,按照 IBM SOA Foundation: An architectural introduction and overview所述的关于进行 SOA 开发,创建和集成采用 SOA Foundation 体系结构的应用程序。
通过此方法,可以将 ESB 作为 SOA 的一部分进行开发。您将根据业务需求发现服务。每个服务不仅需要提供者和使用者,还需要 ESB 中的通道来连接这两者。该通道就像提供者一样实现服务接口(但实际充当代理),包括支持服务的远程调用(如进程内通信)的服务请求和响应的消息格式。使用者和提供者的服务接口、消息格式、范围和服务质量的区别可以通过中介予以解决和消除。所有这些都是 ESB 设计的核心,而且在不知道 ESB 调用的服务的情况下根本不能进行其中的任何工作。了解这些服务,还需要了解 SOA 中将使用 ESB 的服务。
从这点而言,连接应用程序是较为容易完成的部分。将其业务功能连接起来将是更大的挑战。这不能通过仅构建 ESB 来实现。
结束语
客户经常仅仅构建 ESB,因为这涉及到没有杂乱的业务需求的技术挑战。仅仅构建 ESB 没有实际意义,因为在这种情况下 IT 构建 ESB,然后希望某个 SOA 将出现并使用这个 ESB。这种面向 ESB 的体系结构缺少 SOA 的好处。它并不能带来业务价值。事实上,它会在没有直接好处的情况下产生成本。而且这样并没有保持 IT 与业务的一致性。面向 ESB 的体系结构的更好的替代品是 SOA。不要仅仅构建 ESB,而要将其作为 SOA(最好符合 IBM 建议的 SOA Foudation 体系结构)的一部分构建。
引言
我们会经常遇到越来越多的客户要求完成根本不使用SOA的项目,而仅仅在其中实现企业服务总线(Enterprise Service Bus,ESB)体系结构。此类面向 ESB 的体系结构并不困难,但是其成功与否却难下定论。要求进行此类项目的客户并不了解这一点:面向 ESB 的体系结构并不带来业务价值。基于面向 ESB 的体系结构的项目需要成为基于 SOA 的项目,才能帮助确保成功地提供业务价值。
仅使用 ESB 体系结构
SOA 基于业务需求。SOA 可保持 IT 与业务的一致性,使 IT 系统按照业务系统的方式工作,帮助确保 IT 产生业务价值。 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 部门和业务的其他部分。
使用 SOA
现在来回顾一下前面的内容,下面列出了一些任何软件开发过程都适用的原则:
直到需要时才构建。
构建可带来业务价值的东西。
使 IT 与业务保持一致。
不要采用面向 ESB 的体系结构,而要采用 SOA,将 ESB 作为 SOA 的一部分构建。也就是说,按照 IBM SOA Foundation: An architectural introduction and overview所述的关于进行 SOA 开发,创建和集成采用 SOA Foundation 体系结构的应用程序。
通过此方法,可以将 ESB 作为 SOA 的一部分进行开发。您将根据业务需求发现服务。每个服务不仅需要提供者和使用者,还需要 ESB 中的通道来连接这两者。该通道就像提供者一样实现服务接口(但实际充当代理),包括支持服务的远程调用(如进程内通信)的服务请求和响应的消息格式。使用者和提供者的服务接口、消息格式、范围和服务质量的区别可以通过中介予以解决和消除。所有这些都是 ESB 设计的核心,而且在不知道 ESB 调用的服务的情况下根本不能进行其中的任何工作。了解这些服务,还需要了解 SOA 中将使用 ESB 的服务。
从这点而言,连接应用程序是较为容易完成的部分。将其业务功能连接起来将是更大的挑战。这不能通过仅构建 ESB 来实现。
结束语
客户经常仅仅构建 ESB,因为这涉及到没有杂乱的业务需求的技术挑战。仅仅构建 ESB 没有实际意义,因为在这种情况下 IT 构建 ESB,然后希望某个 SOA 将出现并使用这个 ESB。这种面向 ESB 的体系结构缺少 SOA 的好处。它并不能带来业务价值。事实上,它会在没有直接好处的情况下产生成本。而且这样并没有保持 IT 与业务的一致性。面向 ESB 的体系结构的更好的替代品是 SOA。不要仅仅构建 ESB,而要将其作为 SOA(最好符合 IBM 建议的 SOA Foudation 体系结构)的一部分构建。
下载本文示例代码
一种错误采用SOA的方式一种错误采用SOA的方式一种错误采用SOA的方式一种错误采用SOA的方式一种错误采用SOA的方式一种错误采用SOA的方式一种错误采用SOA的方式一种错误采用SOA的方式一种错误采用SOA的方式一种错误采用SOA的方式一种错误采用SOA的方式一种错误采用SOA的方式一种错误采用SOA的方式一种错误采用SOA的方式一种错误采用SOA的方式