码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 四、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中加入

    1. @Bean
    2. public IRule randomRule(){
    3. return new RandomRule();
    4. }

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

    (方式二)

    修改yml

    2、两种方式的区别

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

    三、饥饿加载

    1、测试

    (1)将order重启

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

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

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

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

    (5)修改为饥饿加载

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

    1. ribbon:
    2. eager-load:
    3. enabled: true
    4. clients: userservice

    四、总结

  • 相关阅读:
    火柴拼正方形(回溯法实现)
    GC Root
    结合原理图关于STM32后期例程的更新说明
    测试岗面试,一份好的简历总可以让人眼前一亮
    CentOS7一键安装OpenStack
    网络工程师和网络运维工程师,有什么区别?
    06 Spring_AOP
    qbot2的动力学模型
    基于 BP 神经网络特征提取的指纹识别应用(Matlab代码实现)
    Linux编译器-gcc/g++使用
  • 原文地址:https://blog.csdn.net/icbbm/article/details/134401640
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号