Ribbon負載均衡服務調用
Spring Cloud Ribbon是基于Netflix Ribbon實作的一套用戶端 負載均衡的工具,主要功能是提供用戶端的軟體負載均衡算法和服務調用。Ribbon用戶端元件提供一系列完善的配置項如連接配接逾時,重試等。
和Nginx的差別
Ribbon本地負載均衡用戶端 VS Nginx服務端負載均衡差別 Nginx是伺服器負載均衡,用戶端所有請求都會交給nginx,然後由nginx實作轉發請求。即負載均衡是由服務端實作的。 Ribbon本地負載均衡,在調用微服務接口時候,會在注冊中心上擷取注冊資訊服務清單之後緩存到JVM本地,進而在本地實作RPC遠端服務調用技術。
工作流程
Ribbon在工作時分成兩步第一步先選擇 EurekaServer ,它優先選擇在同一個區域内負載較少的server.第二步再根據使用者指定的政策,在從server取到的服務注冊清單中選擇一個位址。其中Ribbon提供了多種政策:比如輪詢、随機和根據響應時間權重。
配置過程
- POM無需引入,Eureka自帶Ribbon依賴
- 官方文檔明确給出了警告:這個自定義配置類不能放在@ComponentScan所掃描的目前包下以及子包下,否則我們自定義的這個配置類就會被所有的Ribbon用戶端所共享,達不到特殊化定制的目的了。
- 在主啟動程式的上一級包下建立一個包,建立MySelfRule規則類
@Configuration public class MySelfRule { @Bean public IRule myRule() { return new RandomRule();//定義為随機 } }
- 主啟動類添加@RibbonClient注解
@SpringBootApplication @EnableEurekaClient @RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration=MySelfRule.class) public class OrderMain80 { public static void main(String[] args) { SpringApplication.run(OrderMain80.class, args); } }
原理
負載均衡算法:rest接口第幾次請求數 % 伺服器叢集總數量 = 實際調用伺服器位置下标 ,每次服務重新開機動後rest接口計數從1開始。 List instances = discoveryClient.getInstances(“CLOUD-PAYMENT-SERVICE”); 如: List [0] instances = 127.0.0.1:8002 List [1] instances = 127.0.0.1:8001 8001+ 8002 組合成為叢集,它們共計2台機器,叢集總數為2, 按照輪詢算法原理: 當總請求數為1時: 1 % 2 =1 對應下标位置為1 ,則獲得服務位址為127.0.0.1:8001當總請求數位2時: 2 % 2 =0 對應下标位置為0 ,則獲得服務位址為127.0.0.1:8002當總請求數位3時: 3 % 2 =1 對應下标位置為1 ,則獲得服務位址為127.0.0.1:8001當總請求數位4時: 4 % 2 =0 對應下标位置為0 ,則獲得服務位址為127.0.0.1:8002如此類推…
簡而言之:先擷取該服務所有的伺服器數量,再根據某種算法計算應該請求到哪台伺服器