假設我在生產服務器上有一個nodejs/express應用程序。如果我想添加一個新的路由器,我必須重新啓動一個,對吧?但是,如果我重新啓動我的node.js服務器,則用戶可能會遇到錯誤。重新啓動node.js生產服務器
那麼我應該如何重新啓動我的node.js服務器,而不會爲我的用戶出錯呢?
假設我在生產服務器上有一個nodejs/express應用程序。如果我想添加一個新的路由器,我必須重新啓動一個,對吧?但是,如果我重新啓動我的node.js服務器,則用戶可能會遇到錯誤。重新啓動node.js生產服務器
那麼我應該如何重新啓動我的node.js服務器,而不會爲我的用戶出錯呢?
如果您使用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.");
});
我想,答案是先測試一個臨時服務器中的所有東西(例如,您計劃部署的代碼的確切副本,緊挨着現有生產代碼)並選擇低流量時間,然後切換目錄轉到新的一個。
如果出現問題,請將其切回。
但實際的「停機時間」只有一秒鐘,除非有人的請求目前正在服務,他們不會得到一個錯誤。
這就是說,我從來沒有嘗試過這個,我很想知道最好的答案是什麼! 好問題!
我認爲這是一個正確的答案,這就是如何最人們實際上在做。不過,我相信獨角獸精神是獲得非停機時間重啓的重大舉措。 「獨角獸之路」之後,「Brandon Tilley」的回答與答案一樣好。 – nembleton