零停機部署(Zero Downtime Deployment)
意思是你有 4 個正在運行的實例(instances),您可以一次重新加載一個實例,當一個實例正在重新加載時,其他 3 個實例將使服務器保持活動狀態。因此,您可以更新您的網絡服務器,而無需離線甚至一秒鐘。
這邊介紹的是 PM2 & Nuxt 的用法。
對於大部分工程師來說,設置和使用 PM2 cluser 非常容易,但是我們嘗試在我們的 nuxt server 上使用卻會遇到了一些問題。
首先,創建我們的 nuxt 服務器:
$ pm2 start npm --name MyAppName -- start
但是在嘗試啟動多個實例時,我們很快就會遇到問題。
現在雖然這是默認在 PM2 的fork
模式下運行,但即使我們指定在cluster
模式下運行,我們仍然會遇到錯誤。
如果我們只使用 1 個實例並嘗試重新加載服務器怎麼辦?好吧,由於 Nuxt 在後台的工作方式,如果我們嘗試在服務器運行時重建服務器,在刪除構建文件並為新構建重新散列後,我們將遇到 404 錯誤。如果我們的靜態文件夾中的文件被更改,我們也會遇到問題。
那麼如果我們不能只是重建和重新加載一個服務器,我們也不能運行多個實例,那麼我們如何實現零停機部署?
nuxt-start: https://www.npmjs.com/package/nuxt-start
我們可以在目錄底下建立一個檔案 ecosystem.config.js
# ecosystem.config.js
module.exports = {
apps : [{
name : '[prod] MyAppName', // App name that shows in `pm2 ls`
exec_mode : 'cluster', // enables clustering
instances : 4, // or max
script : './node_modules/nuxt-start/bin/nuxt-start.js',
// The magic key
}]
};
啟動方式
$ pm2 start ecosystem.config.js
搞定!現在可以生成 Nuxt 服務器的多個實例以獲得更好的性能,並利用零停機時間部署在更新期間保持網站在線。
參考