1. 程式人生 > >高性能負載均衡之分類架構

高性能負載均衡之分類架構

開發 般的 cdn 優點 內核 包括 錯誤 tps 響應時間

原文:高性能負載均衡之分類架構

今天跟大家分享一下關於高性能負載均衡的分類架構相關的知識。

當然了,首先要強調一點,並不是所有的項目一開始就要求高性能的。前面我也提到過。如果不是太清楚的可以參考這篇文章:架構設計之六個復雜度來源

下面進入正題,說說高性能負載均衡之分類架構。

單服務器無論如何優化,無論采用多好的硬件,總會有一個性能天花板,單服務器的性能無法滿足業務需求時,就需要設計高性能集群來提升系統整體的處理性能。

高性能集群的本質很簡單,通過增加更多的服務器來提升系統整體的計算能力。由於計算機本身存在一個特點:同樣的輸入數據和邏輯,無論在哪臺服務器上執行,都應該得到相同的輸出。因此高性能集群設計的復雜度主要體現在任務分配上,如何保障任務的正常分配人,如何保障用戶訪問時不會因為因為某種原因出現錯誤影響服務,這就需要設計合理的任務分配策略,將計算任務分配到多臺服務器上執行。

高性能集群的復雜性主要體現在需要增加一個任務分配器,以及為任務選擇一個合適的任務分配算法。

對於任務分配器,現在更流行的叫法是“負載均衡器”。但這個名稱有一定的誤導性,個人覺得任務分配器更形象具體。

之所以覺得叫"負載均衡器"有一定的誤導性,是因為任務分配不僅僅只是考慮計算單元的負載均衡,不同的任務分配算法目標是不一樣的,有的基於負載考慮,有的基於性能(吞吐量、響應時間)考慮,有的基於業務考慮。考慮“負載均衡”已經成為了事實上的標準術語,這裏我也用“負載均衡”來代替“任務分配”,但請時刻記住負載均衡不只是為了計算單元的負載達到的均衡狀態。

一、負載均衡分類架構

常用的負載均衡系統包括3種:DNS負載均衡、硬件負載均衡和軟件負載均衡。

負載均衡的分類架構我在前面一篇文章中說過,那篇文章叫做談談CDN,當然了,那個著重於CDN,對於負載均衡僅僅只是一個簡單講解,今天的這篇文章從某個角度看是對前面的補充和完善。

1.DNS負載均衡

DNS是最簡單也是最常見的負載均衡方式,一般用來實現地理級別的均衡。

比如,北方的用戶訪問北京的機房,南方的用戶訪問深圳的機房。

DNS負載均衡也可以叫做鏈路負載均衡,示意圖如下:

技術分享圖片

DNS負載均衡實現簡單、成本低,但也存在粒度太粗、負載均衡算法少等缺點。仔細分析一下優缺點。

其優點有:

(1)簡單、成本低:負載均衡工作交給DNS服務器處理,無需自己開發或者維護負載均衡設備;

(2)就近訪問,提升訪問速度:DNS解析距離用戶最近的服務器地址,可以加快訪問速度,改善性能;

其缺點有:

(1)更新不及時:DNS緩存的時間比較長,修改DNS配置後,由於緩存的原因,還是有很多用戶會繼續訪問修改前的IP,這樣的訪問會失敗,達不到負載均衡的目的,並且也會影響用戶正常使用業務;

(2)擴展性差:DNS負載均衡的控制權在域名商那裏,無法根據業務特點針對其做更多的定制化功能和擴展特性;

(3)分配策略比較簡單:

a.DNS負載均衡支持算法少;

b.不能區分服務器的差異(不能根據系統與服務的狀態來判斷負載);

c.也無法感知後端服務器的狀態;

針對DNS負載均衡的一些缺點,對於延時和故障敏感的業務,有一些公司自己實現了HTTP-DNS的功能,即使用HTTP協議實現一個私有的DNS系統。這樣的方案和通用的DNS優缺點正好相反。

2.硬件負載均衡

硬件負載均衡是通過單獨的硬件設備來實現負載均衡功能,這類設備和路由器、交換機類似,可以理解為一個用於負載均衡的基礎網絡設備。目前業界典型的硬件負載均衡設備有兩款:F5和A10。這類設備性能強勁、功能強大,但價格都不便宜,一般只有“土豪”公司才會考慮使用此類設備。普通業務量級的公司一是負擔不起,而是業務量沒達到,沒有必要為此浪費。

硬件負載均衡,如圖所示:

技術分享圖片

硬件負載均衡也有其優缺點,分析如下:

其優點:

(1)功能強大:全面支持各層級的負載均衡,支持全面的負載均衡算法,支持全局負載均衡;

(2)性能強大,對比一下,軟件負載均衡支持到10萬級並發已經很厲害了,硬件負載均衡可以支持100萬以上的並發;

(3)穩定性高:商用硬件負載均衡,經過良好的嚴格測試,經過大規模使用,穩定性高;

(4)支持安全防護:硬件均衡設備除具備負載均衡功能外,還具備防火墻、防DDOS攻擊等安全功能;

其缺點:

(1)價格安昂貴:最普通的一臺F5就是一臺“馬6”,好一點的就是“Q7”;

(2)擴展能力差:硬件設備,可以根據業務進行配置,但無法進行擴展和定制;

3.軟件負載均衡

軟件負載均衡通過負載均衡軟件來實現負載均衡功能,常見的有Nginx和LVS,其中Nginx是軟件的7層負載均衡,LVS是Linux內核的4層負載均衡。4層和7層的區別就在於協議和靈活性,Nginx支持HTTP、E-mail協議;而LVS是4層負載均衡,和協議無關,幾乎所有應用都可以做,例如聊天、數據庫等。

軟件和硬件的最主要區別就在於性能,硬件負載均衡性能遠遠高於軟件負載均衡性能。Nginx的性能是萬級,一般的Linux服務器上裝一個Nginx大概能到5萬/秒;LVS的性能是十萬級,據說可達到80萬/秒;而F5性能是百萬級,從200萬/秒到800萬/秒都有。

關於F5相關的信息,大家通過這個鏈接對F5有一個大概的了解:http://www.bjdj-info.com/index.php/chandetail/chandetail/datcid/163/flag1/180.html

當然了,除了這個之外,業界也有不少對Nginx這樣的高性能Web服務器進行改造以使其達到期望值。

關於軟件負載均衡圖,如下所示:

技術分享圖片

軟件負載均衡的優缺點如下。

其優點:

(1)簡單:無論是部署還是維護都比較簡單;

(2)便宜:只要買個Linux服務器,裝上軟件即可;

(3)靈活:4層和7層負載均衡可以根據業務進行選擇,也可以根據業務進行比較方便的擴展,例如可以通過Nginx的插件來實現業務的定制化功能;

其缺點(這個缺點主要是和硬件負載均衡進行對比,當然了,並不是說軟件負載均衡沒法用):

(1)性能一般:一個Nginx大約支撐5萬並發;

(2)功能沒有硬件負載均衡那麽強大;

(3)一般不具備防火墻和防DDOS功能等安全功能;

二、如何在實際中運用

上述三種負載均衡的分類架構,各有自己的所長,其實可以遵循一個組合原則來使用它們。

比如,DNS負載均衡用於實現地理級別的負載均衡;硬件負載均衡可以實現集群級別的負載均衡;軟件負載均衡用於實現機器級別的負載均衡。

以我公司目前來看,主要采用的還是軟件負載均衡,僅僅只是靠著阿裏雲的那幾臺機器來支撐著,當然了這對於目前而言已經足夠了。

其實實際中運用,還是取決於業務吧,想博客論壇這種,如果你的博客論壇做的很不錯每天幾十萬訪問量,如果不做上述的架構規劃,會影響用戶的使用體驗,從而降低用戶粘性。

如果你的項目僅僅只是一個適合某個特定領域,使用人群每天最多也就100人,個人覺得保險起見兩臺機器就足夠的。

小結:

本文著重將負載均衡的架構分類,有示例也有圖,同時也有理論方面的。之所以想到寫了這個也是看了李運華先生的《從0開始學架構》。另外我覺得看這個專欄的方式,最好還是挑自己喜歡感興趣的看,然後做點筆記順便根據它裏面的問題做個研究。我覺得這樣一來可以提高自己的興趣,二來動了腦子可以將知識轉化為身體的一部分。本人還是挺信奉一句名言,“知識就是力量”。

希望這篇文章能夠給讀者們帶來幫助,謝謝一直關註我的朋友們。

參考資料:

李運華專欄《從0開始學架構》

許令波《深入分析JavaWeb技術內幕》

說說CDN:https://www.cnblogs.com/youcong/p/9607448.html

高性能負載均衡之分類架構