ribbon客戶端負載均衡

Ribbon簡介

參考:https://blog.csdn.net/chengqiuming/article/details/80711168算法

Ribbon是Netflix發佈的負載均衡器,它有助於控制HTTP和TCP的客戶端的行爲。爲Ribbon配置服務提供者地址後,Ribbon就可基於某種負載均衡算法,自動地幫助服務消費者去請求。Ribbon默認爲咱們提供了不少負載均衡算法,例如輪詢、隨機等。固然,咱們也可爲Ribbon實現自定義的負載均衡算法。
在Spring Cloud中,當Ribbon與Eureka配合使用時,Ribbon可自動從Eureka Server獲取服務提供者地址列表,並基於負載均衡算法,請求其中一個服務提供者實例。展現了Ribbon與Eureka配合使用時的架構spring

客戶端負責均衡

負載均衡又區分了兩種類型:服務器

  1. 客戶端負載均衡(Ribbon)
    服務實例的清單在客戶端,客戶端進行負載均衡算法分配。
    (從上面的知識咱們已經知道了:客戶端能夠從Eureka Server中獲得一份服務清單,在發送請求時經過負載均衡算法,在多個服務器之間選擇一個進行訪問)
  2. 服務端負載均衡(Nginx)
    服務實例的清單在服務端,服務器進行負載均衡算法分配

客戶端負責均衡ribbon

graph TD
服務消費者-->ribbon
ribbon-->服務清單1
ribbon-->服務清單2
ribbon-->服務清單3
服務清單1-->eureka裏的服務1
服務清單2-->eureka裏的服務2
服務清單3-->eureka裏的服務3

使用

@EnableDiscoveryClient
@SpringBootApplication
public class ConsumerMovieApplication {
  @Bean
  @LoadBalanced
  public RestTemplate restTemplate() {
    return new RestTemplate();
  }
 
  public static void main(String[] args) {
    SpringApplication.run(ConsumerMovieApplication.class, args);
  }

}

程序代碼,使用負載均衡

@RestController
public class MovieController {
  private static final Logger LOGGER = LoggerFactory.getLogger(MovieController.class);
  @Autowired
  private RestTemplate restTemplate;
  @Autowired
  private LoadBalancerClient loadBalancerClient;
 
  @GetMapping("/user/{id}")
  public User findById(@PathVariable Long id) {
    //VIP:virtual IP
    return this.restTemplate.getForObject("http://microservice-provider-user/" + id, User.class);
  }
 
  @GetMapping("/log-user-instance")
  public void logUserInstance() {
    ServiceInstance serviceInstance = this.loadBalancerClient.choose("microservice-provider-user");
    // 打印當前選擇的是哪一個節點
    MovieController.LOGGER.info("{}:{}:{}", serviceInstance.getServiceId(), serviceInstance.getHost(), serviceInstance.getPort());
  }
}

配置

server:
  port: 8010
spring:
  application:
    name: microservice-consumer-movie
eureka:
  client:
    serviceUrl:
      defaultZone:http://localhost:8761/eureka/
  instance:
    prefer-ip-address: true

測試

  1. 啓動eureka微服務
  2. 啓動movie-ribbon微服務
  3. 啓動一個user微服務
  4. 啓動第二個user微服務
  5. 觀察eureka的變化
相關文章
相關標籤/搜索