2013-01-11 140 views
6

的當前最佳實踐我正在爲我們的Web應用程序的一小部分評估nodejs,看起來它很適合。我知道這個節點很年輕,行動很快,但它似乎最終變成了「準備生產」類別。然而,在網上搜索時,我在生產部署中看到的大部分信息已經過時了一年,並且仍然警告有關易碎節點的可能性,並可能意外出錯,然後再重新啓動一些解決方案。這本身並沒有讓我感到害怕,但似乎沒有正確的方法來將節點可靠地放在那裏。將節點生產部署到AWS

+0

我也很想聽到這個消息。我聽說過永遠使用運行節點,但就是這樣。 –

回答

4

cluster似乎是一個不錯的選擇,雖然取決於您的操作系統它可能有負載平衡性能差。一個非常簡單的版本是這樣的:

var cluster = require('cluster') 

if(cluster.isMaster) { 
    var i, worker, workers; 
    for(i = 0;i < numWorkers;i++) { 
    worker = cluster.fork(); 
    workers[worker.process.pid] = worker; 
    } 
    cluster.on("exit", function(deadWorker) { 
    delete workers[deadWorker.process.pid]; 
    worker = cluster.fork(); 
    workers[worker.process.pid] = worker; 
    }); 
} 
else { 
    //be a real server process 
} 

這是一個不錯的選擇,因爲它都讓你重新啓動死的過程一定的穩定性,併爲您共享加載多個進程。請注意,cluster基本上會修改server.listen,以便工作人員都在監聽來自正在進行偵聽的主服務器的事件。這是「免費」負載平衡的來源。

Cluster文檔可以在這裏找到:http://nodejs.org/api/cluster.html

這也可能是值得擁有的主進程處理幾個信號,如果你希望能夠觸發某些事件,比如殺死並重新啓動所有的進程,或者殺死所有進程並關閉。

+0

這被標記爲實驗。你有什麼經驗在生產中使用它? –

+1

@RussellLeggett是的,我使用Trello(https://trello.com),它使用'cluster'的方式與此非常相似。我們已經使用了它一年多了,我們看到的唯一問題(使用'cluster')是我在文章中提到的負載平衡問題。 –

+1

@RussellLeggett我相信「穩定性:實驗性」是指節點版本之間的API穩定性,而不是運行穩定性,但我可能是錯的。 –

0

我目前正在將node.js應用程序轉換爲高度可擴展的社交媒體應用程序的生產過程。要創建一個非平凡的部署解決方案,我正在使用AWS Elastic Beanstalk。節點AWS文檔可以在這裏找到[http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs.html]。

我已經在我的測試環境中嘗試了這一點,雖然它可行,但它不是一個簡單或易於遵循的過程。特別是我在使用虛擬私有云進行配置時遇到了一些問題。另外,由於該服務有點新,所以沒有大量信息和故障排除建議可供免費使用 - 當然這可以通過購買亞馬遜的支持來解決。

的彈性魔豆部署確實出現爲您提供以下內容:

  • 如果您有資格自由層的開發環境。
  • 適用於節點應用程序和節點體系結構的可擴展的EC2部署。
  • 跨環境的一致部署(即dev,test,uat,production)。
  • 監測。
  • 部署的重複性和自動化。