spring-cloud微服务学习之负载均衡

一:微服务的负载均衡学习

学习背景:

一个服务实例可以处理的请求时是有限的,假如服务实例的并发访问实例比较大,我们会启动多个服务实例让这些服务实例采用一定的策略(轮询,权重,ipHash策略)处理并发请求,在nacos服务中实现负载均衡 问题:nacos服务时如何实现负载均衡的???

当我们的服务实例少的时候,比如只有2个,服务方和消费方,此时我们就不需要负载均衡,因为并发量小。

负载均衡有两种

第一种:Nacos集成了Ribbon 以下是步骤

第一步:1. 在ConsumerController类里注入LoadBalancerClient

@Autowired
    private LoadBalancerClient loadBalancerClient;

第二步:2.在Controller里添加测试方法进行访问

第三步:3.打开idea启动配置

第四步:修改provider的配置文件端口,分别以8070,8072端口方式进行启动。

第五步:启动成功以后,访问nacos的服务列表,检测服务是否成功注册,如图所示:

这里多个实例并发提供服务的方式为负载均衡,这里的负载均衡实现默认是因为Nacos集成了Ribbon来实现的,Ribbon配合RestTemplate,可以非常容易的实现服务之间的访问。Ribbon是Spring Cloud核心组件之一,它提供的最重要的功能就是客户端的负载均衡(客户端可以采用一定算法,例如轮询访问,访问服务端实例信息),这个功能可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡方式的服务调用。

第二种方式:@LoadBalanced注解的方式

当使用RestTemplate进行远程服务调用时,假如需要负载均衡,可以在RestTemplate对象构建时,使用@LoadBalanced对构建RestTemplate的方法进行修饰,例如在ConsumerApplication中构建RestTemplate对象: @LoadBalanced注解是属于Spring,而不是Ribbon的,Spring在初始化容器的时候,如果检测到Bean被@LoadBalanced注解,Spring会为其设置LoadBalancerInterceptor的拦截器。

经验分享 程序员 微信小程序 职场和发展