群集模式

群集模式

群集模式允許網路化的 Node.js 應用程式 (http(s)/tcp/udp 伺服器) 在所有可用的 CPU 中縮放,無需任何程式碼修改。這會根據可用的 CPU 數量大幅提升應用程式的效能和可靠性。在底層,這會使用 Node.js cluster 模組,以便縮放的應用程式子程序可以自動分享伺服器埠。若要深入了解,請參閱 Node.js 官方文件中的 運作方式,了解群集模組。

http://i.imgur.com/kTAowsL.png

用法

若要啟用群集模式,只需傳遞 -i 選項:

pm2 start app.js -i max

max 表示 PM2 會自動偵測可用的 CPU 數量,並執行盡可能多的程序

或透過 js/yaml/json 檔案

module.exports = {
  apps : [{
    script    : "api.js",
    instances : "max",
    exec_mode : "cluster"
  }]
}

注意:您需要將 exec_mode 設定為 cluster,以便 PM2 知道您要在各個執行個體之間進行負載平衡,預設情況下它不會這樣做

然後啟動程序檔案

pm2 start processes.json

-iinstances 選項可以是

  • 0/max 將應用程式分散到所有 CPU
  • -1 將應用程式分散到所有 CPU - 1
  • 數字 將應用程式分散到 數字 個 CPU

重新載入

與會終止並重新啟動程序的 restart 相反,reload 會達成0 秒停機時間的重新載入。

重新載入應用程式

pm2 reload <app_name>

pm2 reload process.json
pm2 reload process.json --only api

如果重新載入系統無法重新載入您的應用程式,逾時將會回退到傳統的重新啟動。

優雅關閉

在生產環境中,您可能需要等待處理完剩下的查詢或關閉所有連線後才能退出應用程式。在PM2 重新載入背景中,這可能會轉換成非常漫長的重新載入或無法運作的重新載入(回退到重新啟動),這表示您的應用程式在退出時仍有開啟的連線。您可能需要另外關閉所有資料庫連線、清除資料佇列或其他事項。

若要優雅關閉應用程式,您可以捕捉SIGINT 訊號(PM2 在退出時發出的第一個訊號),並執行動作來等待/清除所有這些狀態

process.on('SIGINT', function() {
   db.stop(function(err) {
     process.exit(err ? 1 : 0);
   });
});

深入了解優雅關閉 功能。

讓您的應用程式無狀態

請確定您的應用程式是無狀態的,表示沒有任何本機資料儲存在處理程序中,例如,工作階段/WebSocket 連線、工作階段記憶體和相關資料。使用 Redis、Mongo 或其他資料庫在處理程序之間共用狀態。

關於如何撰寫高效、適合生產環境的無狀態應用程式的另一項資源是十二要素應用程式宣言

為此頁面做出貢獻