一:Ribbon是什么?
Ribbon其实就是一个软负载均衡的客户端组件。
二:负载均衡(LB)是什么?
用户的请求平摊的分配到多个服务上,从而达到系统的HA(高可用)
三:负载均衡分类?
- 集中式 LB :在服务的消费方和提供方之间使用独立的LB设施,如Nginx
- 进程内 LB:消费方从服务注册中心或知有哪些地址可用,然后自己再从这些地址中选择出一个何时的服务器。例如Ribbon
四:Ribbon是如何通过一个@LoadBalanced注解就实现负载均衡的
- 在创建RestTemplate的bean时添加@LoadBalanced注解
- LoadBalancerAutoConfiguration自动配置筛选出添加@LoadBalanced注解的RestTemplate
- 为RestTemplate设置LoadBalancerInterceptor,目的是使用LoadBalancerClient来发起请求
- 请求过程中,根据负载均衡策略,调用LoadBalancerClient.choose()方法获取最终ServiceInstance
- 根据ServiceInstance获取真实host、port,发起最后请求