搜尋
首頁web前端js教程使用PM2將Node.js的叢集變得更容易的方法

使用PM2將Node.js的叢集變得更容易的方法

Dec 21, 2017 am 09:19 AM
javascriptnode.js

眾所周知,Node.js運行在Chrome的JavaScript執行平台上,我們把這個平台優雅地稱之為V8引擎。不論是V8引擎,還是之後的Node.js,都是以單執行緒的方式運作的,因此,在多核心處理器的系統中並不能發揮最大的效能。本文主要介紹了詳解如何使用PM2將Node.js的叢集變得更容易,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟著小編過來看看吧,希望能幫助大家。

Node.js的cluster模組

幸運的是,Node.js給了我們一個cluster模組,它可以產生多個工作執行緒來共享同一個TCP連線。

它是如何運作的呢?

首先,Cluster會建立一個master,然後根據你指定的數量複製出多個server app(也稱為工作執行緒)。它透過IPC通道與工作線程之間進行通信,並使用內建的負載平衡來更好地處理線程之間的壓力,該負載平衡使用了Round-robin演算法(也被稱之為循環演算法)。

當使用Round-robin調度策略時,master accepts()所有傳入的連線請求,然後將對應的TCP請求處理傳送給選取的工作執行緒(該方式仍透過IPC來進行通訊)。

那要如何來使用呢?

下面是一個最基本的例子:

var cluster = require('cluster'); 
var http  = require('http'); 
var os   = require('os');

var numCPUs = os.cpus().length;

if (cluster.isMaster) { 
 // Master:
 // Let's fork as many workers as you have CPU cores

 for (var i = 0; i <p>當然,你可以指定任意數量的工作線程,線程的數量不僅限於CPU核心的數量,因為它只是作為一個運行在CPU上的子線程。 </p><p>正如你所看到的,要使其正常運行,你需要將你的程式碼封裝到cluster的處理邏輯中,並添加一些額外的程式碼來指定當一個執行緒掛掉之後如何進行處理。 </p><p>使用PM2的方式</p><p>內建的cluster</p><p>PM2內部包含了上述的所有處理邏輯,因此你不必對程式碼做任何修改。我們將上面的程式碼還原成最原始的形式:</p><pre class="brush:php;toolbar:false">var http = require('http');

http.createServer(function(req, res) { 
 res.writeHead(200);
 res.end("hello world");
}).listen(8080);

然後在控制台執行:

$ pm2 start app.js -i 4

-i 參數用來告訴PM2以cluster_mode的形式運行你的app(對應的叫fork_mode),後面的數字表示要啟動的工作線程的數量。如果給定的數字為0,PM2則會根據你CPU核心的數量來產生對應的工作執行緒。

不論什麼情況下,保持你的apps一直運行

如果任意一個工作線程掛掉了,不用擔心,PM2會立即將其重啟。當然,你也完全可以在任何時候手動重啟這些線程:

即時擴展集群

任何時候,如果你需要增加工作線程的數量,可以透過pm2 scale 來擴充叢集。參數指定工作執行緒的數量,被用來增加或減少群集數。你也可以透過pm2 scale app +3的方式來指定要增加多少工作執行緒。

在產品環境實作零停機更新

PM2的reload 功能將依序重新啟動所有的工作執行緒。每個執行緒會等待在新的執行緒建立之後才會被終止掉,因此,當你在產品環境部署新的程式碼時,server會不間斷地一直保持運作。

使用gracefulReload功能可以達到相同的目的,不同的是它不會立即終止工作線程,而是透過IPC發送一個shutdown訊號來關閉所有當前的連接並處理一些自訂的任務,然後再優雅地退出。如下面的程式碼:

process.on('message', function(msg) { 
 if (msg === 'shutdown') {
  close_all_connections();
  delete_cache();
  server.close();
  process.exit(0);
 }
});

將PM2配置成自動啟動

想要PM2在伺服器重新啟動後自動執行之前的應用,可以先透過pm2 start啟動你的應用,然後執行下面的命令:

pm2 save

這將在~/.pm2目錄下產生一個dump.pm2文件,裡面描述了當前PM2上運行著的所有應用。然後執行指令:

pm2 startup [platform]

注意有必要加入可選參數platform以明確告知pm2目前的系統環境。這樣,下次當伺服器重新啟動時,PM2會自動運行先前儲存的應用程式。

結論

Cluster模組的功能非常強大,使用PM2會使它變得更容易。在Node 0.10.x時代cluster.js還只是個試驗品,但從Node 0.11.x開始已經逐漸成熟並開始準備正式發布,當然也包括Node 0.12.x版本。強烈建議使用最新版的Node.js和PM2,這些產品的貢獻者一直在努力並使它們變得更好。

相關建議:

Redis叢集建立全記錄

關於叢集部署的10篇文章建議

簡單介紹mysql集群(圖)

以上是使用PM2將Node.js的叢集變得更容易的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
超越瀏覽器:現實世界中的JavaScript超越瀏覽器:現實世界中的JavaScriptApr 12, 2025 am 12:06 AM

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

使用Next.js(後端集成)構建多租戶SaaS應用程序使用Next.js(後端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:23 AM

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

如何使用Next.js(前端集成)構建多租戶SaaS應用程序如何使用Next.js(前端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:22 AM

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript:探索網絡語言的多功能性JavaScript:探索網絡語言的多功能性Apr 11, 2025 am 12:01 AM

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的演變:當前的趨勢和未來前景JavaScript的演變:當前的趨勢和未來前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

神秘的JavaScript:它的作用以及為什麼重要神秘的JavaScript:它的作用以及為什麼重要Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python還是JavaScript更好?Python還是JavaScript更好?Apr 06, 2025 am 12:14 AM

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

如何安裝JavaScript?如何安裝JavaScript?Apr 05, 2025 am 12:16 AM

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。