3分鐘帶你瞭解負載均衡服務

網易雲社群發表於2018-11-27

歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。



一個網際網路產品在搭建服務時可能經常會遇到以下困境:搭建的單節點 web服務效能和可靠性都無法達到要求,節點掛掉=服務異常;直接使用外網提供服務,經常會擔心被人攻破,且公司運維團隊水平較低,一不小心就會有開啟外網埠的情況。這些場景下如果加入負載均衡服務問題便會迎刃而解。

什麼是負載均衡服務


負載均衡,是現代計算機領域的基礎服務之一。其基本原理是通過執行在前面的負載均衡服務,按照指定的負載均衡演算法,將流量分配到後端服務叢集上,從而為系統提供並行擴充套件的能力。

負載均衡服務一般都會有內外網隔離、健康檢查等功能,從而提高系統的安全性和可用性。

下圖就是一個標準的負載均衡服務應用場景:

3分鐘帶你瞭解負載均衡服務

負載均衡服務的功能及特徵

流量分發


這個是負載均衡服務的核心功能,作為統一的流量入口,負載均衡服務會把流量分發到後端的多個節點上,從而實現叢集的橫向擴充套件。當需要擴容時,只需要在負載均衡服務後面加入新的節點就可以了,而不用改變入口。對於有狀態的服務來說,還需要啟用會話保持來保證把流量分發到固定的節點上去。

基於應用層內容的流量分發。七層服務還存在著更為複雜的應用場景:外網的 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網路),更高效的轉發設施(專用轉發裝置和鏈路),更好的優化,一般效能還是遠遠優於自己搭建的轉發服務。因此很多場景是會有更好的效能表現。

小結


在這裡,主要介紹了負載均衡服務的基本內容和負載均衡服務的主要功能及特徵。下一節會進入實戰篇,介紹如何在蜂巢中使用負載均衡服務,敬請期待。



網易云為您提供負載均衡服務,歡迎點選免費試用。

相關文章:
【推薦】 Android輸入法彈出時覆蓋輸入框問題


相關文章