Ruby Web框架


JGW Maxwell在2011年底做了一個 Ruby Web框架的並發處理能力測試 ,還做了node.js的對比測試。用250個並發去做壓力測試,后端使用MongoDB數據庫,總共跑完10萬個請求,測試結果如下:

Web框架 並發模型 吞吐量
Rails 多進程 531 request/s
Sinatra 多進程 576 request/s
Sinatra::Synchrony 纖程 1692 request/s
Goliath 纖程 1924 request/s
Cramp Event IO 3516 request/s
node.js Event IO 3100 request/s

纖程IO模型的性能是傳統多進程模型的3-4倍,而Event IO則是多進程的6-7倍。值得一提的是Ruby的Event IO框架Cramp甚至性能超過了node.js。看來並發性能差的原因並不在Ruby。

 

我們看一個 Ruby web框架請求處理性能評測 ,這個評測不訪問數據庫,也不測試並發性能,主要是測試框架處理URL請求路由,渲染文本,返回結果的處理速度。

 

Web框架 處理速度
Rack 1570.43 request/s
Camping 1166.16 request/s
Sinatra 912.81 request/s
Padrino 648.68 request/s
Rails 291.27 request/s

 

這里我想簡單介紹3個Ruby輕量級框架,性能都遠遠超過Rails,很適合做Web Service:

  • Sinatra

    Sinatra本身也是Ruby社區非常流行和著名的輕量級Web框架,核心源代碼不超過1000行,文檔只有1頁。對於Rails開發者來說,花了幾個小時,就可以快速使用Sinatra開發Web Service了。Sinatra對多線程支持的非常好,可以用rainbows 來跑多線程Sinatra,IO並發處理能力很好。Github也是用它來提供開放API服務的。我自己寫了一個 Sinatra的項目模版 ,如果你用Sinatra開發Web Service,可以參考。

  • Padrino

    Padrino是一個基於Sinatra之上的輕量級Web框架,在Sinatra基礎之上提供了命名路由,模塊化項目組織,頁面helpers和generators等等。Padrino是一個高度模仿Rails的框架,API的命名和Rails很像,Rails開發者花1-2天看看文檔就可以快速上手開發了。Padrino相比Rails易學易用,多線程支持良好,性能比Rails好很多,開發Website推薦使用。我自己的網站也是用Padrino開發的,源代碼在: robbin_site

  • Goliath

    Goliath是一個Ruby的纖程開發框架,性能非常好,作者本身是在開發PostRank產品過程中開發的Goliath。PostRank是一個用戶社交行為實時跟蹤工具,需要很高的性能來支撐,PostRank被Google收購了,作者現在在Google工作。Goliath適合用來開發對性能非常敏感的Web Service或者real-time的應用,但使用Goliath有一些門檻,你不能使用普通的阻塞IO庫,必須使用作者封裝的一些纖程的庫。http://tech.vonstark.co/post/20053649068/ruby-non-blocking-goliath  

 

比較適合寫Web服務接口的輕量級Web框架我推薦兩個:Grape和Sinatra,兩個的區別主要是:

Grape是個純粹的寫API的框架,提供了很多寫API很方便的功能,用Grape寫API很爽,應該是首選,他只提供json/xml/txt格式輸出。

Sinatra是個相對完善點的Web框架,帶有模板渲染功能,但單純寫API的話,沒有Grape爽。不過如果你的API Server有可能輸出HTML頁面片段,需要模板功能的話,還是Sinatra更合適,否則用Grape在代碼里面拼字符串還是很麻煩的事情。

Grape和Sinatra都是基於Rack之上很輕量級的封裝,我做了框架處理請求速度的測試,以及多線程並發的簡單測試,基本上性能差異非常小,Grape稍微快一點點,但不超過5%。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM