-
1 # 會點程式碼的大叔
-
2 # 冰魄秋雨
什麼事負載均衡
網路的負載均衡是一種動態均衡技術,常見的實現方式是透過一些工具實時地分析資料包,掌握網路中的資料流量狀況,把任務合理均衡地分配出去。
通俗的講,在網站創立初期,我們一般都使用單臺機器對臺提供集中式服務,但隨著業務量越來越大,無論效能還是穩定性上都有了更大的挑戰。
這時候我們就會想到透過擴容的方式來提供更好的服務。我們一般會把多臺機器組成一個叢集對外提供服務。
然而,我們的網站對外提供的訪問入口都是一個的,比如www.taobao.com。
那麼當用戶在瀏覽器輸入 www.taobao.com 的時候如何將使用者的請求分發到叢集中不同的機器上呢,這就是負載均衡在做的事情。
當前大多數的網際網路系統都使用了伺服器叢集技術,叢集即將相同服務部署在多臺伺服器上構成一個叢集整體對外提供服務,這些叢集可以是 Web 應用伺服器叢集,也可以是資料庫伺服器叢集,還可以是分散式快取伺服器叢集等。
最近幾年很火的「雲計算」以及分散式架構,本質上也是將後端伺服器作為計算資源、儲存資源,由某臺管理伺服器封裝成一個服務對外提供,客戶端不需要關心真正提供服務的是哪臺機器,在它看來,就好像它面對的是一臺擁有近乎無限能力的伺服器,而本質上,真正提供服務的是後端的叢集。
圖中電腦請求淘寶網伺服器叢集,中間會經過負載均衡器,將請求落到一個具體的伺服器上。
常見的負載均衡技術1. LVS技術
LVS(Linux Virtual Server),也就是 Linux 虛擬伺服器。
使用 LVS 技術要達到的目標是:透過 LVS 提供的負載均衡技術和 Linux 作業系統實現一個高效能、高可用的伺服器群集,它具有良好可靠性、可擴充套件性和可操作性。從而以低廉的成本實現最優的服務效能。
LVS 架設的伺服器集群系統由三個部分組成:最前端的負載均衡層(Loader Balancer),中間的伺服器群組層,用 Server Array 表示,最底層的資料共享儲存層,用 Shared Storage 表示。
2. Nginx
是一個網頁伺服器,它能反向代理 HTTP、HTTPS,、SMTP、POP3、IMAP、TCP的協議連結,以及一個負載均衡器和一個HTTP快取。
Nginx 主要用來做七層負載均衡,有時候也能夠負載TCP\IP層。
併發效能:官方支援每秒 5 萬併發,實際國內一般到每秒 2 萬併發,有最佳化到每秒 10 萬併發的。具體效能看應用場景。
3. HAProxy
HAProxy 也是使用較多的一款負載均衡軟體。HAProxy 提供高可用性、負載均衡以及基於 TCP 和 HTTP 應用的代理,支援虛擬主機,是免費、快速並且可靠的一種解決方案。
特別適用於那些負載特大的 Web站點。執行模式使得它可以很簡單安全的整合到當前的架構中,同時可以保護你的web伺服器不被暴露到網路上。
HAProxy 是一個使用 C 語言編寫的自由及開放原始碼軟體,其提供高可用性、負載均衡,以及基於 TCP 和 HTTP 的應用程式代理。Haproxy 主要用來做七層負載均衡。
回覆列表
如果專案的使用者量少、訪問量不大、資料量也不多的時候,一臺伺服器足以支撐,那麼直接專案部署一套,直接訪問使用就可以了,但是當用戶和資料量不斷增多,訪問量(併發量)不斷增加,一臺伺服器不在能夠支撐業務的時候,就需要使用多臺機器,設計高效能的叢集來應對。
那麼當我部署了多臺伺服器(這裡假如是兩臺),那麼呼叫方是如何訪問的呢?服務方如何均衡訪問的流量呢?這時候就需要引出負載均衡了。
負載均衡分類常見的負載均衡技術有三種:
DNS負載均衡:大概的原理是,當用戶訪問域名的時候,需要先透過DNS解析域名,找到對應的IP地址,在這個過程中,可以讓DNS伺服器,根據使用者的地理位置,返回不同的IP,這樣就可以實現負載均衡,同時也可以提升使用者的訪問速度。
軟體負載均衡:用軟體來實現流量的分發,有基於傳輸層實現的負載均衡,比如LVS,也有基於應用層來實現的,比如Nginx;軟體負載均衡實現起來很簡單,只需要在伺服器上部署並進行配置就可以實現;
硬體負載均衡:用硬體來實現負載均衡,比如F5(F5 Network Big-IP),這是一臺網路裝置,效能很高,同時價格非常的貴。
從另外一個角度對負載均衡進行分類,可以分成兩種:
服務端負載均衡:呼叫方只訪問負載均衡的IP,不需要管後面有多少臺伺服器。
客戶端負載均衡:服務端部署多臺伺服器,客戶端知道每臺伺服器的地址,並透過一定的路由規則,均衡地訪問,比如Spring Cloud Ribbon,當然客戶端的負載均衡,通常是需要服務註冊發現的配合。
常見的負載均衡排程演算法輪循(Round Robin):將請求迴圈分配給有效的伺服器;
加權輪循(Weighted Round Robin):輪訓的升級版,給後端的伺服器分配不同的許可權,根據權重進行迴圈分配;比如A、B伺服器權重分別是100和50,那麼請求會保持2:1的比例進行分配;
最少連線數(Least Connection):分配的請求根據每臺伺服器當前所開啟的連線數來進行分配;
源IP雜湊(Source IP Hash):對呼叫方的IP進行HASH運算,並根據這個計算結果分配伺服器,這樣的好處是同一個主機的請求,始終會被同一個伺服器響應(但是不一定均衡)。