四、Ribbon负载均衡

目录

一、负载均衡流程

1、我通过浏览器直接访问userservice/user/1,无法访问,说明是负载均衡做了相应的处理

2、我们来看一下代码中负载均衡的流程是怎样的

3、图像流程

二、负载均衡策略

1、修改负载均衡策略

(方式一)

(方式二)

2、两种方式的区别

三、饥饿加载

1、测试

(1)将order重启

(2)发送http请求,发现用时为400ms

(3)再次发送请求,用时为66ms

(4)这是因为默认为懒加载

(5)修改为饥饿加载

四、总结


一、负载均衡流程

1、我通过浏览器直接访问userservice/user/1,无法访问,说明是负载均衡做了相应的处理

2、我们来看一下代码中负载均衡的流程是怎样的

1.我们找到LoadBalancerInterceptor,发现它实现了一个接口ClientHttpRequestInterceptor

2.进入接口查看

根据翻译来看,这是一个请求拦截器接口

3.通过断点的方式,我们查看一下拦截之后发生了什么

4.将orderservice设置在调试模式下运行

5.通过浏览器发起请求

6.进入断点

7.往下走,看到url为刚才我无法访问的地址

8.继续执行,它将主机名获取到了

9.并且交给了RibbonLoadBalancerClient的对象去执行

10.我们步入此断点

发现它通过serviceId创建了一个loadBalancer对象

11.观察此对象,发现它成功拉取到了服务地址

所以,它通过serviceId(服务名称userservice)拿到了服务地址

12.既然拿到了地址,那是怎么进行负载均衡的呢,我们继续步入

可以看到,它调用了父类的方法

步入方法,它现在又调用了一个rule的对象

而对象中有这么几个类,分别为:

  1. 轮询
  2. 随机
  3. 重试

13.它默认的规则是轮询,所以我们拿到了地址端口8081

14.然后将服务名改为拿到的server,就可以访问了

3、图像流程

  1. order-service发起请求
  2. 请求被拦截器拦截了,并交给了负载均衡客户端
  3. 客户端通过url获取到服务名称,并发送给负载均衡动态服务列表
  4. 这个动态服务列表使用服务名像eureka拉取服务列表
  5. 通过负载均衡规则选择一个服务,返回给客户端
  6. 客户端根据服务地址修改url,发起请求
  7. 访问服务

二、负载均衡策略

1、修改负载均衡策略

(方式一)

只需要在OrderApplication中加入

java 复制代码
@Bean
    public IRule randomRule(){
        return new RandomRule();
    }

将负载均衡规则由默认的轮询更改为了随机

(方式二)

修改yml

2、两种方式的区别

  • 方式一是全部服务都采取随机
  • 方式二是只有userservice采取随机

三、饥饿加载

1、测试

(1)将order重启
(2)发送http请求,发现用时为400ms
(3)再次发送请求,用时为66ms
(4)这是因为默认为懒加载

Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。

(5)修改为饥饿加载

而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

java 复制代码
ribbon:
   eager-load:
      enabled: true
      clients: userservice

四、总结

相关推荐
nn在炼金12 小时前
大模型领域负载均衡技术
人工智能·算法·负载均衡
清晓粼溪13 小时前
RestTemplate
java·spring cloud
Knight_AL14 小时前
深入理解 PropertySource 与优先级:Spring Boot/Spring Cloud 配置体系的底层原理
spring boot·后端·spring cloud
lbb 小魔仙16 小时前
【Java】Spring Data JPA 详解:ORM 映射、查询方法与复杂 SQL 处理
java·开发语言·sql·spring cloud
登山人在路上16 小时前
Nginx负载均衡策略
服务器·nginx·负载均衡
lbb 小魔仙21 小时前
【Java】Spring Cloud 微服务架构入门:五大核心组件与分布式系统搭建
java·spring cloud·架构
TDengine (老段)21 小时前
TDengine 客户端负载均衡与 failover
大数据·数据库·负载均衡·时序数据库·tdengine·涛思数据
我要打倒凹凸曼21 小时前
使用 Nginx 实现 Tomcat 集群的负载均衡
nginx·tomcat·负载均衡
醒过来摸鱼21 小时前
Spring Cloud Gateway
java·spring·spring cloud
后端小张21 小时前
【JAVA 进阶】Spring Boot自动配置详解
java·开发语言·人工智能·spring boot·后端·spring·spring cloud