1. 程式人生 > >學習類似於ribbon機制的輪詢負載均衡

學習類似於ribbon機制的輪詢負載均衡

ribbon主要的作用就是在本地做負載均衡,

簡單理解為:在註冊中心上根據相同的一個服務名稱,拿到叢集服務的地址,

把叢集的服務地址輪詢,

它的主要原理就是在於,輪詢,就是呼叫不同的地址

所以在底層程式碼實現思路:

1.從註冊中心上面取值,

2.取值之後的個數,次數怎麼計算,拿到的一定是URL,即服務地址

3.呼叫服務地址取值,

程式碼實現如下:

1,@EnableDiscoveryClient註解是基於spring-cloud-commons依賴,並且在classpath中實現; 適合於consul、zookeeper註冊中心

2,@EnableEurekaClient註解是基於spring-cloud-netflix依賴,只能為eureka作用;

      @Autowired

      private RestTemplate restTemplate;

      @Autowired

      private DiscoveryClient discoveryClient;

      private int requestCount = 1;

      @RequestMapping("/discoveryClient")

      public String discoveryClient() {

            String serviceUrl = getServiceUrl() +

"/getMember";

            if (StringUtils.isEmpty(serviceUrl)) {

                  return "請求地址為null";

            }

            // 請求地址

            System.out.println("serviceUrl:" + serviceUrl);

            String result = restTemplate.getForObject(serviceUrl, String.class);

            return

result;

      }

      @RequestMapping("/getServiceUrl")

      private String getServiceUrl() {

            List<ServiceInstance> instances = discoveryClient.getInstances("app-itmayiedu-member");

            if (instances == null || instances.size() == 0) {

                  return null;

            }

            int size = instances.size();

            int index = requestCount % size;

            requestCount++;

            return instances.get(index).getUri().toString();

      }

Ribbon與Nginx區別

伺服器端負載均衡Nginx

 nginx是客戶端所有請求統一交給nginx,由nginx進行實現負載均衡請求轉發,屬於伺服器端負載均衡。

 既請求有nginx伺服器端進行轉發。

客戶端負載均衡Ribbon

 Ribbon是從eureka註冊中心伺服器端上獲取服務註冊資訊列表,快取到本地,讓後在本地實現輪訓負載均衡策略。

 既在客戶端實現負載均衡。

 應用場景的區別:

Nginx適合於伺服器端實現負載均衡 比如Tomcat ,Ribbon適合與在微服務中RPC遠端呼叫實現本地服務負載均衡,比如Dubbo、SpringCloud中都是採用本地負載均衡。