亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解如何使用PM2將Node.js的集群變得更加容易

 更新時間:2017年11月15日 10:59:01   作者:Jaxu  
本篇文章主要介紹了詳解如何使用PM2將Node.js的集群變得更加容易,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

介紹

眾所周知,Node.js運行在Chrome的JavaScript運行時平臺上,我們把該平臺優(yōu)雅地稱之為V8引擎。不論是V8引擎,還是之后的Node.js,都是以單線程的方式運行的,因此,在多核心處理器的系統(tǒng)中并不能發(fā)揮其最大的性能。

Node.js的cluster模塊

幸運的是,Node.js給我們提供了cluster模塊,它可以生成多個工作線程來共享同一個TCP連接。

它是如何運作的呢?

首先,Cluster會創(chuàng)建一個master,然后根據(jù)你指定的數(shù)量復(fù)制出多個server app(也被稱之為工作線程)。它通過IPC通道與工作線程之間進(jìn)行通信,并使用內(nèi)置的負(fù)載均衡來更好地處理線程之間的壓力,該負(fù)載均衡使用了Round-robin算法(也被稱之為循環(huán)算法)。

當(dāng)使用Round-robin調(diào)度策略時,master accepts()所有傳入的連接請求,然后將相應(yīng)的TCP請求處理發(fā)送給選中的工作線程(該方式仍然通過IPC來進(jìn)行通信)。

那如何來使用呢?

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

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 < numCPUs; ++i) {
  cluster.fork();
 }
} else {
 // Worker:
 // Let's spawn a HTTP server
 // (Workers can share any TCP connection.
 // In this case its a HTTP server)

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

當(dāng)然,你可以指定任意數(shù)量的工作線程,線程的數(shù)量不僅限于CPU核心的數(shù)量,因為它只是作為一個運行在CPU上的子線程。

正如你所看到的,要使其正常運行,你需要將你的代碼封裝到cluster的處理邏輯中,并添加一些額外的代碼來指定當(dāng)一個線程掛掉之后如何進(jìn)行處理。

使用PM2的方式

內(nèi)置的cluster

PM2內(nèi)部包含了所有上述的處理邏輯,因此你不必對代碼做任何修改。我們將上面的代碼還原成最原始的形式:

var http = require('http');

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

然后在控制臺執(zhí)行:

$ pm2 start app.js -i 4

-i <number of workers>參數(shù)用來告訴PM2以cluster_mode的形式運行你的app(對應(yīng)的叫fork_mode),后面的數(shù)字表示要啟動的工作線程的數(shù)量。如果給定的數(shù)字為0,PM2則會根據(jù)你CPU核心的數(shù)量來生成對應(yīng)的工作線程。

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

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

實時擴展集群

任何時候,如果你需要增加工作線程的數(shù)量,可以通過pm2 scale <app name> <n>來對集群進(jìn)行擴展。參數(shù)<n>指定工作線程的數(shù)量,被用來增加或減少集群數(shù)。你也可以通過pm2 scale app +3的方式來指定要增加多少工作線程。

在產(chǎn)品環(huán)境實現(xiàn)零停機更新

PM2的reload <app name>功能將依次重啟所有的工作線程。每一個線程會等待在新的線程創(chuàng)建之后才會被終止掉,因此,當(dāng)你在產(chǎn)品環(huán)境部署新的代碼時,server會不間斷地一直保持運行。

使用gracefulReload功能可以達(dá)到相同的目的,不同的是它不會立即終止工作線程,而是通過IPC發(fā)送一個shutdown信號來關(guān)閉所有當(dāng)前的連接并處理一些自定義的任務(wù),然后再優(yōu)雅地退出。如下面的代碼:

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

將PM2配置成自動啟動

想要PM2在服務(wù)器重啟后自動運行之前的應(yīng)用,可以先通過pm2 start啟動你的應(yīng)用,然后執(zhí)行下面的命令:

pm2 save

這將在~/.pm2目錄下生成一個dump.pm2文件,里面描述了當(dāng)前PM2上運行著的所有應(yīng)用。然后執(zhí)行命令:

pm2 startup [platform]

注意有必要添加可選參數(shù)platform以明確告知pm2當(dāng)前的系統(tǒng)環(huán)境。這樣,下次當(dāng)服務(wù)器重啟時,PM2會自動運行之前保存的應(yīng)用。

結(jié)論

Cluster模塊的功能非常強大,使用PM2會使它變得更加容易。在Node 0.10.x時代cluster.js還只是個試驗品,但從Node 0.11.x開始已經(jīng)逐漸成熟并開始準(zhǔn)備正式發(fā)布,當(dāng)然也包括Node 0.12.x版本。強烈推薦使用最新版的Node.js和PM2,這些產(chǎn)品的貢獻(xiàn)者們一直在努力并使它們變得更好。

盡情享受PM2帶給Node.js集群操作的便利吧!

原文地址:https://keymetrics.io/2015/03/26/pm2-clustering-made-easy/

更多有關(guān)PM2的安裝和使用可以查看這里的文檔:http://pm2.keymetrics.io/docs/usage/quick-start/

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解node-ccap模塊生成captcha驗證碼

    詳解node-ccap模塊生成captcha驗證碼

    本篇文章主要介紹了node-ccap模塊生成captcha驗證碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • node靜態(tài)服務(wù)器實現(xiàn)靜態(tài)讀取文件或文件夾

    node靜態(tài)服務(wù)器實現(xiàn)靜態(tài)讀取文件或文件夾

    這篇文章主要介紹了node靜態(tài)服務(wù)器實現(xiàn)靜態(tài)讀取文件或文件夾,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • nodejs中轉(zhuǎn)換URL字符串與查詢字符串詳解

    nodejs中轉(zhuǎn)換URL字符串與查詢字符串詳解

    這篇文章主要介紹了nodejs中轉(zhuǎn)換URL字符串與查詢字符串詳解,需要的朋友可以參考下
    2014-11-11
  • Node.js中的模塊路徑解析規(guī)則和子模塊包

    Node.js中的模塊路徑解析規(guī)則和子模塊包

    NodeJS特性如事件驅(qū)動、異步編程、無阻塞IO,這些特性為它帶來了高效的性能和更少的代碼,require函數(shù)支持斜杠(/)或盤符(C:)開頭的絕對路徑,也支持./開頭的相對路徑,為了便于管理和使用,我們可以把由多個子模塊組成的大模塊稱做包,并把所有子模塊放在同一個目錄里
    2023-11-11
  • 詳解用node編寫自己的cli工具

    詳解用node編寫自己的cli工具

    這篇文章主要介紹了詳解用node編寫自己的cli工具,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • node.js基于mongodb的搜索分頁示例

    node.js基于mongodb的搜索分頁示例

    本篇文章主要介紹了node.js基于mongodb的搜索分頁示例,mongodb分頁很簡單,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。
    2017-01-01
  • Nodejs Express 通過log4js寫日志到Logstash(ELK)

    Nodejs Express 通過log4js寫日志到Logstash(ELK)

    這篇文章主要介紹了Nodejs Express 通過log4js寫日志到Logstash(ELK),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • 利用Node.js+Koa框架實現(xiàn)前后端交互的方法

    利用Node.js+Koa框架實現(xiàn)前后端交互的方法

    這篇文章主要給大家介紹了利用Node.js+Koa框架實現(xiàn)前后端交互的方法,文中介紹的非常詳細(xì),對大家具有一定的參考價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-02-02
  • node.js?實現(xiàn)手機號驗證碼登錄功能

    node.js?實現(xiàn)手機號驗證碼登錄功能

    這篇文章主要介紹了node.js?實現(xiàn)手機號驗證碼登錄功能,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • nodejs版本管理工具nvm的安裝與使用小結(jié)

    nodejs版本管理工具nvm的安裝與使用小結(jié)

    在項目開發(fā)過程中,使用到vue框架技術(shù),需要安裝node下載項目依賴,本文主要介紹了nodejs版本管理工具nvm的安裝與使用小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2024-01-01

最新評論