負載均衡概念入門

當個人電腦剛剛開始走進人們工作和生活領域時,一個家庭通常最多隻有 1 臺電腦。孩子們白天使用電腦玩遊戲,而大人們晚上通過電腦在論壇上灌水。但現如今只有一臺電腦的家庭很容易出現每個人在同一時間都需要使用電腦的情況。這或多或少與 IT 行業發生的情況相同。因爲計算機已經變得越來越普遍了,對服務和服務器的需求已經增加到它們可能因爲過度使用而宕機的程度。幸運的是,我們現在有負載均衡的概念來幫助我們處理這一需求。

什麼是負載均衡?

負載均衡是一個通用的術語,指的是爲了確保你所管理的資源得到有效分配而做的任何事情。對於網絡服務器的系統管理員來說,負載均衡通常意味着確保網絡服務器軟件(如 Nginx)配置了足夠的 worker 節點以處理激增的訪客。換句話說,如果一個網站突然變得非常受歡迎,其訪客數量在幾分鐘之內翻了幾倍,運行服務器的軟件必須能夠對這一情況做出反應,而不會讓用戶感到訪問變得不流暢。對於簡單的站點來說,只需要進行簡單的配置即可,但對於具有動態內容並且每個用戶幾個數據庫查詢的複雜站點,這可能是一個難以處理的問題。

這個問題本應隨着雲計算的發展而解決,但是,當一個網絡應用遇到意外的激增時,也有可能無法及時進行擴容。

當談及負載均衡的時候,請記住一點分佈式資源並不意味着均勻分配。並不是所有任務都一直需要所有可用的資源。一個智能的負載均衡策略應該只在合適的時候爲用戶和任何提供資源。當然,這通常是開發工程師處理而不是 IT 基礎架構部門的工作。異步應用可以當用戶短暫離開時而不在服務器上佔用有價值的資源。

負載均衡的工作原理

負載均衡通過在多個計算節點上分佈工作負載而避免了瓶頸。那些節點可能是數據中心的物理服務器、雲端中的容器、面向邊緣計算場景設置的服務器、在複雜應用程序框架中的 Java 虛擬機(Java Virtual Machines)或者運行在單個 Linux 服務器上的 daemon。

具體實現原理是將大問題拆分成若干個小任務,併爲每個任務分配指定計算機。例如,對於需要用戶登錄的網頁,網頁可能被託管在 Server A 上,與此同時登陸頁面以及所有身份驗證 lookups 被託管在 Server B 上。這種部署方式可以使得一個新用戶登錄到賬號上時無需從其他活躍用戶處使用資源。

雲端負載均衡

雲計算使用容器,所以通常沒有獨立的物理服務器來處理不同的任務(實際上,有許多獨立的服務器,但它們被集中在一起,作爲一個計算 "大腦")。相反,一個 "pod" 是由幾個容器創建的。當一個 pod 由於其用戶或任務負載而開始耗盡資源時,會生成一個相同的 pod。Pod 之間共享存儲和網絡資源,每個 pod 在創建時被分配到一個計算節點。pod 可以根據負載的需要創建或銷燬,這樣,無論有多少用戶,用戶都能體驗到一致的服務質量。

邊緣計算

邊緣計算在進行負載均衡時需要考慮到物理世界。雲是一個分佈式系統,但在實際上,雲的節點通常集中在幾個數據中心。用戶離運行雲的數據中心越遠,他們就必須克服更多的物理障礙以獲得最佳服務。即使有光纖連接和適當的負載均衡,位於 3000 公里外的服務器的響應時間也可能比 300 公里外的服務器響應時間更長。

邊緣計算將計算節點帶到雲的 “邊緣” 以試圖彌合地理鴻溝,從而形成一種用於雲端的衛星網絡,所以它在良好的負載均衡中也發揮了作用。

什麼是負載均衡算法?

負載均衡有很多策略,它們的複雜程度取決於所涉及的技術和需求的不同。負載均衡不一定很複雜,即使使用 Kubernetes 或 Keepalived 這樣的專業軟件,也要從一開始就進行負載均衡。

當你的應用程序可以自己採取簡單的預防措施時,不要依賴容器來均衡負載。如果你從一開始就把你的應用程序設計成模塊化且短暫的,那麼你就會從巧妙的網絡設計、容器編排以及未來的任何技術所帶來的負載均衡機會中受益。

一些流行的算法可以指導你作爲一個應用開發者或網絡工程師的工作,包括:

這些原則可以結合或加權,例如,在分配特別複雜的任務時,偏向於一個組中最強大的服務器。編排是常用的,這樣管理員就不必爲負載均衡鼓搗出完美的算法或策略,儘管有時要由管理員來選擇使用哪種負載均衡方案的組合。

期待意外的發生

負載均衡並不是真正要確保你的所有資源在整個網絡中得到均勻使用。負載均衡是指即使在意外情況發生時也要確保可靠的用戶體驗。良好的基礎架構可以承受計算機宕機、應用程序過載、網絡流量的猛烈攻擊和用戶錯誤。你可以開始思考如何讓服務具有彈性,並從頭開始設計相應的負載均衡。

原文鏈接:

https://opensource.com/article/21/4/load-balancing

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/WcCat_QFUY80C0eYnZb6gw