如果想用中间件来提高效率,那恐怕会失望的,三层结构的主要目的不是是提高效率
Oracle处理这点数据量应该不是问题,当然服务器要求比较高.中间件主要是解决分布式计算的问题,在访问效率上反而有所牺牲。如果不考虑其他因素,尽量直接与数据库进行通信,是提升效率的最好途径。
可以通过使用单服务器解决方案来提高站点的伸缩性。可以将你的WEB服务器升级为具有更快的处理器或多处理器或者两者并举的计算机。这种叫扩大规模(scaling up)。但是,在有些时候这种方案并不能奏效,扩大程度也就如此而已,而且,高端市场的计算机价格高得令人不敢问津。一旦达到一定的限度,高成本-效益比的可伸缩性就要求使用多机多处理器。就是扩展规模cale out)。
这样就需要负载平衡的技术。你必须在多台不是太昂贵的计算机间对进入的HTTP请求进行分布。对于一个基于WEB的应用而言,最好把负载平衡定位在HTTP请求到达站点的地方。所以需要一种技术用来在一组IIS计逄机间分布进入的HTTP请求。这种方法称WEB服务器阵列(WEB server array)。
建立WEB服务器阵列:
有很多种方法可以在一组服务器间分布HTTP请求。有一个简单的方法就是把WEB站点设计成具有专用路由的服务器,而该路由服务器具有可以重定向客户的定制代码。可以在global.asa文件中使用session_onstart事件,将客户重新定向。比如:
sub Session_OnStart
const server_count=3
dim sserver,surl
randomize
select case (fix(rnd*server_count)+1)
case 1
sserver="farmworker1"
case 2
sserver="farmworker2"
case 3
sserver="farmworker3"
end select
surl="http://" & sserver & ".mysite.com/myapp/default.asp"
response.redirect surl
end sub
这项技术要求客户到达路由服务器的初始请求必须是对扩展名为.asp的页的请求。
上面的算法是使用随机数实现重定向,也可以设计一种更精细的负载平衡机制。例如,每个服务器都可以向路由服务器传回执行数据。如果每台服务器都定时向路由服务器传输一定数量的活动会话,负载平衡代码就可以把每个新客户都重新定向到具有最少活动客户的服务器上。
另外也可以用循环DNS技术。每个逻辑DNS名都映射到多个IP地址。当一个BROWER试图对DNS名进行分解时,DNS服务器就从地址列表中返回一个地址。为了在一组服务器中分布客户,DNS服务器循环使用这些地址。这比前而的重定向技术要稍微快一些。
上面两种都可称为是基于会话的负载平衡技术。但是这种方法有明显的局限性。这种方法会出现一些偏差,而且会将IP地址暴露给客户,当某台WEB服务器崩溃或都由于维护而离线时,会出现“服务器不可用”的信息。而且当服务器崩溃时客户会话也会随之崩溃。 更好的办法是为每个客户提供一个单独的IP地址。有两种方法:一种基于硬件的,比如用CISCO的LOCALDIRECTOR转换器和F5公司的BIGIP路由器。一种是基于软件的,比如集成在WIN2000 ADVANCED SERVER中的NETWORK LOAD BALANCEING(NLB)。NLB不需要独自占用任何硬件,它作为WINDOWS设备驱动程序安装到每台WEB服务器上,能满足最多达32台服务器。
这两种方法可称为基于请求的负载平衡。
只要可以使用基于请求的负载平衡技术,就不应该考虑来使用基于会话的负载平衡技术。
另外,在WEB服务器中缓存只读数据是加快响应时间和提高整体吞量的最好办法。它们减少了与数据库的往返次数,还可以节省服务器方的处理周期。
WEB服务器可以向外扩展,但是数据库服务器却不能。所以应尽可以多地在WEB服务器上进行处理。还应想方设法将与安全有关的授权检查等工作从数据库服务器卸载到WEB服务器上去。
数据库服务器还代表单独的一个失败点,如果数据库服务器崩溃,你的应用也会随之淹没。用群集技术可以解决这一弱点。