【4.3】Ribbon饥饿加载


1 测试

重启Order服务,回到浏览器,打开浏览器的控制台,发起一次请求:
在这里插入图片描述
可以看到这次请求的耗时达到了390ms
再刷新一次:
在这里插入图片描述
可以看到这次时长只有16ms

为什么第一次请求的耗时如此之长呢?
这是由多方面的原因来决定的。


2 饥饿加载

最重要的原因是:
Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,因为创建的过程中要去做服务拉取,所以请求时间会很长。

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

ribbon:
  eager-load:
    enabled: true # 开启饥饿加载
    clients:  # 指定饥饿加载的服务名称
      - userservice

打开OrderApplication的日志:
在这里插入图片描述
可以看到有一次userservice instantiated a loadBalancer–userservice初始化负载均衡器;
初始时服务列表为空,所以会做一次PollingServerListUpdater–拉取服务;
而拉取服务的过程中就会去创建:DynamicServerListLoadBalancer。
所以就会消耗很长的时间。
这就是所谓的懒加载。

第一次加载完了以后就不用加载了,因为这个服务列表就会被缓存在我们的内存中。


2.1 修改加载策略

通过下面配置开启饥饿加载:

ribbon:
  eager-load:
    enabled: true # 开启饥饿加载
    clients:  # 指定饥饿加载的服务名称
      - userservice

饥饿加载通俗一点来说就是:
饿得不行了,看见什么都往上啃,也就是启动时,一上来不管三七二十一就把这些服务加载起来。

找到order-service的application.yml文件:

在这里插入图片描述
接下来重启OrderApplication,观察控制台日志:
在这里插入图片描述
可以看到它在启动的时候就完成了加载,而不是在访问的时候完成。
接下来打开浏览器测试:
在这里插入图片描述
时间减少了一些,但是为什么还是这么久呢?因为服务启动时还要做一些别的事情:
在这里插入图片描述
在服务启动的时候还要完成DispatcherServlet的初始化。这个也是在第一次访问时加载的。


3 Ribbon负载均衡总结

1.Ribbon负载均衡规则:

  • 规则接口是IRule
  • 默认实现是ZoneAvoidanceRule,根据zone选择服务列表,然后轮询

2.负载均衡自定义方式:

  • 代码方式:配置灵活,但修改时需要重新打包发布,是全局配置;
  • 配置方式:直观,方便,无需重新打包发布,但是无法做全局配置。

3.饥饿加载:

  • 默认情况下是懒加载 ,第一次发起请求时才会去加载Ribbon的客户端,访问时长会比较久;
  • 为了解决上述问题,可以开启饥饿加载: 在项目启动那一刻就完成加载,速度会得到一定的提升;
  • 可以指定饥饿加载的微服务名称;

By --Suki 2023/1/5

知识内容来自于黑马程序员视频教学和百度百科。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值