0


Spring Cloud——LoadBalancer

Spring Cloud——LoadBalancer

一、负载均衡(LoadBalance)

  • 负载均衡(Load Balance),简单的说就是将用户的请求分摊到多个服务上,从而使系统达到高可用性,常见的负载均衡有软件NginxLVS,硬件F5等。
  • Spring Cloud LoadBalancer是由Spring Cloud官网提供的一个开源的、简单易用的客户端负载均衡器,它包含在Spring Cloud Commons中用来替换以前的Ribbon组件。想比较于RibbonSpring Cloud LoadBalancer不仅能够支持RestTemplate,还支持WebClientWebClientSpring Web Flux中提供的功能,可以实现响应式异步请求)

1.LoadBalancer本地负载均衡客户端 VS Nginx服务端负载均衡区别

  • Nginx是服务器负载均衡,客户端所有请求都会交给Nginx,然后由Nginx实现转发请求,即负载均衡是由服务端实现的。
  • LoadBalancer本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。

二、LoadBalancer

在这里插入图片描述

  • LoadBalancer工作步骤如下: - 第一步:先从ConsulServer查询并拉取服务列表,知道了它有多个服务,每个服务实现是完全一样的,默认轮询调用谁都可以正常执行。- 第二步:按照指定的负载均衡策略从server取到的服务注册列表中由客户端自己选择一个地址,所以LoadBalancer是一个客户端的负载均衡器。

1.Spring RestTemplate as a LoadBalancer Client

  • 第一步,在服务调用方加入LoadBalancer组件:<!--loadbalancer--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>
  • 第二步,赋予RestTemplate负载均衡的能力:@ConfigurationpublicclassRestTemplateConfig{/** * 使用 @LoadBalanced 注解赋予 RestTemplate 负载均衡的能力 */@Bean@LoadBalancedpublicRestTemplaterestTemplate(){returnnewRestTemplate();}}

2.编码使用DiscoveryClient动态获取所有上线的服务列表

  • 负载均衡算法:rest接口第几次请求数%服务器集群总数量 = 实际调用服务器位置下标,每次服务器重启后rest接口计数从1开始。@ResourceprivateDiscoveryClient discoveryClient;@GetMapping("/discovery")publicResponseResult<List<String>>discovery(){List<String> list =newArrayList<>();List<String> services = discoveryClient.getServices();for(String element : services){List<ServiceInstance> instances = discoveryClient.getInstances(element);for(ServiceInstance ele : instances){ list.add(ele.getServiceId()+" "+ ele.getHost()+" "+ ele.getPort()+" "+ ele.getUri());}}returnResponseResult.success(list);}

3.从默认的轮询,切换为随机算法

/**
 * 将负载均衡的默认轮询算法,切换为随机算法
 */@Configuration@LoadBalancerClient(//下面的value值大小写一定要和consul里面的名字一样,必须一样
        value ="cloud-payment-service", configuration =RestTemplateConfig.class)publicclassRestTemplateConfig{@Bean@LoadBalanced//使用@LoadBalanced注解赋予RestTemplate负载均衡的能力publicRestTemplaterestTemplate(){returnnewRestTemplate();}@BeanReactorLoadBalancer<ServiceInstance>randomLoadBalancer(Environment environment,LoadBalancerClientFactory loadBalancerClientFactory){String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);returnnewRandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name,ServiceInstanceListSupplier.class), name);}}

本文转载自: https://blog.csdn.net/weixin_65032328/article/details/138376407
版权归原作者 小宝945 所有, 如有侵权,请联系我们删除。

“Spring Cloud——LoadBalancer”的评论:

还没有评论