【转载】 BizTalk Server 相关的一些基础概念 Biztalk Server (BTS); SOA; ESB
时间:2010-11-12 来源:wilmer
我平时学习一个产品或组件,喜欢从这个产品或组件的用途,用意入手。因为了解了产品或组件的目的,就能很好的把握它的功能,甚至其未来的发展方向。
我们先来说说BizTalk Server。BizTalk Server从2000年开始一路发展而来。所以首先我们能看出,这个产品早于ESB,SOA这种概念产生。所以可以确定的一点,BizTalk Server不是为了配合任何概念而开发的系统。BizTalk Server(打字太麻烦了,后面简称BTS)其实是由一系列的数据交换程序,合并,提取,抽象,而成的一个产品。最早只不过是微软为了解决数据交换需求,编写了一系列的数据交换程序。后来发现这些程序可以进行抽象,提取。于是逐渐形成了一个产品BTS。这样我们的可以认为BTS其实最早发展的根源是源自一系列的功能,而不是一系列的概念。我个人认为这很重要。比如EDI,比如SQL Adapter,最早的时候可能只是想写个程序实现数据交换……
随后变成写个程序,适应各种数据交换,再发展变成,通过各种适配器连接各种系统,再后来发展到,使用管道进行加密解密,与适配器之间灵活匹配。(这种发展可能出现在BTS产品形成之前,我不知道什么时候有的这些特性)。
我之所以提这个,是我在一些培训的时候,有人会问,为什么有管道,也有适配器,这两者为什么是分开的?为什么其他产品,比如Fiorano就没有这么复杂,人家只用一个模块就实现了两个功能。为什么?我觉得,如果明白BTS的这种成长历程的话,那么解释就是,BTS发展成这个样子,是系统不断抽象,不断降低组件耦合性的结果。虽然麻烦了一些,但是可以100%肯定的是,这是一个进步。能使客户企业实现更多灵活的功能,而反观其他产品,可能操作简单,但是牺牲的是功能和产品本身组件间的耦合性。
简单的说,为啥上来先说历史,原因就是,希望使用BTS的各位相信,这是一个经过反复锤炼,反复推敲的产品。如果你不明白它的一些设计用意,那么有可能是BTS设计问题,更多的可能是,我们暂时还没有领悟到设计者的精妙意图。当然BTS也在不断的改进。也没准哪天就变了,呵呵,不要怪我。
好的,BTS本身的东西就先说到这里。总之就是做数据交换用的。下面说说SOA,ESB。
在我接触到的BizTalk的客户开发人员中,能对SOA,ESB有一个完整的概念的人不多。(我刚开始学的时候,也是完全搞不懂,这些概念啥意思。)先各用一句话把三个概念串起来:
SOA是一个架构,一种思路,一个构想;ESB是一系列功能,是一个功能的集合;BTS是一个产品(废话)。
SOA是一个架构,一种思路,一个构想。
SOA(Service-Oriented Architecture)。就好比是社会主义,什么是社会主义,是一个思路,是一个构想(完全概念性的),也是一个架构(一个方法论)。SOA是把企业所有东西看成服务,来构建企业内的整体IT结构。(关于如何解释SOA,我就不过多重复了,直接百度百科一下就知道了。)。那么怎么看待它是“一个思路,一个构想”呢?
SOA也可以变成我们考虑问题,设计东西的一个思路,比如我们不去考虑构建企业内的数据交换问题,我们来考虑开发一个简单的人力资源系统,我们同样可以把设计这个系统的思路,采用SOA的思路。我们可以想象人力资源系统内部的所有功能都是一个服务。然后我们把这些服务独立出来,分毫边界,搭建起来(比如把他们包装成一系列Web Service,然后造个UDDI)。然后在这些服务上层建立业务流程,实现整个系统。如何?是不是感觉上不同以往的面向对象(OOA)? ^o^ 所以SOA是一个XX,一个XX,一个XX bla bla bla...
一些Web Service簇拥注意,面向服务,并不见得一定是Web Service,WCF,HTTP,TCP,FILE,MQ,都可以是服务提供的方式。
ESB是一系列功能,是一个功能的集合。
相比SOA,ESB(Enterprise Service Bus)就显得踏实的多。他的名字听起来很想一个东西,一个看得到摸得着的程序。但是其实我也得不然。当然它可以是一个程序。(如果这个程序实现了ESB所要求的功能的话,那么这个程序可以说符合ESB)。
我个人更喜欢把ESB看成功能的集合。传输,路由,转换.....bla bla bla一系列,不少,不知道的人可以去百度知道一下。我就不摘抄了,这不是我的工作。
当把ESB看成一个功能集合之后,我第一个感觉就是,用一个软件是不是可以实现所有ESB功能?或者说,把所有ESB包涵的功能放在一个软件产品里合适,或者说,可能吗?
我对这些功能的分析,ESB的目的说白了就两个字“动态”。
没有ESB的时候,服务的调用者和服务的提供者紧耦合在一起。怎么讲?比如,我写了一个C# Web Service部署在网络中,再写一个C#客户端调用这个Web Service,也部署好了。那么就出现一下问题:
1. 如果Web Service地址改变……悲剧,需要更新客户端的调用地址,重新编译客户端,重新部署。(啥?你有变法不重新编译,OK我相信,那么看后面一条)
2. 如果我们修改了Web Service的参数,原来3个参数,改成4个,那么客户端需要重新编译,重新部署。(啥?你实现预备了预留字段?OK,那么看下一条)。
3. 如果由于网络条件变化,我们无法继续使用80端口的Web Service了,所有交换必须通过MQ消息队列执行。
好了,我觉得我已经证明了,服务的提供者和调用者是多么的“紧耦合”了。
那么如果我们搭建了所有ESB的功能,那么我可以告诉你,OK,你的服务的提供者和调用者之间松耦合了。OK,我再告诉你,上面三条已经对你的企业无效了。
ESB是如何实现松耦合的,我们后面再说,这里只限于ESB的概念。
相信经过上面的解释,大家已经明白了BizTalk,SOA,ESB的概念了。恩,希望如此。
最后说一下三者之间。
1. 通过BizTalk Server我们可以轻松的搭建SOA构架下的IT结构。
2. BizTalk Server提供了 ESB Toolkit 组件包,用来搭建ESB。我个人认为,使用 ESB Toolkit 配上UDDI ,已经可以实现ESB所要求的功能了。(承诺后面会送上ESB Toolkit的文章)
就到这里,欢迎大家讨论。完全原创,转帖请务必注明出处。
【转自 史维的专栏 http://blog.csdn.net/aidscat/archive/2010/06/21/5682728.aspx】