首页 > 其他分享 >【SpringCloud】Ribbon

【SpringCloud】Ribbon

时间:2023-06-08 09:35:23浏览次数:31  
标签:负载 服务 SpringCloud ribbon 均衡 服务器 public Ribbon

Ribbon

负载均衡原理

  1. order-service 发起 user-service 请求,被ribbon进行拦截;
  2. ribbon会向注册中心拉取user-service 相对应的服务;
  3. 注册中心返回user-service服务列表;
  4. 由ribbon的负载均衡机制去选择一个服务进行访问;默认采用的是轮训的机制。

负载均衡流程

请求示例

配置

@Configuration
public class RestTemplateConfiguration {

    /**
     * 添加LoadBalanced,使RestTemplate以负载均衡的方式调用服务
     * @return
     */
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return  new RestTemplate();
    }
}

接口调用

@RequestMapping("consumer")
@RestController
public class ConsumerController {
    /**
     * spring提供的一个用于访问rest接口的模板对象
     * 提供了多重便捷访问远程HTTP服务的方法,简单的RestFul 服务模板
     */
    @Resource
    private RestTemplate restTemplate;
    
    /**
     * 服务地址
     */
    private static final String REST_FIX_URL_PREFIX = "http://XY-PROVIDER";
    
    @GetMapping("/getProvider")
    public String getConsumerByIp() {
        String res = restTemplate.getForObject(REST_FIX_URL_PREFIX + "/helloProvider", String.class);
        return res;
    }
}

Debug 效果如下所示

暂时先保留

负载均衡策略

内置负载均衡类 说明
RoundRobinRule 简单的轮训服务列表来选择服务器。Ribbon的默认规则
AvailabilityFilteringRule 对以下两种服务器进行忽略:
(1)在默认的情况下:这台服务器如果3次连接失败,这台服务器就会被设置“短路”状态。短路状态将持续30S,如果在此连接失败,短路的持续时间就会几何级增加
(2)并发数较高的服务器。如果一个服务器的并发连接数过高,配置了此规则的而客户端也会将忽略,可以有客户端的ActiveConnectionsLimit属性进行配置
WeightedResponseTimeRule 为每一个服务器赋予一个权重。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择
ZoneAvoidanceRule 以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架。而在对Zone内的多个服务器进行轮询
BestAvailableRule 忽略那些短路的服务器,并选择并发数较低的服务器
RandomRule 随机选择一个可用的服务器
RetryRule 重试机制的选择逻辑

负载均衡策略配置

负载均衡策略配置的方式有两种:
代码方式、配置文件方式

代码方式

配置灵活,修改时需要重新打包发布,针对全局配置。

指定为随机策略

 @Bean
    public IRule randomRule(){
        return new RandomRule();
    }

配置文件方式

直观、方便、无需重新打包,但无法做全局配置

# 指定某个服务
xy-provider:
  ribbon:
    # 指定负载均衡规则
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

饥饿加载

配置方式

ribbon:
  eager-load:
    # 开启饥饿加载
    enabled: true
    # 指定饥饿加载的服务器列表名称
    clients: 
      - xy-provider

开启前

第一次访问时耗时会比较长,因为会去注册中心拉取注册列表缓存到本地。
之后的访问耗时都会很短,因为少了一步操作。

浏览器请求耗时

控制台

  1. 从注册中心拉取所有的实例(服务)
  2. 然后拉取我们需要的服务,由负载均衡去选择访问节点。

开启后

控制台

开启饥饿加载后,重新启动,我们会发现项目一启动,就去加载服务列表。

浏览器

跟没开启之前,耗时会相差很多。

标签:负载,服务,SpringCloud,ribbon,均衡,服务器,public,Ribbon
From: https://www.cnblogs.com/HelloWxl/p/17465230.html

相关文章

  • springcloud中的组件
    1、注册中心组件有多种支持,例如:服务治理NetflixEureka、Consul、Zookeeper2、负载均衡组件NetflixRibbon客户端负载均衡组件2、容错组件NetflixHystrix用于服务熔断降级容错,Resilience4j是G版本推荐的轻量级容错方案,专为Java8和函数式编程而设计,借鉴了Hy......
  • day09-SpringCloud Sleuth+Zipkin-链路追踪
    SpringCloudSleuth+Zipkin-链路追踪官网:spring-cloud/spring-cloud-sleuth:Distributedtracingforspringcloud(github.com)分布式链路追踪之SpringCloudSleuth+Zipkin最全教程!-bucaichenmou-博客园(cnblogs.com)1.Sleuth+Zipkin是什么在微服务框架中,一个由客户......
  • 2023最新IntellJ IDEA诺依SpringCloud开发部署文档(保姆级别)
    目录若依RuoYiv3.6.2部署文档一、环境构建二、模块描述三、部署后端1、下载到本地。2、MySQL导入数据。3、Nacos修改(1)保证本地Nacos下载安装成功,修改本地Nacos的application.properties。(2)启动本地的Nacos.4、启动本地的Redis5、启动如下模块四、部署前端1、保证Node安装没有......
  • day08-SpringCloud Gateway-服务网关
    SpringCloudGateway-服务网关1.Gateway介绍1.1引出问题没有使用网关服务时:使用网关服务后:1.2Gateway网络拓扑图1.3Gateway是什么官网:SpringCloudGatewayGateway是Spring生态系统之上构建的API网关服务,基于Spring、SpringBoot和ProjectReactor等技术Gateway旨在......
  • springcloud入门
    1、启动注册中心springcloud-eureka-serverspring.cloud.EurekaServerApplication2、访问注册中心http://127.0.0.1:8100/root/eureka3、启动配置中心springcloud-config-serverspring.cloud.ConfigServerApplication启动完毕后可以在注册中心看到配置中心已经注册4......
  • SpringCloud大文件分片上传/多线程上传
    ​ 我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。这次项目的需求:支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,ie8,ie9,Chrome,Firefox,360安全浏览器,并且刷新浏览器后仍然能够续传,重启浏览器(关闭......
  • springcloud的configserver配置中心默认中文乱码的解决方法
    springcloud的configserver配置中心默认中文乱码的解决方法先表明我的springcloud版本(2021.0.6)和对应springboot版本(2.6.14)ReleaseTrainVersion: 2021.0.6SupportedBootVersion: 2.6.14https://docs.spring.io/spring-cloud/docs/2021.0.6/reference/html/ 问题描述:当从......
  • Ribbon使用实践
    Ribbon是Netflix开源的一个负载均衡客户端库,用于在微服务架构中实现客户端的负载均衡。它可以与服务发现组件(例如Eureka)集成,自动地根据可用的服务实例来分发请求。下面是使用Java代码实现Ribbon入门示例的详细步骤:添加依赖项:在您的Java项目中,添加以下依赖项以使用Ribbon客户......
  • Spring cloud 微服务架构之Ribbon/Fegin连接超时ReadTimeout问题
    问题描述:近期用Springcloud开发微服务架构时候,在服务与服务之间调用调试代码时候,出现链接超时。错误信息:ReadtimedoutexecutingGEThttp://service-batch/batchmanagement/datatransfer/querybyplanid?planid=PL00000102。发生原因:用IDE开发Debug模式调试代码时候,在处理该服......
  • SpringCloudAlibaba整合分布式事务Seata
    目录1整合分布式事务Seata1.1环境搭建1.1.1Nacos搭建1.1.2Seata搭建1.2项目搭建1.2.1项目示意1.2.2pom.xml1.2.2.1alibaba-demo模块1.2.2.2call模块1.2.2.3order模块1.2.2.4common模块1.2.3配置文件1.2.3.1order模块1.2.3.2call模块1.2.4OpenFeign调用1.2.5order......