3分鐘帶你了解負載均衡服務
03-19
一個互聯網產品在搭建服務時可能經常會遇到以下困境:搭建的單節點 web服務性能和可靠性都無法達到要求,節點掛掉=服務異常;直接使用外網提供服務,經常會擔心被人攻破,且公司運維團隊水平較低,一不小心就會有打開外網埠的情況。這些場景下如果加入負載均衡服務問題便會迎刃而解。
什麼是負載均衡服務
負載均衡,是現代計算機領域的基礎服務之一。其基本原理是通過運行在前面的負載均衡服務,按照指定的負載均衡演算法,將流量分配到後端服務集群上,從而為系統提供並行擴展的能力。負載均衡服務一般都會有內外網隔離、健康檢查等功能,從而提高系統的安全性和可用性。
下圖就是一個標準的負載均衡服務應用場景:負載均衡服務的功能及特徵
流量分發
這個是負載均衡服務的核心功能,作為統一的流量入口,負載均衡服務會把流量分發到後端的多個節點上,從而實現集群的橫向擴展。當需要擴容時,只需要在負載均衡服務後面加入新的節點就可以了,而不用改變入口。對於有狀態的服務來說,還需要啟用會話保持來保證把流量分發到固定的節點上去。
基於應用層內容的流量分發。七層服務還存在著更為複雜的應用場景:外網的 web服務默認使用 80埠,但經常也會有多個不同域名的網站需要使用同樣一個出口 IP的情況。這時候就需要通過應用層解析,根據用戶的訪問域名把同一個埠的流量分發到不同的後端服務中去。而隨著結構的進一步拆分,還存在著同一個域名的服務根據 url分流到不同後端集群的情況,這種情況就需要進一步的分流和拆分。系統高可用
通過加入後端多個節點,可以顯著地提高服務的可用性。而且負載均衡服務一般會集成健康檢查功能,在後端節點出現異常時會把請求轉發到健康的節點上去,從而實現異常的自動處理。很多負載均衡服務還會提供多 AZ支持,支持跨 AZ的高可用和後端部署。在單個機房宕機時仍然可以做到服務可用。負載均衡服務本身一般都會採用專門的冗餘設備,和專門的故障保證策略,保證自身的可用性。在雲計算環境下,負載均衡服務一般都可以提供四個九級別的可靠性保證(99.99%),而通過加入多 AZ(機房級別)甚至多 Region(地區級別),還可以進一步提高服務的可用性。(蜂巢的多 AZ方案也會在幾個月後跟大家見面,敬請期待)
在線擴容/縮容
當負載均衡服務與雲計算結合之後,可以簡單地實現資源的擴容/縮容,並且可以做到在線服務的彈性伸縮。以擴容為例,當需要擴容時,可以預先初始化好需要擴容的節點,然後通過負載均衡接入,實現在線業務的並行擴容。如果通過服務方提供的 open api,結合監控等其他信息,還可以實現自定義的彈性伸縮策略,實現高峰期預先擴容,低峰縮容。負載均衡服務的使用建議及常見誤區
1. 優先使用無狀態服務
有狀態服務和無狀態服務,原本是各有優勢,並沒有明顯的優劣之分,但是在大集群、服務化的場景下,無狀態服務則更有優勢。因為有狀態服務在服務架構較為簡單時雖然有易開發,高並發等優勢,但隨著業務規模的擴大,也會造成異常恢復困難、難以並行擴展等問題。而在這種場景下,無狀態服務在服務管理、並行擴展方面有著先天的優勢。一般來講,使用負載均衡,大多是服務規模較大,業務負載的場景,因此更推薦使用無狀態化的服務。2. 注意健康檢查配置!
健康檢查是負載均衡服務的重要功能之一,也是服務判斷後端節點是否存活的重要標準(很多場景下甚至是唯一標準)。不僅僅會影響到顯示的狀態,還會影響到用戶的服務質量,甚至造成整個服務異常。下面舉兩個例子:示例1:健康檢查判斷異常參數過於敏感,在系統壓力較大時錯誤判斷而移除正常的節點,導致剩下節點壓力增大,從而繼續發出移除操作,直到全部節點移除,系統雪崩。應對之策:在線上壓力較大,偶現超時的場景下,建議採用快速拉起,緩慢宕機的策略。通過適當拉長節點異常宕機時周期,減少錯誤判斷的概率,而在服務正常時快速接入服務,緩解負載。示例2:健康檢查宕機參數設置時間過長,結果在節點宕機時無法快速拉起,在異常時影響到了用戶訪問。應對之策:在線上壓力較小、健康檢查介面響應正常的情況下,可以考慮縮短宕機時間,這樣在異常時可以快速移除異常節點,減少對用戶的影響。因此,健康檢查參數並沒有一個固定的原則,關鍵還是要看業務本身的特點,以及對業務來說,最重要的是什麼:是業務穩定,還是用戶體驗?3. 接入負載均衡無法保障高可用
有一個常見誤區就是認為服務接入負載均衡就算高可用了。而事實上實際服務的高可用性是需要通盤考慮的事情,比如全鏈路移除單點,服務本身對於異常的處理等。因此說,接入負載均衡僅僅是保證了接入點的高可用(如果掛單點那接入都不是高可用的),真正要實現高可用還需要全局保證,負載均衡只是構築服務高可用的一個工具,而不是全部。4. 接入負載均衡後並不會實現業務加速
負載均衡是一個高性能的轉發服務,但是對於單次請求來說,無法做到性能加速。如果你本來的請求要 100ms返回,使用負載均衡之後也不會把你的請求縮短到 10ms。而且從理論上說,無論任何形式的負載均衡,都只會增長調用鏈而不是縮短(一些軟負載均衡,如 DNS,Service的 Iptables不會增加調用鏈本身,但是也會加入額外操作)。因此,對於單個請求,結果往往是變慢而不是加速(一般負載均衡服務增加的成本是微乎其微的 ms以內,應用完全感知不到)。負載均衡對性能的提升,是通過分擔負載帶來的並行擴展能力從而提升服務的穩定性。而由於業務並行擴展,造成單台壓力變小,從而提升服務的整體性能。另外,由於負載均衡服務往往有更可靠的接入端(BGP網路),更高效的轉發設施(專用轉發設備和鏈路),更好的優化,一般性能還是遠遠優於自己搭建的轉發服務。因此很多場景是會有更好的性能表現。小結
在這裡,主要介紹了負載均衡服務的基本內容和負載均衡服務的主要功能及特徵。下一節會進入實戰篇,介紹如何在蜂巢中使用負載均衡服務,敬請期待。推薦閱讀: