天天看點

Ribbon負載均衡服務調用入門

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如此類推…

簡而言之:先擷取該服務所有的伺服器數量,再根據某種算法計算應該請求到哪台伺服器

繼續閱讀