1.集中式 LB
(1)即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5,也可以是 软件,如Nginx),由该设施负责把访问请求通过某种策略转发至服务的提供方;
(2)LB(Load Balance 负载均衡)
2.进程内 LB
(1)将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些服务地址可用,然后再从这些地址中选择出一个合适的服务地址。
(2)Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址
比如:member-consumer-消费者轮询负载访问 10000/10002 provider-服务方底层就是 Ribbon 默认的轮询负载算法
Ribbon机制
@Configuration
public class CustomizationBean {
// 配置注入RestTemplate bean/对象
//这里的@LoadBalanced 就是赋予 RestTemplate 负载均衡的能力
//默认是使用轮询算法来访问远程调用接口/地址
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
@Bean
public IRule iRule(){
//根据业务选择负载均衡算法选择不通的实现即可
return new RandomRule();
//return new WeightedResponseTimeRule();
}
}
@EnableEurekaClient
@SpringBootApplication
//启用服务发现,如果不启用discoveryClient无法发现服务
@EnableDiscoveryClient
//指定Ribbon的负载均衡算法; name:指定ribbon客户端的名称(自定义),configuration:指定负载均算法的配置类
@RibbonClient(name = "MEMBER_SERVICE_PROVIDER_URL",configuration = CustomizationBean.class)
public class MemberConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(MemberConsumerApplication.class,args);
}
}