2016-05-08 41 views
3

我對Node.js非常陌生並且表達很快。我目前正在通過建立自己的服務來學習它。 我最近讀了關於羣集。我明白集羣是做什麼的。我無法理解的是如何在生產應用程序中使用羣集。如何在節點js中使用集羣?

我可以想到的一種方法是使用主進程來坐在前面,並以循環方式將傳入請求路由到下一個可用的子進程。我不確定這是如何設計使用的。我想知道在一個典型的Web應用程序中應該如何使用羣集。

謝謝。

回答

2

無論何時想要將請求處理分散到多個node.js進程中,node.js羣集模塊都可與node.js一起使用。當您希望提高處理更多請求/秒的能力並且在您的服務器中有多個CPU內核時,最常用這種方法。默認情況下,node.js的單個實例不會完全利用多個內核,因爲您在服務器中運行的核心Javascript是單線程的(使用一個內核)。 Node.js本身在內部使用線程來處理某些事情,但這還不太可能充分利用多核系統。爲每個CPU內核設置羣集化的node.js進程將使您可以更好地最大化可用的計算資源。

集羣還爲您提供了一些額外的容錯能力。如果一個羣集進程停止運行,那麼當禁用的羣集重新啓動時,仍然可以讓其他活動羣集爲請求提供服務。

node.js的集羣模塊有幾種不同的調度算法 - 您提到的循環法是一種。你可以在這裏閱讀更多關於:Cluster Round-Robin Load Balancing

因爲每個羣集都是一個單獨的進程,所以不同羣集進程之間不會有自動共享數據。因此,在沒有共享數據的地方,或者共享數據已經在可以被多個進程訪問的地方(比如在數據庫中),集羣最容易實現。請記住,單個node.js進程(如果寫入正確使用異步I/O而不是大量計算綁定)可以一次處理多個請求。當您想要擴展可擴展性超出一個實例可以提供的範圍時,就是羣集。

+0

謝謝。你是否建議主人建立這樣一種方式,當它得到一個請求時,它會將它重定向到一個可用的子進程,而子進程實際上負責從DB中獲取數據並做一些處理它並返回到用戶界面? –

+0

@Photon - 我建議你閱讀node.js集羣模塊的工作原理。通常的模式是讓它輪詢請求,接收羣集處理整個請求。就接收過程而言,它只是接收到一個請求並對其進行正常處理。 – jfriend00

+0

@ jfriend00集羣是否使用相同的事件循環? –