當我的電腦剛剛開始走進人們工做和生活領域時,一個家庭一般最多隻有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/articl...