負載均衡,程式猿必備的知識儲備

2021-07-11 14:39:40 字數 2356 閱讀 1059

開頭先理解一下所謂的「均衡」

不能狹義地理解為分配給所有實際伺服器一樣多的工作量,因為多台伺服器的承載能力各不相同,這可能體現在硬體配置、網路頻寬的差異,也可能因為某台伺服器身兼多職,我們所說的「均衡」,也就是希望所有伺服器都不要過載,並且能夠最大程式地發揮作用。

一、http重定向

當http**(比如瀏覽器)向web伺服器請求某個url後,web伺服器可以通過http響應頭資訊中的location標記來返回乙個新的url。這意味著http**需要繼續請求這個新的url,完成自動跳轉。

效能缺陷:

1、吞吐率限制

主站點伺服器的吞吐率平均分配到了被轉移的伺服器。現假設使用rr(round robin)排程策略,子伺服器的最大吞吐率為1000reqs/s,那麼主伺服器的吞吐率要達到3000reqs/s才能完全發揮三台子伺服器的作用,那麼如果有100台子伺服器,那麼主伺服器的吞吐率可想而知得有大?相反,如果主服務的最大吞吐率為6000reqs/s,那麼平均分配到子伺服器的吞吐率為2000reqs/s,而現子伺服器的最大吞吐率為1000reqs/s,因此就得增加子伺服器的數量,增加到6個才能滿足。

2、重定向訪問深度不同

有的重定向乙個靜態頁面,有的重定向相比複雜的動態頁面,那麼實際伺服器的負載差異是不可預料的,而主站伺服器卻一無所知。因此整站使用重定向方法做負載均衡不太好。

二、dns負載均衡

dns負責提供網域名稱解析服務,當訪問某個站點時,實際上首先需要通過該站點網域名稱的dns伺服器來獲取網域名稱指向的ip位址,在這一過程中,dns伺服器完成了網域名稱到ip位址的對映,同樣,這樣對映也可以是一對多的,這時候,dns伺服器便充當了負載均衡排程器,它就像http重定向轉換策略一樣,將使用者的請求分散到多台伺服器上,但是它的實現機制完全不同。

使用dig命令來看下」baidu」的dns設定

可見baidu擁有三個a記錄

相比http重定向,基於dns的負載均衡完全節省了所謂的主站點,或者說dns伺服器已經充當了主站點的職能。但不同的是,作為排程器,dns伺服器本身的效能幾乎不用擔心。因為dns記錄可以被使用者瀏覽器或者網際網路接入服務商的各級dns伺服器快取,只有當快取過期後才會重新向網域名稱的dns伺服器請求解析。也說是dns不存在http的吞吐率限制,理論上可以無限增加實際伺服器的數量。

特性:

1、可以根據使用者ip來進行智慧型解析。dns伺服器可以在所有可用的a記錄中尋找離用記最近的一台伺服器。

2、動態dns:在每次ip位址變更時,及時更新dns伺服器。當然,因為快取,一定的延遲不可避免。

不足:

1、沒有使用者能直接看到dns解析到了哪一台實際伺服器,加伺服器運維人員的除錯帶來了不便。

2、策略的侷限性。例如你無法將http請求的上下文引入到排程策略中,而在前面介紹的基於http重定向的負載均衡系統中,排程器工作在http層面,它可以充分理解http請求後根據站點的應用邏輯來設計排程策略,比如根據請求不同的url來進行合理的過濾和轉移。

3、如果要根據實際伺服器的實時負載差異來調整排程策略,這需要dns伺服器在每次解析操作時分析各伺服器的健康狀態,對於dns伺服器來說,這種自定義開發存在較高的門檻,更何況大多數站點只是使用第三方dns服務。

4、dns記錄快取,各級節點的dns伺服器不同程式的快取會讓你暈頭轉向。

5、基於以上幾點,dns伺服器並不能很好地完成工作量均衡分配,最後,是否選擇基於dns的負載均衡方式完全取決於你的需要。

三、反向**負載均衡

這個肯定大家都有所接觸,因為幾乎所有主流的web伺服器都熱衷於支援基於反向**的負載均衡。它的核心工作就是**http請求。

相比前面的http重定向和dns解析,反向**的排程器扮演的是使用者和實際伺服器中間人的角色:

1、任何對於實際伺服器的http請求都必須經過排程器

2、排程器必須等待實際伺服器的http響應,並將它反饋給使用者(前兩種方式不需要經過排程反饋,是實際伺服器直接傳送給使用者)

特性:

1、排程策略豐富。例如可以為不同的實際伺服器設定不同的權重,以達到能者多勞的效果。

2、對反向**伺服器的併發處理能力要求高,因為它工作在http層面。

3、反向**伺服器進行**操作本身是需要一定開銷的,比如建立執行緒、與後端伺服器建立tcp連線、接收後端伺服器返回的處理結果、分析http頭部資訊、使用者空間和核心空間的頻繁切換等,雖然這部分時間並不長,但是當後端伺服器處理請求的時間非常短時,**的開銷就顯得尤為突出。例如請求靜態檔案,更適合使用前面介紹的基於dns的負載均衡方式。

4、反向**伺服器可以監控後端伺服器,比如系統負載、響應時間、是否可用、tcp連線數、流量等,從而根據這些資料調整負載均衡的策略。

5、反射**伺服器可以讓使用者在一次會話週期內的所有請求始終**到一台特定的後端伺服器上(粘滯會話),這樣的好處一是保持session的本地訪問,二是防止後端伺服器的動態記憶體快取的資源浪費。

程式的負載均衡 網路模型與負載均衡

這裡簡要介紹osi網路模型,實際應用的網路模型,以及通過網路模型了解各層的負載均衡器如何工作。osi網路模型有7層,從低到高分別為 osi的物理層規範是有關傳輸介質的特性,這些規範通常也參考了其他組織制定的標準。連線頭 幀 幀的使用 電流 編碼及光調製等都屬於各種物理層規範中的內容。物理層常用多個規...

程式的負載均衡 應用程式負載均衡器概述

點 藍字關注,謝謝支援 www.iloveaws.cn 我們開始今天的課程內容。應用程式負載均衡器是aws推出的新一代負載均衡器,支援http以及https協議。當然,還有很多應用程式負載均衡器所支援的功能上面沒有列出。按照這個思路在本節課,我接下來將快速演示應用程式負載均衡器的 基於路徑的路由功能...

程式的負載均衡 什麼是負載均衡,它的作用是什麼?

負載均衡是什麼?負載均衡是一項基本的網路服務,主要是為了解決公司業務的併發壓力,增強網路處理能力,減輕單個裝置的資源壓力,提高整體服務效能。總是提到負載均衡,它的作用是什麼?客戶端的流量將首先到達負載均衡伺服器。負載均衡伺服器通過某種排程演算法將流量分配到不同的應用程式伺服器。同時,負載均衡伺服器還...