<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

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

      介紹

        眾所周知,Node.js運行在Chrome的JavaScript運行時平臺上,我們把該平臺優雅地稱之為V8引擎。不論是V8引擎,還是之后的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 < 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);
      }
      復制代碼

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

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

      使用PM2的方式

      內置的cluster

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

      復制代碼
      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 <number of workers>參數用來告訴PM2以cluster_mode的形式運行你的app(對應的叫fork_mode),后面的數字表示要啟動的工作線程的數量。如果給定的數字為0,PM2則會根據你CPU核心的數量來生成對應的工作線程。

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

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

      實時擴展集群

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

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

        PM2的reload <app name>功能將依次重啟所有的工作線程。每一個線程會等待在新的線程創建之后才會被終止掉,因此,當你在產品環境部署新的代碼時,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,這些產品的貢獻者們一直在努力并使它們變得更好。

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

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

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

      posted @ 2016-12-28 21:51  Angelasp  閱讀(899)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 综合偷自拍亚洲乱中文字幕| 久久久久久久久毛片精品| 五月天丁香婷婷亚洲欧洲国产| 亚洲色最新高清AV网站| 99精品热在线在线观看视| 国产精品毛片无遮挡高清| 亚洲精品无码在线观看| 国产无人区码一区二区| 屏山县| 99国精品午夜福利视频不卡99 | 日韩乱码卡一卡2卡三卡四| 国产精品中文字幕二区| 影音先锋亚洲成aⅴ人在| 欧洲亚洲成av人片天堂网| 97久久超碰亚洲视觉盛宴| 亚洲AV成人片不卡无码| 国产精品中文一区二区| 26uuu另类亚洲欧美日本| 欧美日韩国产亚洲沙发| 国产亚洲精品综合99久久| 人妻精品久久久无码区色视| 娇妻玩4p被三个男人伺候| 精品亚洲一区二区三区四区| 国产免费午夜福利在线播放| 国产成人精品亚洲精品密奴| 国产日韩精品中文字幕| 墨竹工卡县| 99久久婷婷国产综合精品青草漫画| 精品久久免费国产乱色也| 丰满的少妇一区二区三区| 在线精品国产成人综合| 国产一区二区亚洲精品| 白嫩少妇激情无码| 中文字幕日韩精品有码| 久久精品第九区免费观看| 国产精品无码制服丝袜| 日本中文字幕在线播放| 欧美大屁股喷潮水xxxx| 国产极品美女高潮无套| 99久久99这里只有免费费精品| 云安县|