2012-06-20 149 views
4

假設我在生產服務器上有一個nodejs/express應用程序。如果我想添加一個新的路由器,我必須重新啓動一個,對吧?但是,如果我重新啓動我的node.js服務器,則用戶可能會遇到錯誤。重新啓動node.js生產服務器

那麼我應該如何重新啓動我的node.js服務器,而不會爲我的用戶出錯呢?

回答

9

如果您使用Nginx代理Node.js應用程序,則可以告訴Node應用程序在套接字上偵聽,然後只有在新服務器正確啓動時才關閉舊服務器;一旦舊的服務器關閉,Nginx會將請求路由到服務器的新實例。這就是流行的Ruby服務器Unicorn的工作原理。

在Nginx的,你會指定你的上游是這樣的:

upstream node_server { 
    server unix:/path/to/socket.sock; 
} 

server { 
    ... 
    location/{ 
    ... 
    proxy_pass http://node_server; 
    } 
} 

而且在節點,您可以在插座上聽與

server.listen('/path/to/socket.sock', function() { 
    console.log("Listening on socket."); 
}); 
0

我想,答案是先測試一個臨時服務器中的所有東西(例如,您計劃部署的代碼的確切副本,緊挨着現有生產代碼)並選擇低流量時間,然後切換目錄轉到新的一個。

如果出現問題,請將其切回。

但實際的「停機時間」只有一秒鐘,除非有人的請求目前正在服務,他們不會得到一個錯誤。

這就是說,我從來沒有嘗試過這個,我很想知道最好的答案是什麼! 好問題!

+0

我認爲這是一個正確的答案,這就是如何最人們實際上在做。不過,我相信獨角獸精神是獲得非停機時間重啓的重大舉措。 「獨角獸之路」之後,「Brandon Tilley」的回答與答案一樣好。 – nembleton