為什麼我們要從 NodeJS 遷移到 Ruby on Rails

來源:互聯網
上載者:User

聲明:這篇文章絕不是一篇討論 NodeJS 和 Ruby on Rails 孰優孰略的檄文。 它描述的只是我們做決策過程中的一些思考、決策背後的原因。 兩種架構都非常優秀,都出色的完成了它們的設計初衷,這也是為什麼我們部分的模組仍然運行在NodeJS上的原因。

我是NodeJs的大粉絲,認為這是一項讓人非常興奮的技術,相信它會變的越來越流行。 我對這項技術非常的欣賞——儘管我們最近把Targeter App從NodeJS遷移到了Ruby on Rails。

我們當時使用NodeJS開發它的原因很簡單。 我有一個程式包,能很快的將我們的應用弄上線(我們花了54小時做這個事情),相比起Ruby,我更常使用的是JavaScript。 因為我們的技術架構牽涉到MongoDB,我的這些特長只有在NodeJS環境裡才會有意義。 然而,隨著應用規模的增長,我認識到,選擇NodeJS來實現這個應用是個錯誤的選擇。

下面讓我來概述一下其中的原因。

NodeJS很適合做那些有大量短生命期請求的應用。 對於傳統的CRUD應用,它也很好,但不是非常的理想。 在PHP,Ruby,Python語言裡都有很成熟、最佳化的很好的架構來處理這種應用。 NodeJS裡的所有東西都非同步執行的理念對於CRUD應用來說沒有任何效果。
其它語言裡的流行的架構能提供非常好的緩衝技術,你所有的需求都能滿足,包括非同步執行。

NodeJS是一種非常年輕的技術架構,它的周邊程式庫都不是很成熟。 我說這些並沒有任何對那些代碼捐贈者冒犯的意思,他們很優秀,開發出來很多優秀的程式庫。 然而,大部分程式庫需要改進,而NodeJS的這種快速成長的環境意味著每一版升級中都帶有大量的變化; 當你使用一種前沿技術時,你十分有必要儘快的緊跟最新的版本。 這給創業型的企業帶來了很多的麻煩。

另外一個原因是關於測試。 NodeJS裡的測試架構還不錯,但跟Django或RoR平台上的相比還是差一些。 對於一個每天都有大量的代碼提交、並且在一兩天內就要發布的應用來說,程式不能出問題是至關重要的, 否則你為此辛苦的努力變得得不償失。 沒有人願意花一天的時間改一些弱智的bug。

最後一點,我們需要的是一種能緩衝一切的東西,並且要儘快的實現。 儘管我們的應用在增長,每秒鐘有上萬次的hits,但絕不會出現很大量的訪問請求;這不是一個聊天程式! 主程式最多時也就達到1000RPS,這樣的負載對於Ruby on Rails和Nginx來說算不了什麼。

如果你現在還在讀這篇文章,那你已經看到了我所有要說的了, 你也許非常堅持的想知道我們的應用什麼地方還在使用NodeJS。 是這樣的,我們的應用由兩部分組成。 一是介面,使用者看到的這部分,二是負責報表管理的部分,以及做日誌的功能。 後者是NodeJS的一個最佳使用情境,存在有大量的短周期的請求。 這部分的動作需要儘快的執行完成,甚至要在我們的資料推送還沒有完成之前。 這很重要,當請求執行還未結束,瀏覽器繼續等待響應結束,這會影響使用者使用體驗。 NodeJS的非同步特性救了我們。 資料要麼被存入資料庫,要麼被處理掉,當請求一旦執行完成,瀏覽器就可以開始做其它重要的事情了。

本文英文原文連結:Why we moved from NodeJS to RoR

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.