⑴ 伺服器負載均衡的幾種部署方式
路由模式部署靈活,約60%的用戶採用這種方式部署;橋接模式不改變現有的網路架構;服務直接返回(DSR)比較適合吞吐量大特別是內容分發的網路應用。約30%的用戶採用這種模式。 1、路由模式(推薦) 路由模式的部署方式如上圖。伺服器的網關必須設置成負載均衡機的LAN口地址,且與WAN口分署不同的邏輯網路。因此所有返回的流量也都經過負載均衡。這種方式對網路的改動小,能均衡任何下行流量。2、橋接模式 橋接模式配置簡單,不改變現有網路。負載均衡的WAN口和LAN口分別連接上行設備和下行伺服器。LAN口不需要配置IP(WAN口與LAN口是橋連接),所有的伺服器與負載均衡均在同一邏輯網路中。 由於這種安裝方式容錯性差,網路架構缺乏彈性,對廣播風暴及其他生成樹協議循環相關聯的錯誤敏感,因此一般不推薦這種安裝架構。 3、服務直接返回模式 這種安裝方式負載均衡的LAN口不使用,WAN口與伺服器在同一個網路中,互聯網的客戶端訪問負載均衡的虛IP(VIP),虛IP對應負載均衡機的WAN口,負載均衡根據策略將流量分發到伺服器上,伺服器直接響應客戶端的請求。因此對於客戶端而言,響應他的IP不是負載均衡機的虛IP(VIP),而是伺服器自身的IP地址。也就是說返回的流量是不經過負載均衡的。
⑵ 《見「微」知「著」系列——<負載均衡>篇》(四)Ribbon + Nacos Client 實現負載均衡
Ribbon是基於客戶端的負載均衡器,需主動開啟負載均衡功能。本文詳細介紹了如何通過Ribbon與Nacos Client結合實現負載均衡。
項目源碼完整地址:ribbon-nacos-client-demo子項目。
項目結構如下:ribbon-nacos-client-api模塊為公共介面模塊,ribbon-nacos-client-provider-demo為服務提供者模塊,ribbon-nacos-client-consumer-demo為消費者模塊。
POM文件包含了父模塊及四個子模塊的配置。
Ribbon-nacos-client-api模塊核心代碼為RibbonNacosService介面,其中getLocalIp方法返回當前服務IP和埠信息,驗證負載均衡是否生效。
ribbon-nacos-client-provider-demo模塊的application.yml入口類中啟用@EnableDiscoveryClient註解,該註解可使服務自動注冊至注冊中心,服務消費者可通過此中心發現可用服務。
controller提供getLocalIp方法測試介面調用。
ribbon-nacos-client-consumer-demo模塊同樣配置@EnableDiscoveryClient用於服務發現。
NacosRibbonRuleConfig初始化NacosRule,RestTemplate實例,GlobalNacosClientConfig配置全局負載均衡。
controller提供getLocalIp方法測試負載均衡。
部署3台伺服器,每台伺服器上部署服務提供者實例,192.168.10.1部署服務消費者實例。Nacos控制台顯示服務信息,服務實例權重相同或不同情況下負載均衡效果明顯。
通過調整服務實例權重可驗證負載均衡演算法,所有服務實例權重設為0時,負載均衡失效,服務提供者無可用實例。
分析Nacos負載均衡演算法源碼,Spring Cloud Alibaba使用NacosRule類定義演算法,根據權重隨機選擇服務實例。具體實現邏輯在getHostByRandomWeight2方法中,使用Balancer類的getHostByRandomWeight方法獲取服務實例。
刷新方法refresh將服務實例包裝,真正計算權重在Ref類的refresh方法中。randomWithWeight方法源碼實現隨機選擇服務實例。