Mongrel 单进程处理请求试验,转

jiaoronggui 2012-04-19
为了看看 Mongrel 单进程处理请求对系统有多少影响,我做了三个实验
都是 单实例部署的情况, 而且没有Apache 之类的接入服务器 , 是直接访问 Mongrel 的应用的。

实验一:
静态资源下载会否带来阻塞?
我从后台上传来一个300M的文件到public 目录, 然后用浏览器下载这个文件,(注意处理这次下载的使用mongrel的)。
在下载还没有完成的同时,我用浏览器访问之前写好的应用,结果还有响应。
结论,静态资源的下载 不会阻塞其他请求。

实验二:
长时间运算的动态页面的请求会否阻塞其他请求?
我专门写了一个/pages/test 页面 , 里面的代码好简单,
Java代码  收藏代码

    def test 
        sleep(60) # 一分钟 
        @output  =  " 1 分钟过去了 .." 
    end 


先访问这个 /pages/test , 接下来的一分钟,我访问其他页面全部被阻塞了。一分钟过去之后,其他页面就可以访问了。
结论,动态页面的请求阻塞其他请求。

实验三:
写一个测试web service页面居然引起了死锁。
先写好一个web service , /webservice/service.wsdl
再写一个测试页面,/pages/test , 调用刚才写好的webservice ,看看webservice 是否可用。
结果是,test页面请求调用webservice ,所以要等 webservice 请求完成。
而mongrel正在处理test ,所以webservice请求要等 test页面完成。
这样形成了死锁。
我知道 webservice rails提供了一些其他的测试方法。
但是,这个实验已经好充分的说明了,mongrel单进程处理请求所带来的问题。


通过上面三个实验 , 引发我思考。
如果系统上面有某一个action处理起来特别缓慢, 例如大范围检索或者其他运算。
那么这一个人的请求将会使整个网站处于瘫痪状态。
又如果某个action 需要从别的系统的web service 读取一些数据,那么这一action频繁的执行将会降低整个系统的性能。
Global site tag (gtag.js) - Google Analytics