二层是 客户端-服务器
三层是 客户端-中间件-服务器
三层结构就是:用户界面层,商业逻辑层,数据库层
用户界面层负责处理用户的输入和向用户的输出,但并不负责解释其含义(出于效率的考虑,它可能在向上传输用户输入前进行合法性验证),这一层通常用前端工具(VB,VC,ASP等)开发;商业逻辑层是上下两层的纽带,它建立实际的数据库连接,根据用户的请求生成SQL语句检索或更新数据库,并把结果返回给客户端,这一层通常以动态链接库的形式存在并注册到服务器的注册簿(Registry)中,它与客户端通讯的接口符合某一特定的组件标准(如COM,CORBA),可以用任何支持这种标准的工具开发;数据库层负责实际的数据存储和检索。
不想说大的概念,就说现在实际中用的比较多的吧。前台用PB,DELPHI,做界面和一些必要的元素的组织和简单的处理(不涉及数据库);中间件(IBM CICS,或者BEA TUXEDO),处理那些需要操作数据库的业务部分。比如计算一张申请单中涉及的费用,然后传给前台;底层就是数据库了,大型的很多用Oracle。当然最底层就是UNIX了,现在小型机中比较多的是SUN Solaris 和HP UX.在这种情况下,中间件提供的是一个个服务,组织成一个个程序。以CICS为例,前台有三类:C/C++,Java,PB/DELPHI/VB等。因为中间件服务本身就是用C/C++/COBOL混合SQL(Oracle中叫Pro C)写成的,所以C/C++的接口很简单,装个CICS客户端就可以。Java是用一些对象(没用过),PB等是用OLE方式,也要声明对象,就像在PB中声明非sqlca的Transaction Object一样简单。中间件和数据间通讯遵循的是XA规范,是来往两组C API,有兴趣可以研究一下啊。不知道这样说是不是说得很复杂?
接下来说一下为什么要用中间件,这是我的理解。
1.性能问题 主要是指访问数据库,这是大系统中主要的瓶颈。直接连库在终端少的时候没有问题。但是想想银行,电信的行业,几百个终端程序,全连上去,一个程序会有很多连接,就算是强大的Oracle也会受不了。而且是很多短小的SQL语句的频繁访问,就会不断开和断很多连接。开销很大。采用中间件后,它和数据库之间保持固定数目(有得中间件按这个连接数收钱)的连接,而且从线路角度讲,这种线路比各处的终端过来的好,短距离,而且高速稳定。所有关键部分都在中间件处理,它会批量和数据库打交道。还有一个好处。数据库server一般就一个,多了一致性就是问题。而中间件server可以很多个,可以动态均衡负载,多台连上一个DB server。画个图就很容易理解了,而且以后业务量大了,还可以增加。
2.安全问题 上述的行业很重要的。每个终端可以直接操作数据库就意味这有权限,象银行和电信的数据,都是钱,这样很危险的。而且中断时的事务完整性也很要注意。
3.更新和维护 由于业务部分在中间件,是集中的,更新是很好更新。想一想几百个中断,一旦整个版本出问题或者更新,就是一项工程了。
4.可扩充性 上面已经谈到可以增加server。
要说明的是多了一层不会慢的,因为中间件是用C/C++和SQL写的,编译后效率很高的。
以上只是我接触的一些,肯定不是很全面,而且自己也在不断学习,可以上网用CICS或者TUXEDO搜索一下,可以找到很多中间件的文章,有些是有商业目的的,不要全信哦。