負載均衡:將資源分配到某一時刻最需要它的地方
當個人電腦剛開始發展的時候,一個家庭可能只有一臺(或更少)的電腦。孩子們白天玩電腦遊戲,家長們晚上在業務支撐系統上做會計、程式設計,或者漫遊。然而,想象一下今天一個只有一臺電腦的家庭,你可以預想到這樣會產生什麼樣的衝突。每個人都想使用電腦,而只有一副鍵盤和滑鼠。
隨著計算機變得越來越普遍,IT 行業或多或少也出現了同樣的情況。對服務和伺服器的需求已經增長到了會因為用量過大而停機的程度。幸運的是,我們現在有了負載均衡的概念來幫助我們處理需求。
負載均衡是一個通用術語,指的是為了確保高效分配所管理的資源而做的事情。對於 Web 伺服器的系統管理員來說,負載均衡通常意味著確保 Web 伺服器軟體(例如 Nginx)配置了足夠的工作節點來處理激增的訪客。換言之,如果一個網站突然變得非常受歡迎,其訪問者在幾分鐘內增加了四倍,那麼執行伺服器的軟體必須能夠響應每個訪問者,並不能讓任何訪問者發現服務質量下降。對於簡單的網站,這就像修改一行配置選項一樣簡單,但對於具有動態內容的複雜站點,每個使用者都有多個資料庫查詢,這可能是一個嚴重的問題。
這個問題本應隨著雲端計算的發展而解決,但當 Web 應用程式遇到意外激增時,無法擴充套件也不是不可能。
在進行負載均衡時,需要記住的重要一點是, 高效地分配資源並不一定意味著 平均地分配資源。並非所有任務都在任何時候都需要所有的可用資源。一個智慧的負載均衡策略僅在需要資源時才為使用者和任務提供資源。這通常是應用程式開發人員的領域,而不是 IT 基礎架構的責任。非同步應用程式對於確保離開計算機休息的使用者不佔用伺服器上的寶貴資源至關重要。
負載均衡透過在多個計算節點上分配工作負載來避免瓶頸。這些節點可能是資料中心中的物理伺服器、雲環境中的容器、用於邊緣計算而戰略性放置的伺服器、複雜應用程式框架中的獨立 Java 虛擬機器(JVM),或在單個 伺服器上執行的守護程式。
這個想法是把一個大問題分成幾個小任務,並把每個任務分配給一臺專用計算機。例如,對於一個要求使用者登入的網站,該網站可能託管在伺服器 A 上,而登入頁面和所有隨附的身份驗證查詢都託管在伺服器 B 上。這樣,新使用者登入帳戶時就不會佔用其它使用該站點的使用者的資源。
雲端計算使用 容器,因此通常沒有單獨的物理伺服器來處理不同的任務(實際上,有許多單獨的伺服器,但它們被聚集在一起作為一個計算“大腦”)。相反,“容器莢pod” 是由幾個容器建立的。當一個容器莢由於其使用者或任務負載而開始耗盡資源時,會生成一個相同的容器莢。容器莢共享儲存和網路資源,每個容器莢在建立時被分配給一個計算節點。可以根據負載需要建立或銷燬容器莢,這樣無論有多少使用者,使用者都可以體驗到一致的服務質量。
邊緣計算 在負載均衡時考慮到了現實世界。雲端計算自然是一個分散式系統,但實際上,雲端計算的節點通常集中在幾個資料中心。使用者離執行雲端計算的資料中心越遠,他們為獲得最佳服務所必須克服的物理障礙就越多。即使有光纖連線和適當的負載均衡,位於 3000 英里外的伺服器的響應時間也可能比僅僅 300 英里外的響應時間長。
邊緣計算將計算節點帶到雲端計算的“邊緣”,試圖彌合地理鴻溝,為雲端計算形成一種衛星網路,因此它也在良好的負載均衡工作中發揮了作用。
有許多負載均衡策略,它們的複雜性取決於所涉及的技術和需求。負載均衡不必複雜,而且從一開始就負載均衡很重要,即使在使用 Kubernetes 和 Keepalived 這樣的專用軟體時也是如此。
當你可以設計應用程式,自己為它採取簡單的預防措施時,不要依賴容器來均衡負載。如果你從一開始就將應用程式設計為模組化和臨時性的,那麼你將受益於透過巧妙的網路設計、容器編排和其他未來技術帶來的負載均衡機會。
可以指導應用程式開發人員或網路工程師工作的一些流行演算法包括:
- 按順序將任務分配給伺服器(這通常被稱為輪詢排程)。
- 將任務分配給當前最不繁忙的伺服器。
- 將任務分配給具有響應最快的伺服器。
- 隨機分配任務。
舉個例子,在分配特別複雜的任務時,可以組合或加權這些原則以分配到組中最強大的伺服器。通常使用 編排,這樣管理員就不必為負載均衡尋找完美的演算法或策略,儘管有時需要由管理員選擇使用哪種負載均衡方案組合。
負載均衡實際上並不是要確保在整個網路中均勻使用所有資源。負載均衡實際上是確保即使發生意外情況也能提供可靠的使用者體驗。良好的基礎設施可以承受計算機崩潰、應用程式過載、網路流量衝擊和使用者錯誤。思考你的服務如何才能具有彈性,並從頭開始相應地設計負載均衡策略。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2918611/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 負載均衡和動態負載均衡分別是什麼?-VeCloud負載Cloud
- 資料庫的讀寫分離與負載均衡策略資料庫負載
- gRPC負載均衡(自定義負載均衡策略)RPC負載
- gRPC負載均衡(客戶端負載均衡)RPC負載客戶端
- 負載均衡負載
- gRPC的負載均衡RPC負載
- 全網最詳細的負載均衡原理圖解負載圖解
- IP負載均衡負載
- WebSocket負載均衡Web負載
- nginx負載均衡Nginx負載
- NGINX 負載均衡Nginx負載
- 【Nginx】負載均衡Nginx負載
- 負載均衡---ribbon負載
- LoadBalancer負載均衡負載
- LVS 負載均衡負載
- Nginx—tomcat負載均衡動靜分離群集NginxTomcat負載
- OceanBase 負載均衡的魅力負載
- 4.8 負載均衡的概念負載
- 負載均衡的那些事?負載
- 負載均衡的種類負載
- Nginx 動靜分離與負載均衡的實現Nginx負載
- Mycat實現mysql的負載均衡讀寫分離MySql負載
- 負載均衡技術(一)———負載均衡技術介紹負載
- 解密負載均衡技術和負載均衡演算法解密負載演算法
- 做了反向代理和負載均衡的nginx配置檔案簡單示例(nginx.conf) HTTP負載均衡/TCP負載均衡負載NginxHTTPTCP
- 負載均衡技術(二)———常用負載均衡服務介紹負載
- 【知識分享】四層負載均衡和七層負載均衡負載
- 基於開源Tars的動態負載均衡實踐負載
- windows第七層負載均衡 基於IIS的ARR負載均衡詳解Windows負載
- 全域性負載均衡與CDN內容分發負載
- Nginx負載均衡模式Nginx負載模式
- 漫談負載均衡負載
- 負載均衡簡介負載
- golang grpc 負載均衡GolangRPC負載
- 負載均衡詳解負載
- 負載均衡知多少?負載
- Linux LVS 負載均衡Linux負載
- 淺談負載均衡負載