自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Ruby on Rails性能優(yōu)化七劍

開發(fā) 前端 后端
文章介紹了Ruby on rails性能優(yōu)化的7個(gè)做法,目前在整個(gè)Rails社區(qū),都極少有運(yùn)營Rails大訪問量網(wǎng)站經(jīng)驗(yàn)的人詳細(xì)的談“性能”這個(gè)話題。

Ruby on Rails(也叫做Rails)是一個(gè)針對(duì)支持?jǐn)?shù)據(jù)庫的Internet應(yīng)用程序的Ruby框架,在51CTO之前報(bào)道的文章《進(jìn)入Ruby on Rails世界》與《Ruby on Rails的核心特性是什么?》里,都對(duì)其作了詳細(xì)的介紹,這里將不做過多的說明,文章的主旨在于如何做好Ruby on Rails的性能優(yōu)化。

51CTO推薦專題:Ruby on Rails開發(fā)教程

目前在整個(gè)Rails社區(qū),都極少有運(yùn)營Rails大訪問量網(wǎng)站經(jīng)驗(yàn)的人詳細(xì)的談“性能”這個(gè)話題。至于國內(nèi),Rails應(yīng)用都停留在學(xué)習(xí)和嘗試階段,真正投入商業(yè)運(yùn)營的基本找不到,所以談這個(gè)話題為時(shí)太早。所以權(quán)當(dāng)是個(gè)人的總結(jié)性文章吧,也不會(huì)很詳細(xì)的展開談?wù)摚軐?duì)大家有所啟發(fā)就好。

一、硬件

1、CPU

Ruby解析器相對(duì)于JVM,PHP解析器來說,比較低效,可能會(huì)導(dǎo)致比較多的context switch,因此提高CPU和內(nèi)存之間的總線帶寬和傳輸速度會(huì)對(duì)Ruby應(yīng)用有比較大的性能提升。在目前主流的x86_64 CPU當(dāng)中,AMD Opteron在CPU芯片內(nèi)置內(nèi)存控制器,可以有效提高CPU和內(nèi)存數(shù)據(jù)交換速度,提高context switch能力。所以用AMD Opteron比Intel Xeon EM64T性能要好很多。

2、物理內(nèi)存

Ruby是以進(jìn)程方式運(yùn)行的,Rails應(yīng)用的并發(fā)響應(yīng)能力主要取決于Ruby進(jìn)程的數(shù)量。一個(gè)最簡單的Rails應(yīng)用,一個(gè)Ruby進(jìn)程占用的物理內(nèi)存一般不過30-40MB,但是對(duì)于真正復(fù)雜的,而且數(shù)據(jù)庫訪問頻繁,數(shù)據(jù)量大的Rails應(yīng)用來說,Ruby進(jìn)程穩(wěn)定的物理內(nèi)存占用至少100多MB,經(jīng)常達(dá)到200多MB,甚至300MB。以開10個(gè)Ruby進(jìn)程計(jì)算,那么物理內(nèi)存使用上限就是3GB,所以4GB物理內(nèi)存是起碼的。

二、操作系統(tǒng)

1、Linux distro

對(duì)于AMD x86_64的CPU來說,SLES要比RHEL有更多的優(yōu)化。

2、32位版本還是64位版本

應(yīng)該使用64位版本操作系統(tǒng),以充分發(fā)揮x86_64 CPU的性能,并且x86_64的Linux很多Kernel參數(shù)也大很多,代價(jià)就是需要更多的物理內(nèi)存。所以內(nèi)存多多益善。

3、文件系統(tǒng)

Rails會(huì)對(duì)每個(gè)瀏覽器會(huì)話在硬盤生成session文件,一個(gè)繁忙的網(wǎng)站,臨時(shí)文件目錄下面有上萬乃至幾萬個(gè)session文件是很常見的現(xiàn)象。對(duì)于這種目錄下面幾萬個(gè)小文件的存取,reiserfs要比ext3性能好很多倍。

三、Web Server

主流的選擇是Apache 2.2,lighttpd,litespeed。Apache 2.2可以首先排除,lighttpd和litespeed都不錯(cuò),但我會(huì)選擇開源免費(fèi)的lighttpd。至于lighttpd的各種優(yōu)化參數(shù)這里不談。

四、Ruby的部署

1、Ruby GC

可以使用Railsbench提供的GC patch,以優(yōu)化Ruby內(nèi)存使用,降低GC頻率,提高throughput,代價(jià)就是Ruby進(jìn)程的物理內(nèi)存占用加倍。所以物理內(nèi)存越多越好,4G根本不夠用,8G,16G絕對(duì)不嫌多。

2、FCGI還是mongrel

Ruby進(jìn)程可以以FCGI方式來運(yùn)行,以FastCGI協(xié)議和Web Server通訊,也可以以HTTP Server方式來運(yùn)行(即Mongrel),以HTTP協(xié)議和Web Server通訊,這兩種方式性能上沒有什么差異。FCGI方式,在單機(jī)上面通過Unix Socket和Web Server通訊,效率比走TCP Port要高。

3、開多少個(gè)Ruby進(jìn)程

Ruby進(jìn)程數(shù)量和web server的connection數(shù)量的比例沒有定規(guī),少了多了都會(huì)降低性能,要靠實(shí)踐去摸索,也要參考CPU和內(nèi)存資源的使用狀況。

五、應(yīng)用程序

1、避免使用component

2、hash的key使用symbol

3、對(duì)于ORM來說,數(shù)據(jù)庫的表設(shè)計(jì)的原則是顆粒度應(yīng)該小一些,把常用字段和不常用字段盡量分離到不同表,嚴(yán)重影響性能的大字段分離到單獨(dú)的表

4、在不使用對(duì)象緩存的情況下,查詢方法的:include可以預(yù)加載關(guān)聯(lián)對(duì)象,避免n+1問題

六、緩存

1、Rails的頁面緩存,Action緩存和片斷緩存

Rails提供的緩存方式可以有效降低對(duì)應(yīng)用服務(wù)器的負(fù)載,但是緩存顆粒度太粗,適應(yīng)范圍比較狹窄,緩存過期的處理比較煩瑣。

2、對(duì)象緩存

Rails應(yīng)用本身是可以水平擴(kuò)展的,性能瓶頸往往還是數(shù)據(jù)庫訪問,使用CachedModel對(duì)象緩存可以有效降低數(shù)據(jù)庫負(fù)載,但CachedModel不像Hibernate二級(jí)緩存那么強(qiáng)大,不能夠針對(duì)非主鍵查詢進(jìn)行緩存讀取,不能針對(duì)非主鍵查詢進(jìn)行緩存填充,和file-column有沖突,需要自行覆蓋model對(duì)象的save方法等等。另外在使用對(duì)象緩存的情況下,應(yīng)該把查詢方法的:include去掉,避免關(guān)聯(lián)查詢無法利用緩存的現(xiàn)象。

3、查詢緩存

對(duì)于統(tǒng)計(jì)類耗時(shí)查詢,如果不要求實(shí)時(shí)性,那么可以使用memcache-client將查詢結(jié)果緩存到memcached里面。

七、Session的存儲(chǔ)方式

由于Linux文件系統(tǒng)的高效性以及操作系統(tǒng)使用內(nèi)存來做disk cache,因此默認(rèn)使用硬盤文件保存session,并不會(huì)帶來性能瓶頸,使用memcached并不會(huì)提高多少IO性能。如果一定要優(yōu)化session硬盤讀取,除了memcached,可以使用RAMDISK。

【編輯推薦】

  1. Ruby on Rails的核心特性是什么?
  2. Ruby on Rails能否成為主流?
  3. 一個(gè)Java程序員的Ruby on Rails體驗(yàn)
  4. 進(jìn)入Ruby on Rails世界
  5. 最詳細(xì)的Ruby on Rails安裝步驟
責(zé)任編輯:王曉東 來源: ddvip.com
相關(guān)推薦

2009-12-16 15:23:33

Ruby on rai

2015-10-10 11:00:05

RubyRails性能

2015-10-14 17:27:18

性能

2009-08-27 10:21:22

Ruby on Rai

2009-12-16 17:07:27

Ruby on Rai

2009-12-16 15:14:43

Ruby on Rai

2009-12-18 11:14:26

Ruby On Rai

2009-12-16 17:50:58

Ruby on Rai

2009-08-06 09:13:36

Ruby on Rai

2009-12-16 16:37:59

Ruby on Rai

2009-12-17 14:29:50

Ruby on Rai

2009-12-14 15:30:43

安裝Ruby on R

2010-10-09 08:58:03

NginxRuby on Rai

2009-09-29 17:04:29

2009-12-16 16:24:00

Ruby on Rai

2013-03-28 12:42:02

RubyRails

2009-12-16 15:41:10

Ruby on Rai

2009-12-16 17:37:31

Ruby on Rai

2009-12-17 17:37:42

Ruby on Rai

2010-09-25 14:39:29

Bruce Tate
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)