伺服器端負載均衡技術的本質原理
1、什麼是負載?
負載就是伺服器端的“資源”:主要就是CPU和IO。
前者適宜於計算密集型的任務,後者則對應資料密集型的任務。
2、負載均衡的前提
就是負載(或者說CPU/IO資源)可以切分,劃分到不同的計算機(或者CPU核)上去。
要做到這一點,首先底層的運算應該是可以中斷並排程的,IO是可以多路擴散的。否則一個簡單的CPU死迴圈指令this: jmp this(跳回自己)就會讓計算機什麼也幹不了,而IO嘛,IO要是不停地中斷阻塞了匯流排,計算機也會一樣啥也幹不了(不過正常情況下IO匯流排沒CPU內部匯流排快)
3、負載均衡的本質
負載既然可以切分到不同的計算機上去(分散式系統,這些計算機之間的一致性怎麼維護、事務ACID性質怎麼保持、怎麼提高可用性、CAP/BASE是另外的話題),那麼剩下來的關鍵是對外部的大規模併發請求做路由了。
首先假設每個請求對應伺服器端的一臺計算機處理,如果能夠將外部請求對應的負載比較均勻地分佈到各個計算機節點上去,則負載均衡無疑會做得比較成功。
不考慮分散式資料庫的後端技術,則負載均衡的核心就在於路由。這個路由,其實就是一個Hash函式。
函式的輸入是什麼呢?所有可供區分的外部使用者請求引數,比如:使用者ID、會話ID、請求引數、網路層地址,等等。
輸出是什麼呢?假設最終處理請求的計算機編號為1到N,則路由Hash函式的輸出就是[1..N]之間的一個整數。
很顯然,如果輸入均勻(隨機),Hash函式可以採取線性Hash運算,就可以確保負載均衡地落在這N個處理節點上。無疑是,輸入有時候可能並不均勻,往往落在某個區域性區間的請求過多,這往往會導致熱點/瓶頸,假如這部分不均勻輸入樣本的總數相比總的輸入空間來說不是很大的話,理論上,還是可以找到一個能夠用的非線性Hash演算法(比如說SHA1/256之類),使得輸入仍然能夠均勻地落在區間[1..N]上。
4、多層次路由
實際應用中,前述路由Hash運算不是隻在一個點上執行,而是可能在多個層次上做,比如說:網路層LB技術LVS(Linux Virtual Server)、前端代理(帶Round Robin輪詢的HTTP反向代理、資料庫連線驅動代理)、DNS分派
這很容易讓人聯想到神經網路裡的多層前向/反饋網路(那個深度學習不就是增加中間節點的層次深度嗎),不管怎麼說,多層次的路由其實就是數學上的非線性Hash對映。
負載均衡的本質差不多就是這樣。對於實際應用來說,關鍵就在於設計一個Hash函式,使得對於此應用特定的資料而且,能夠做到均勻地分發到後端處理節點上。
相關文章
- 負載均衡技術(一)———負載均衡技術介紹負載
- 解密負載均衡技術和負載均衡演算法解密負載演算法
- 負載均衡技術介紹負載
- 負載均衡技術(二)———常用負載均衡服務介紹負載
- 負載均衡原理的解析負載
- 簡述負載均衡&CDN技術負載
- 伺服器負載均衡原理及實現伺服器負載
- gRPC負載均衡(客戶端負載均衡)RPC負載客戶端
- 搞懂分散式技術9:Nginx負載均衡原理與實踐分散式Nginx負載
- 簡述負載均衡和CDN技術負載
- WEBLOGIC負載均衡原理Web負載
- 六種實現負載均衡技術的方式負載
- 伺服器負載均衡伺服器負載
- 超實用:實現負載均衡技術的方式負載
- Nginx 負載均衡原理解讀Nginx負載
- 華納雲:伺服器負載均衡的原理和實現的方法伺服器負載
- 架構文摘:LSV負載均衡技術筆記架構負載筆記
- 客戶端負載均衡配置客戶端負載
- 負載均衡是什麼?怎麼理解負載均衡的部署方式和工作原理負載
- Istio流量治理原理之負載均衡負載
- nginx負載均衡原理分析到手動編寫簡易負載均衡器Nginx負載
- 淺析基於雲的DNS管理與負載均衡技術DNS負載
- windows伺服器第四層負載均衡_基於NLB負載均衡詳解Windows伺服器負載
- Pulsar負載均衡原理及最佳化負載
- 你所聽到的技術原理、技術本質到底是什麼?
- Nginx負載均衡反向代理伺服器Nginx負載伺服器
- 伺服器叢集和負載均衡伺服器負載
- 負載均衡負載
- 負載均衡伺服器的主要用途是什麼?負載均衡的方法是什麼?負載伺服器
- 技術|如何為MySQL MGR實現簡單的負載均衡代理?MySql負載
- 【kafka】-分割槽-消費端負載均衡Kafka負載
- Oracle RAC 客戶端負載均衡配置Oracle客戶端負載
- gRPC負載均衡(自定義負載均衡策略)RPC負載
- 負載均衡的迷惑負載
- 負載均衡器部署方式和工作原理負載
- Nginx 兩臺伺服器配置負載均衡!!!Nginx伺服器負載
- 前端技術分享:Nginx負載均衡影片,基礎的實戰應用前端Nginx負載
- 全網最詳細的負載均衡原理圖解負載圖解