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频繁的执行将会降低整个系统的性能。 |