当前位置: 首页 > news >正文

四、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中加入

@Beanpublic IRule randomRule(){return new RandomRule();}

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

(方式二)

修改yml

2、两种方式的区别

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

三、饥饿加载

1、测试

(1)将order重启

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

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

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

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

(5)修改为饥饿加载

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

ribbon:eager-load:enabled: trueclients: userservice

四、总结

http://www.lryc.cn/news/230013.html

相关文章:

  • 【Git】第二篇:基本操作(创建本地仓库)
  • vuex——重置vuex数据
  • WebSphere Liberty 8.5.5.9 (三)
  • 如何区分一个项目是react还react native
  • 网易有道开源语音合成引擎“易魔声”
  • [量子计算与量子信息] 2.1 线性代数
  • 【PG】PostgreSQL 目录结构
  • H5游戏源码分享-超级染色体小游戏
  • NOIP 2017 宝藏----Java题解
  • 数据结构和算法的重要性
  • 2023.11.10 信息学日志
  • 0基础学习VR全景平台篇第120篇:极坐标处理接缝 - PS教程
  • Python---综合案例:通讯录管理系统---涉及点:列表、字典、死循环
  • Vite探索:构建、启程、原理、CSS艺术与插件魔法
  • 网工内推 | 网工校招,金融、软件行业,HCIE认证优先,最高15薪
  • CVE-2023-25194 Kafka JNDI 注入分析
  • MySQL--主从复制和读写分离
  • JavaScript使用webcomponent的简单示例
  • LeetCode(10)跳跃游戏 II【数组/字符串】【中等】
  • 浅谈数据结构之递归
  • 在CentOS7环境下安装Mysql
  • 苍穹外卖-day10
  • 牛客网刷题笔记131111 Python实现LRU+二叉树先中后序打印+SQL并列排序
  • TCP网络编程
  • K8S知识点(九)
  • el-table实现单选和隐藏全选框和回显数据
  • 香港科技大学广州|智能制造学域机器人与自主系统学域博士招生宣讲会—中国科学技术大学专场
  • [P7885][Android13] 解决5G信号良好状态栏信号只有两格的问题
  • 老版本goland无法调试新版本go问题处理
  • Redis应用之二分布式锁2