Linux中國

負載均衡的初學者指南

當個人電腦剛開始發展的時候,一個家庭可能只有一台(或更少)的電腦。孩子們白天玩電腦遊戲,家長們晚上在業務支撐系統上做會計、編程,或者漫遊。然而,想像一下今天一個只有一台電腦的家庭,你可以預想到這樣會產生什麼樣的衝突。每個人都想使用電腦,而只有一副鍵盤和滑鼠。

隨著計算機變得越來越普遍,IT 行業或多或少也出現了同樣的情況。對服務和伺服器的需求已經增長到了會因為用量過大而停機的程度。幸運的是,我們現在有了負載均衡的概念來幫助我們處理需求。

負載均衡是什麼?

負載均衡是一個通用術語,指的是為了確保高效分配所管理的資源而做的事情。對於 Web 伺服器的系統管理員來說,負載均衡通常意味著確保 Web 伺服器軟體(例如 Nginx)配置了足夠的工作節點來處理激增的訪客。換言之,如果一個網站突然變得非常受歡迎,其訪問者在幾分鐘內增加了四倍,那麼運行伺服器的軟體必須能夠響應每個訪問者,並不能讓任何訪問者發現服務質量下降。對於簡單的網站,這就像修改一行配置選項一樣簡單,但對於具有動態內容的複雜站點,每個用戶都有多個資料庫查詢,這可能是一個嚴重的問題。

這個問題本應隨著雲計算的發展而解決,但當 Web 應用程序遇到意外激增時,無法擴展也不是不可能。

在進行負載均衡時,需要記住的重要一點是,高效地分配資源並不一定意味著平均地分配資源。並非所有任務都在任何時候都需要所有的可用資源。一個智能的負載均衡策略僅在需要資源時才為用戶和任務提供資源。這通常是應用程序開發人員的領域,而不是 IT 基礎架構的責任。非同步應用程序對於確保離開計算機休息的用戶不佔用伺服器上的寶貴資源至關重要。

負載均衡是怎麼工作的?

負載均衡通過在多個計算節點上分配工作負載來避免瓶頸。這些節點可能是數據中心中的物理伺服器、雲環境中的容器、用於邊緣計算而戰略性放置的伺服器、複雜應用程序框架中的獨立 Java 虛擬機(JVM),或在單個 Linux 伺服器上運行的守護進程。

這個想法是把一個大問題分成幾個小任務,並把每個任務分配給一台專用計算機。例如,對於一個要求用戶登錄的網站,該網站可能託管在伺服器 A 上,而登錄頁面和所有隨附的身份驗證查詢都託管在伺服器 B 上。這樣,新用戶登錄帳戶時就不會佔用其它使用該站點的用戶的資源。

雲計算負載均衡

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

邊緣計算

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

邊緣計算將計算節點帶到雲計算的「邊緣」,試圖彌合地理鴻溝,為雲計算形成一種衛星網路,因此它也在良好的負載均衡工作中發揮了作用。

什麼是負載均衡演算法?

有許多負載均衡策略,它們的複雜性取決於所涉及的技術和需求。負載均衡不必複雜,而且從一開始就負載均衡很重要,即使在使用 KubernetesKeepalived 這樣的專用軟體時也是如此。

當你可以設計應用程序,自己為它採取簡單的預防措施時,不要依賴容器來均衡負載。如果你從一開始就將應用程序設計為模塊化和臨時性的,那麼你將受益於通過巧妙的網路設計、容器編排和其他未來技術帶來的負載均衡機會。

可以指導應用程序開發人員或網路工程師工作的一些流行演算法包括:

  • 按順序將任務分配給伺服器(這通常被稱為輪詢調度)。
  • 將任務分配給當前最不繁忙的伺服器。
  • 將任務分配給具有響應最快的伺服器。
  • 隨機分配任務。

舉個例子,在分配特別複雜的任務時,可以組合或加權這些原則以分配到組中最強大的伺服器。通常使用 編排,這樣管理員就不必為負載均衡尋找完美的演算法或策略,儘管有時需要由管理員選擇使用哪種負載均衡方案組合。

預料意料之外

負載均衡實際上並不是要確保在整個網路中均勻使用所有資源。負載均衡實際上是確保即使發生意外情況也能提供可靠的用戶體驗。良好的基礎設施可以承受計算機崩潰、應用程序過載、網路流量衝擊和用戶錯誤。思考你的服務如何才能具有彈性,並從頭開始相應地設計負載均衡策略。

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

作者:Seth Kenlon 選題:lujun9972 譯者:FYJNEVERFOLLOWS 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國