资源描述:
《《web架构布置》word版》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、Web架构布置Web架构布置2010-04-0711:55这篇文章虽然是将ror的,但是对于整个web开发还是非常有意义的,我也总结了下这篇文章,发现web程序还是很有共性的.1:负载均衡器大型网站肯定不是单台服务器的,为了做负载均衡,一般用F5,DNS轮询.我们公司所有的静态页面则采用NGINX做代理,后端挂SQUID服务器.NGINX的代理模块能够根据url地址HASH到某组服务器上,NGINX做负载均衡,SQUID组则考虑容灾问题.2:WEB缓存服务器原来我们公司使用文件cache,在新版本中使用squi
2、d作为页面缓存,squid组根据不同地区做IDC分布,形成了分布式的系统.从实际效果上看,文件cache更容易控制,程序使用比较灵活.考虑到不同的应用ncache可能逐步替代squid.3:后端服务器后端服务器就是应用服务器,主要通过F5挂在squid服务集群后面,处理的都是动态请求,每台机器每天50万的请求,cpu负载也不高,并发请求没有超过100,使用的是apache1.3,lamp的组合.先写到这儿干活了….JavaEye网站的RoR性能优化经验谈JavaEye网站从2006年9月11日上线基于RoR的2
3、.0版本开始,到现在已经运行了将近一年半了。在这一年半的时间里,JavaEye网站的每日PV从最开始的5万,缓慢增长到了现在的60万。随着网站负载的不断增加,我们也在不断尝试和调整网站的性能,积累了不少第一手RoR应用性能优化的实战经验。虽然我们并不是RoR性能优化的权威专家,我们所积累的经验也许并不是最优实践,但是作为国内最早涉足RoR商业运营的互联网网站之一,我们非常乐意分享和交流我们的实战经验,以帮助后来者节省必要的摸索时间。RoR惊人的开发速度恐怕是每个互联网创业者都梦寐以求的,但是随着网站流量的不断增
4、大,可能大多数采用RoR的网站或迟或早会遇到RoR的性能瓶颈,我的一个朋友capitian说过一句很有意思的话:"RoR应用做到后来,总有自己修改底层的冲动"。就我所了解和掌握的情况来看,很多RoR网站都过早的遇到了性能瓶颈,一个很普遍的现象就是:RoR应用的CPU负载要远远高于数据库的负载。这是一个有点违背常理的现象,因为我们知道,硬盘IO速度要比内存慢得多,所以一般Web应用的性能瓶颈往往会出现在数据库IO上,因此优化数据库,进行对象缓存是非常有效的性能优化手段。但是一旦应用服务器负载比数据库还高的话,单纯
5、的对象缓存就无用武之地了。下面我们从几个方面分别谈一谈如何进行RoR的性能优化:应用的部署RoR应用的部署包括操作系统,Web服务器,应用服务器和数据库四个方面:一、操作系统1、发行版本RoR适合于部署在Unix类操作系统上面,通常比较多的人使用RHEL/CentOS/Ubuntu,我们比较偏爱SuSELinux,对于我们服务器使用的AMDOpteronx86_64的CPU来说,SLES要比RHEL有更多的优化。另外应该尽量使用64位版本操作系统,以充分发挥x86_64CPU的性能,并且x86_64的Linux
6、很多Kernel参数也大很多,代价就是需要更多的物理内存。2、文件系统Linux最常用的文件系统是ext3,但我们使用的是Reiserfs文件系统。Reiserfs在读写大量小文件的目录性能非常高,即使处理目录下面直接存放10万个文件,性能仍然不会下降。我们知道默认情况Rails会对每个浏览器会话在硬盘生成session文件,一个繁忙的网站,临时文件目录下面有上万乃至几万个session文件是很常见的现象。对于这种目录下面几万个小文件的存取,reiserfs要比ext3性能高一个数量级。如果希望对session
7、文件有更好的存取性能,可以把临时目录链接到Linux的内存文件系统/dev/shm目录下面,这样实际上session文件的存取都是直接内存操作了,这种方式唯一的问题在于不能支持群集部署。如果你已经升级到了Rails2.0,可以采取把session保存到Cookie里面的方式,既可以避免服务器处理session的开销,而且还支持群集部署,是大规模网站部署的首选方式。3、内核的网络参数调整对于流量很大的网站来说,默认的Linux内核网络参数偏小,因此如果你的网站流量非常大,或者上传下载大文件比较多,可以针对性的调整
8、内核网络参数,扩大内核的TCP接收数据和发送数据的Buffer缓冲区大小,比方说:引用net.core.rmem_default=262144net.core.wmem_default=262144net.core.rmem_max=262144net.core.wmem_max=262144net.ipv4.tcp_rmem=409665536524288net.ipv4.tcp_w