Follow us 登錄 注冊

北京軟件開發公司:WebSocket連接的負載平衡方法

負載均衡問題一直是管理大型系統的熱點問題。負載平衡旨在優化資源使用,最大化吞吐量,最小化響應時間,避免任何單一資源的過載,因此解決此問題對于性能至關重要。在本文中,我們將介紹可能的問題解決方案。

為了更好地了解WS負載平衡,讓我們深入一下TCP套接字背景。默認情況下,單個服務器可以處理65,536個套接字連接,因為它是可用的TCP端口的最大數量。因此,作為WS連接具有TCP性質,每個WS客戶端都需要一個端口,我們可以肯定地說,websocket連接的數量也受到限制。

其實這是一個半真相。服務器可以處理每個IP地址65,536個套接字。因此,可以通過向服務器添加額外的網絡接口來輕松擴展數量。同時,跟蹤服務器上存在多少連接非常重要。

一旦超出限制,您可能會遇到其他TCP連接的許多問題(例如,無法通過ssh連接到服務器)。因此,限制應用程序代碼中每個節點的WS連接是一個好主意。當我們處理websockets時,我們在應用程序中也是一樣的。

一旦我們得到了主要的限制和克服它的方法,我們繼續進行負載平衡。下面我將介紹我們在一個項目中嘗試過的3種方法。請注意,所有系統部件已部署到AWS,一些提示和提示僅適用于Amazon配置。

ELB方法

實現負載平衡的最簡單方法就是使用彈性負載平衡器AWS提供的。可以將ELB切換到TCP模式,從而實現任何類型的TCP連接(包括websockets)的負載平衡。這種方法給出:

  • LB自動故障切換
  • 負載平衡節點自動縮放;
  • 非常容易的設置

基本上,對于大多數常見的情況來說,這是一個很好的解決方案,直到你的負載飛速增長。在這種情況下,ELB變得太慢,無法建立新的連接。有可能聯系亞馬遜并要求他們“預熱”ELB,但是由于負載測試的目的,當我們需要快速建立數千個WS連接并且由于系統的可用性而為我們的客戶而不是我們的選擇。

軟件負載均衡器

我們已經嘗試過HAProxy作為負載均衡器。但是要使HAProxy正常工作,請記住我們上面已經討論過的端口限制問題。為了使HAProxy處理65k以上的連接,我們應該通過以下步驟:

1.創建一堆私有IP地址。要做到這一點,選擇您的Amazon Instance - >操作 - >網絡 - >管理專用IP地址。也就是增加了3個IP地址:192.168.1.1,192.168.1.2,192.168.1.3。只要記住,IP應該在與真實應用服務器相同的子網中;

2.通過SSH連接到您的HAProxy實例并運行以下命令:

$> ifconfig eth0:1 192.168.1.1  $> ifconfig eth0:2 192.168.1.2  $> ifconfig eth0:3 192.168.1.3  

這將向實例添加3個虛擬網絡接口;

3.配置HAProxy。以下是haproxy.cfg3個Erlang節點接受WS連接的文件。

listen erlang_front :8888          mode            http          balance         roundrobin          timeout connect 1s          timeout queue 5s          timeout server 3600s          option httpclose          option forwardfor          server          erlang-1 192.168.0.1:8888  source 192.168.1.1          server          erlang-2 192.168.0.2:8888  source 192.168.1.2          server          erlang-3 192.168.0.3:8888  source 192.168.1.3  

現在,HAProxy可以處理超過65,536個websocket連接,并且可以通過添加虛擬網絡接口輕松增加連接的限制。此外,它可以建立新的連接相當快。

這種方法似乎是可行的,盡管存在以下缺點:

  • 故障轉移HAProxy實例應使用以下工具手動設置keepalived;
  • 在添加新的Erlang節點時,必須完成重新配置HAProxy的任務;
  • 隨著連接數量的增加,水平方向不能縮放HAProxy。我們只有垂直選項可用,所以當我們有越來越多的活躍用戶時,我們應該為HAProxy(和HAProxy鏡像節點)獲得越來越多昂貴的實例。

我們很好,這些缺點,但更簡單的解決方案被實施。這是可能的,因為我們已經有一些代碼實現了,我們的系統設計允許我們使用自定義的方法。

定制方法

要繼續前進,請查看顯示系統架構的下圖。

北京Web軟件開發公司

我們有一個JavaScript客戶端應用程序,一個負責用戶授權的認證應用程序和具有主要應用程序功能的Erlang應用程序。流程如下:

  1. 客戶端向認證應用程序發送具有憑據的HTTP請求;
  2. 認證應用程序檢查信譽,生成令牌并通過HTTP請求將其發送到Erlang群集;
  3. Erlang應用程序確認收到的令牌并向Auth應用程序發送確認的HTTP響應;
  4. 認證應用程序向客戶端應用程序發送HTTP響應。此響應包括生成的令牌;
  5. 客戶端使用令牌通過我們的HAProxy負載平衡器與Erlang應用程序建立websocket連接。

這是我們的基本流程略有修改。我們向Erlang應用程序添加了一個簡單的模塊來跟蹤每個Erlang節點上的Websocket連接數。由于Erlang的“分布式”性質,每個節點都知道其他節點的連接。

所以我們可以選擇一個連接較少的節點。我們拿這個節點的公共IP地址,然后發送回auth應用程序。然后,認證應用程序將該IP與令牌一起發送回客戶端。客戶端建立與接收的IP地址和令牌的WS連接。所以最終圖如下所示:

北京WebSocket軟件開發公司

現在我們可以:

  • 擺脫WS負載平衡器,這使得我們的系統變得不那么復雜;
  • 添加Erlang節點,而不需要重新配置系統的其他部分。

此外:

  • WS連接現在均勻分布在Erlang節點之間;
  • 系統容易水平縮放;
  • 我們不必為Ellang節點使用Elastic IP。


相關文章推薦
由于Java的靈活性,跨平臺兼容性和穩定性,公司現在享有大量的軟件開發機會。北京軟件開發...
北京app軟件開發公司移動應用已經變得非常普遍,業務范圍從零售巨頭到軟件創業公司投資于...
北京軟件公司隨著許多行業已經轉向成功的客戶關系,客戶體驗正在成為企業在整個收入周...
在今天互聯網時代,很多企業都有快入的想法,但有苦于沒有這方面的團隊,是自己組建團隊 ...
現如今很多企業公司都想定制一款自己公司的app,但是有對APP開發這方面不懂,來回對比后最...
軟件設計可分為兩個部分:編碼設計與UI設計。一般情況下大家都很熟悉編碼設計,但是對UI...
北京軟件開發公司對于企業來說要做一套適合自己的軟件前,具體要知道那些事項......
隨著移動網絡改變時代科技時總是帶來新的網絡設計趨勢,北京軟件開發2017年網頁設計將有.....
有無聽說過定制開發這個詞?軟件為什么要定制開發?快極互動和大家分享下核心機密,速...
在過去幾年間,移互聯已發展成具有豐富多樣性和成功多樣性的移動產業。隨之之后就是各類...
北京軟件開發公司搞了這幾年的金融公司P2P業務數據對接,現在就給大家分享一下金融網站...
北京軟件開發公司國內在線教育發展從此前的火爆狀態逐漸轉為理性平靜,更多的在線教育...
平码有几种买法