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配合使用時的架構

客戶端負責均衡

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

  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的變化


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM