1999年,我参与了一个互联网的开发项目,项目的目的是将一个传统的计算型windows应用程序移植成一个BS架构的WEB应用。由于实际应用的需要,我初次接触到了中间件的概念,简单的了解了一下CORBA和EJB。为了尽量少的重写代码,小组最终决定采用CORBA架构。由于项目时间的限制,大家对CORBA的理解都比较浅,仅仅是根据资料了解了一些基本概念,并试验成功了配置与实现方法。不过值得庆幸的是,项目的进展还比较顺利,最后基本达到预设的目标。

     时间一晃过去了好多年,不过最近突然感觉 “中间件”火爆了。没有中间件的软件好像就拿不出手了,而有了中间件平台(或者用上了中间件平台)是乎马上就“倍有面子”。各厂商对中间件的解释也五花八门,而且还有不断神化的趋势。个人感觉,根据现在的资料来理解中间件是乎比以前更加困难(这里不排除中间件在不断发展,真的变得更得复杂了)。

     不久前朋友问起我对中间件的理解,稀里糊涂的讲了一通,朋友听着云里雾里,自己也觉得不甚满意。近日偶尔看到电视连续剧《家有儿女》中有一级讲一个小胖找一个高年级的学生联合作弊,略有所悟,感觉中间件和这种作弊有一些可类比之处。

     为了后面的讲解清楚,这里把这个故事情节简单的交待一下:

     小胖(A)平时学习不用功,找到平日好友(B),希望B能帮助他作弊,B认为自己学识不够,建议由高年级的C做题,C没有作弊经验,所以由B来中间传达(B以前有和A作弊的经验)。考试开始时,A将考题设法传送给B,B交给C,C做题,C做完后将答案交给B,B再将答案设法传给A。A不断地将考题传给B,C做好后不断地由B将答案传给A,整个过程就是这样的(相似场景也可参见周星星的《逃学威龙1》)。

     以下就以我的一点粗浅的理解歪批一下中间件,算是自娱自乐吧。

1、 表现和实现分离

     提起中间件,有必要要提一下客户端和服务端。传统的应用程序一般是独立的应用程序,程序自己本身有输入输出,同时还有计算逻辑。而在客户端和服务端分离的应用中,一般输入输出在客户端,而计算逻辑则在服务端完成。就是说这种应用实现了表现与实现的分离。而上面的作弊场景也是实现了这种分离,做卷人A(相当于客户端)只是实现输入输出(填写试卷内容),而真正的计算实现是在场外那个高年级的学生C(相当于服务端)。

2、中间件出场及中间件的作用

     一般情况下客户端和服务端是完全可能直接通讯的,比如有些客户端和服务端分离的程序直接采用socket通讯,那为什么需要中间件呢。

    我们回头看一下作弊的那个场景,C善于做题,但是C没有作弊经验。理论上经过训练和配合是可以直接实现A和C之间通讯的,即A将考题交给C,C做好后将答案传给A。但是这种方式需要训练和磨合,而且C需要花很多时间做很多重复工作(把答案交给A),这会大大降低C的效率。而B的出现就很合理了,B和A熟识,又有与A传达的经验,有B参与,C就可以专心的做题了,这样效率很高,而且降低了对C的要求。我们把这个场景再扩展一下,如果A考的是一个综合考试,C一个人无法完成,此时B可以找C1、C2 、C3、……参与,C1、C2、C3、……只用会做题就可以了,B负责将考题按科目分给C、C1、C2、C3、……,再将答案传送给A。A不用关心到底有多少个C,只是将考题交给B,并收到答案就可以了。B的职责也很明确,B不用会做题,只是负责中间的传送就可以了(重复的做同一件事情)。个人认为,此时的B就很接近中间件的概念。

    回到我们客户端和服务端的程序中,如果没有中间件,如果服务端增加一个新功能,则不得不编制新功能与客户端的通讯程序,如果增加多个功能,则要编制多个通讯程序。如果有了中间件,新功能就只用拥有计算逻辑就可以了,其它的与客户端的通讯都可以交给中间件平台完成。

3、关于协议

     在作弊场景中,A和B之间传递信息还是要有一定的约定的。例如传递信息的方式,可以是传纸条,现在高级了还可以是短信。甚至像《逃学威龙》里那样用“苹果”代表“A”,“香蕉” 代表“B”等。这个就是中间件框架中的“协议”的概论,简单的讲就是信息传递的约定。这里,协议传递的信息是可以被加密的,比如《逃学威龙》那个例子。中间件体系里面也有这样的概念,可以有多种协议,可以有加密的协议(如:IIOP协议),还可以自定义协议。

     感觉还有其它的一些类比,目前还不是很明确。以上内容仅供参考,可不要把大家带得更远。:)

发表于: 2007-04-15 20:23 肉香鱼丝 阅读(500) 评论(1)  收藏(0) 好文推荐

作者该类其他文章:

# re: 歪批中间件
2008-09-23 11:25
【匿名用户】:E-works热心网友
不错,解析得很形象。



标题  
姓名  
主页
内容   
请输入验证码:
*
(如果看不到图片,请多刷新几次页面)
  登录   Top
[使用Ctrl+Enter键可以直接提交]