常见互联网slb方案
轉自:https://blog.csdn.net/qinglianchen0851/article/details/84306448
僅做個人備份,瀏覽請看原文
目錄
關于負載均衡
常見互聯網slb方案
第一層:客戶端到反向代理層
第二層:反向代理層到站點層
第三層:站點層到服務層
第四層:訪問數據層
數據的均衡
請求的均衡
range水平切分
id哈希水平切分
總結
關于負載均衡
關于負載均衡,其實在網上有許多的定義。而作為云計算的從業者,最經常接觸到的就是云負載均衡SLB,我總結了兩個特點和作用:分流和災備。負載均衡(Load Balance)是分布式系統架構設計中必須考慮的因素之一,它通常是指,將請求/數據均勻分攤到多個操作單元上執行,負載均衡的關鍵在于 分發 !各種負載均衡的算法,也都是為了滿足這個分發二字。
常見互聯網slb方案
?根據上圖,可以分為:
- 客戶端層
- 反向代理層
- 站點層
- 服務層
- 數據層
根據請求的自頂向下,每一層上游請求可以調用多個下游服務。根據負載均衡的調度算法,將請求分發給下層的服務。
第一層:客戶端到反向代理層
?客戶端 -> 反向代理層的負載均衡。這里主要是通過 ”DNS輪詢“實現。
通俗來講,即DNS-server對于一個域名設置多個解析IP(這里指負載均衡的IP),這里的主要的算法是利用了”輪詢算法。
第二層:反向代理層到站點層
?
反向代理,即將客戶端的請求轉發到服務器上,然后服務器返回的結果轉發給客戶端。
反向代理層到站點層的負載均衡主要是通過”nginx“本身實現(七層轉發),nginx是泛指反向代理,但是也是應用最廣泛的反向代理服務器。
而轉發的規則(算法),主要是通過修改nginx.conf的配置文件實現:
這里介紹主要幾種算法:
- 請求輪詢
- 最少連接數
- 加權
【畫外音】站點層可以存儲session,但強烈不建議這么做,站點層無狀態是分布式架構設計的基本原則之一,session最好放到數據層存儲。
第三層:站點層到服務層
?
服務層也叫中間層,通過增加抽象,解耦兩個交互的邏輯關系。服務層只提供有限的通用接口,理論上服務集群能夠提供無限性能,性能出現瓶頸,服務層一處集中優化
站點層到服務層的負載均衡,是通過“服務連接池”實現的。
上游連接池會建立與下游服務多個連接,每次請求會“隨機”選取連接來訪問下游服務。除了負載均衡,服務連接池還能夠實現***故障轉移、超時處理、限流限速、ID串行化***等諸多功能。
第四層:訪問數據層
在數據量很大的情況下,由于數據層(db/cache)涉及數據的水平切分,所以數據層的負載均衡更為復雜一些,它分為“數據的均衡”,與“請求的均衡”。
數據的均衡
數據的均衡是指:水平切分后的每個服務(db/cache),數據量是均勻的。
請求的均衡
請求的均衡是指:水平切分后的每個服務(db/cache),請求量是均勻的。
同時,根據水平切分的方式,主要又分為range水平切分和ID哈希水平切分。
range水平切分
?
每一個數據服務,存儲一定范圍的數據:
- user0服務:存儲uid范圍1-1kw
- user1服務:存儲uid范圍1kw-2kw
優點:
規則簡單,service只需判斷一下uid范圍就能路由到對應的存儲服務
數據均衡性較好
比較容易擴展,可以隨時加一個uid[2kw,3kw]的數據服務
不足:
請求的負載不一定均衡,一般來說,新注冊的用戶會比老用戶更活躍,大range的服務請求壓力會更大
id哈希水平切分
?每一個數據服務,存儲某個key值hash后的部分數據:
user0服務:存儲偶數uid數據
user1服務:存儲奇數uid數據
優點:
規則簡單,service只需對uid進行hash能路由到對應的存儲服務
數據均衡性較好
請求均勻性較好
不足:
不容易擴展,擴展一個數據服務,hash方法改變時候,可能需要進行數據遷移
總結
負載均衡(Load Balance)是分布式系統架構設計中必須考慮的因素之一,它通常是指,將請求/數據均勻分攤到多個操作單元上執行,其的關鍵在于均勻:
- 反向代理層的負載均衡,是通過“DNS輪詢”實現的
- 站點層的負載均衡,是通過“nginx”實現的
- 服務層的負載均衡,是通過“服務連接池”實現的
- 數據層的負載均衡,要考慮“數據的均衡”與“請求的均衡”兩個點,常見的方式有“按照范圍水平切分”與“hash水平切分”
總結
以上是生活随笔為你收集整理的常见互联网slb方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英企利用人工智能监测员工活动
- 下一篇: 博客大户