簡體   English   中英

如何制作分布式node.js應用程序?

[英]How to make a distributed node.js application?

創建node.js應用程序非常簡單。

var app = require('express')();
app.get('/',function(req,res){
    res.send("Hello world!");
});

但是假設人們開始沉迷於你的Hello World! 應用程序並耗盡您的資源。 這個例子如何在實踐中擴大規模? 我不明白,因為是的,你可以在不同的計算機上打開幾個node.js實例 - 但是當有人訪問http://your_site.com/時,它直接針對那個特定的機器,那個特定的端口,那個特定的節點進程。 又怎樣?

有很多方法可以解決這個問題,但歸結為兩件事:

  1. 能夠為每台服務器使用更多核心
  2. 能夠擴展到超過一個服務器。

節點集群

對於第一個選項,您可以使用node-cluster或與seconde選項相同的解決方案。 node-clusterhttp://nodejs.org/api/cluster.html )本質上是一種內置方法,可將節點進程分為一個主服務器和多個工作服務器。 通常,您需要1個master和n-1到n個worker(n是可用內核的數量)。

負載平衡器

第二種選擇是使用負載均衡器,在多個工作者(在同一服務器上或服務器上)之間分配請求。

這里有多種選擇。 以下是一些:

還有一件事,一旦你開始有多個進程提供請求,你就不能再使用內存來存儲狀態,你需要一個額外的服務來存儲共享狀態,Redis( http://redis.io )是一個受歡迎的選擇,但是不是唯一的。

如果您使用cloudfoundry,heroku等服務,他們會為您設置,因此您只需擔心應用程序的邏輯(並使用服務來處理共享狀態)

我已經在節點上工作了很長一段時間,但最近有機會嘗試擴展我的節點應用程序,並且已經研究了相同的主題一段時間了,並且已經遇到了以下擴展的先決條件:

  1. 我的應用程序需要在每個運行多個節點實例的分布式系統上可用

  2. 每個系統都應該有一個負載均衡器,可以幫助在整個節點實例之間分配流量。

  3. 應該有一個主負載均衡器,它應該在分布式系統上的節點實例之間分配流量。

  4. 主平衡器應始終運行或應具有可靠的重啟機制以保持應用程序穩定。

對於上述要求,我遇到了以下情況:

  1. 使用cluster等模塊啟動系統中的多個節點實例。

  2. 始終使用nginx。 它是迄今為止我遇到的最簡單的創建負載均衡器的機制之一

  3. 使用HAProxy充當主負載均衡器。 關於如何使用它並使其永久運行的一些指示

有用的資源:

  1. 水平擴展node.js和websockets。
  2. 使用集群來利用多個核心。

隨着我的進步,我會不斷更新這個答案。

使用多台計算機的基本方法是將它們置於負載均衡器后面,並將所有流量指向負載均衡器。 這樣,有人會去http://my_domain.com ,它會指向負載均衡器機器。 負載均衡器的唯一目的(對於此示例,無論如何;理論上可以做得更多)是將流量委派給運行應用程序的給定計算機。 這意味着您可以擁有運行應用程序的x個計算機,但是外部計算機(在本例中為瀏覽器)可以轉到負載平衡器地址並轉到其中一個。 客戶端不(並且不必)知道實際處理其請求的機器。 如果您使用的是AWS ,那么設置和管理它非常容易。 請注意,Pascal的答案在此處提供了有關您的選項的更多詳細信息。

特別是使用Node,您可能需要查看Node Cluster模塊。 我對這個模塊並沒有很多經驗,但是它應該允許你在一台共享同一端口的機器上生成應用程序的多個進程。 還節點它仍然是實驗性的,我不確定它會有多可靠。

我建議你看一下http://senecajs.org ,一個Node.js的微服務工具包。 對於初學者來說,這是一個很好的起點,並開始考慮“服務”而不是單一的應用程序。

話雖如此,構建分布式applcations是很難的,需要時間來學習,需要很多的時候掌握它,而且通常你會面臨很多權衡性能,可靠性,manteinance等之間

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM