Node.js多核利用模塊cluster負載均衡_第1頁
Node.js多核利用模塊cluster負載均衡_第2頁
Node.js多核利用模塊cluster負載均衡_第3頁
Node.js多核利用模塊cluster負載均衡_第4頁
Node.js多核利用模塊cluster負載均衡_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Node.js多核利用(lìyòng)模塊cluster輔助(fǔzhù)均衡共十四頁回顧(huígù)Node內(nèi)置的cluster模塊Node.js固有的單線程模型經(jīng)常被認為是它的一個軟肋。不管你的機器上有多少CPU內(nèi)核,Node.js能用上的也僅僅是其中之一(某些操作會被有條件地卸載到線程池中。大多數(shù)程序只是在CPU的總時間上分了一杯羹,所以更好地利用可用的處理能力并不能起到多大作用(zuòyòng))。所以Node.js從v0.8開始,新增加了一個內(nèi)置的‘cluster’模塊。你可以用cluster模塊設(shè)置一個主進程作為管理者,由一或多個工人進程完成實際工作。cluster模塊最神奇之處在于所有工人線程都可以綁定到相同的請求處理端口和地址上。另外,它可以確保接進來的連接會被均勻地分配給監(jiān)聽著的工人線程...最起碼理論上是這樣的。共十四頁用現(xiàn)實檢驗(jiǎnyàn)理論從操作系統(tǒng)的角度來看這是可以理解的:上下文切換(掛起一個進程,然后重新激活另一個)是相當(dāng)昂貴的操作。如果你有n個進程全都等在同一個socket上,那么(nàme)喚醒最近被阻塞的進程是明智之舉,因為那樣可以最大限度地避免上下文切換。(當(dāng)然,調(diào)度器是一種復(fù)雜而又多變的野獸;上面只是對真實情況泛泛的解釋?;厩疤崾悄切┑玫絻?yōu)待的進程會仍然受到優(yōu)待)。共十四頁Node.jsv0.8和v0.10中分配連接的算法(suànfǎ)很簡單。當(dāng)工人進程調(diào)用http.Server#listen()或net.Server#listen()時,Node.js會給主進程發(fā)送一條消息,讓它創(chuàng)建一個服務(wù)器socket,綁定好,并分享給這個工人進程。如果已經(jīng)有綁定好的socket了,主進程就會跳過“創(chuàng)建和綁定”那一步,只需分享已有的socket就可以了Node.jsV0.12新特性之Cluster輪轉(zhuǎn)法負載均衡cluster模塊換成了round-robin方式共十四頁在Nodejs中使用集群還是不容易的。Javascript的單線程屬性讓nodejs下的應(yīng)用很難使用現(xiàn)代機器的多核特性。比如下面的代碼實現(xiàn)了一個http服務(wù)器的主干部分。這部分代碼只會執(zhí)行(zhíxíng)在一個線程上,不管這段代碼運行的機器是單核的cpu還是1000個內(nèi)核的cpu。共十四頁varhttp=require("http");varport=parseInt(process.argv[2]);http.createServer(function(request,response){console.log("Requestfor:"+request.url);response.writeHead(200);response.end("helloworld\n");}).listen(port);共十四頁使用(shǐyòng)多核特性只需要一點修改,上面的代碼就可以(kěyǐ)把cpu的所有核心都用起來。上面的示例代碼將使用cluster模塊重構(gòu)。cluster模塊可以(kěyǐ)讓你很容易的創(chuàng)建多個分享端口的進程。每一個進程使用一個系統(tǒng)核心,也就是代碼中的numCPUs變量中cpu核心的一個。每一個子進程都實現(xiàn)了HTTPserver,并監(jiān)聽指定的端口。共十四頁共十四頁在Node.js這里,增加(zēngjiā)更多CPU核數(shù)其實也不難做到,使用PM2如下命令:pm2startapp.js-imax(無需修改任何代碼從單核垂直擴展到多核)共十四頁多機器(jīqì)的均衡使用cluster模塊,你就可以更高效的使用硬件。然而,你還是被限制在單一的機器上。如果你的應(yīng)用有客觀的訪問量,你最終還是把負載分部在不同的機器上。使用reverseproxyserver可以把并發(fā)的訪問負載到不同的服務(wù)器上。Nodejitsu開發(fā)了node-http-proxy模塊,一個開源的nodejs應(yīng)用代理服務(wù)。使用以下命令可以安裝(ānzhuāng)這個模塊:npminstallhttp-proxy實際的使用可以參考以下代碼。在這里例子中負載被分發(fā)到兩臺服務(wù)器上。首先測試反轉(zhuǎn)代理,確保HTTPserver運行在8080和8081兩個端口上。接下來,運行反轉(zhuǎn)代理,然后用瀏覽器訪問這個代理。如果一切正常的話,你會發(fā)現(xiàn)請求被兩個服務(wù)器交替處理。當(dāng)然,這個例子只使用了一臺機器。然而,如果你有多臺機器的話,你可以在一臺機器上運行反向代理服務(wù)器,其他的機器上運行HTTPserver。共十四頁共十四頁使用nginx負載(fùzài)均衡使用nodejs寫的反向代理有一個好處是你使用的技術(shù)都是一樣的。但是,在生產(chǎn)環(huán)境下,更多使用的是nginx來處理負載均衡。nginx是一個開源的HTTPserver和反向代理工具,尤其擅長處理靜態(tài)文件,比如:CSS和HTML。因此(yīncǐ),nginx常被用于處理站點的靜態(tài)文件,和分發(fā)動態(tài)請求到nodejs的服務(wù)器上。要實現(xiàn)nginx的負載均衡,只需要安裝nginx,之后把nodejs服務(wù)器作為upstreamresource添加在配置文件中。配置文件的路勁一般是{nginx-root}/conf/nginx.conf,{nginx-root}是nginx安裝的根目錄。整個的配置文件請參考下面的示例。當(dāng)然,我們只需要用到其中的一小部分。Nginx并不支持單機同一個端口的負載平衡共十四頁本教程旨在介紹如何把單線程的Nodejs應(yīng)用運行在多臺機器的多個核心上。你也可以學(xué)到如何使用nodejs或者nginx建立一個負載均衡。當(dāng)然本文不是深入的介紹如何在產(chǎn)品環(huán)境下運行的。因此(yīncǐ),如果你使用的是nginx,還有很多其他的可以做的,比如緩存,來提高系統(tǒng)性能。你也會需要使用forever,如果崩潰的話這個工具可以重啟你的nodejs進程。共十四頁內(nèi)容(nèiróng)總結(jié)Node.js多核利用模塊cluster。另外,它可以確保接進來的連接會被均勻地分配給監(jiān)聽著的工人線程...最起碼理論上是這樣的。Javascript的單

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論