首页 > 其他分享 >Ribbon负载均衡

Ribbon负载均衡

时间:2022-10-02 16:00:20浏览次数:40  
标签:负载 服务 service IRule 均衡 Ribbon

负载均衡流程

  1. 首先order-service发起请求获取user-service,到ribbon

  2. ribbon发送给eureka-server注册中心拉取userservice

  3. eureka-service返回user-service服务列表给Ribbon

  4. Ribbon轮询到8081

负载均衡原理

源码阅读

  1. @LoadBalanced注解标记RestTemplate所发起的请求要被Ribbon进行拦截处理

  2. LoadBalancerInterceptor接口实现ClientHttpRequestInterceptor,CHRI的intercept方法拦截由客户端发起的请求,LoadBalancerInterceptor重写了intercept方法,获取原始URI路径,通过URI的gethost方法获取服务的名字,并根据服务名称调用了RibbonLoadBalancer的excute方法,在excute方法中DynamicServerListLoadBalancer使用getServer方法完成了服务列表Server的拉取

  3. 继续向下追踪getServer进入 ZoneAwareLoadBalancer的chooseServer方法,内部调用其父类BaseLoadBalancer的chooseServer,在其中有rule.choose方法,rule就代表负载均衡的规则

    1. rule是IRule接口类型,决定了负载均衡的策略,IRule实现类如下:RandomRule代表随机、RoudRobinRule代表轮询负载均衡,默认的负载均衡是ZoneAvoidanceRule

  4. 我们可以负载均衡获取到真实的服务地址8081,代替原来的服务名称发起真实请求

图解LoadBalancerInterCeptor负载均衡拦截器流程

  1. order-service发起请求给RibbonLoadBanancerClient,请求获取指定的userservice

  2. RibbonLoadBanlancerClient拉取请求中的服务id给DynamicServeriListLoadBalancer

  3. DynamicServeriListLoadBalancer去注册中线拉取userService

  4. 注册中心返回服务列表给DynamicServiListLoadBalancer

  5. DSLB找IRule接口,根据规则进行对服务列表进行负载均衡

  6. IRlue选择某个服务发从给RibbonLoadBanlancerClient

  7. RibbonLoadBanlancerClient修改order-service中的URL发送请求到负载均衡到的服务

IRule负载均衡策略

Ribbon负载均衡的规则是IRule接口实现来定义的,每个子接口都是一种规则

默认负载均衡规则是ZoneAvoidanceRule

以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架。而后对Zone内的多个服务做轮询,服务消费者优先选择在同一个Zone的服务再做轮询RoundRobinRule

常见的负载均衡策略

调整负载均衡策略

通过IRule实现可以修改负载均衡规则

1、通过代码定义一个新的IRule - 全局配置

全局配置范围:无论哪个服务提供都会进行此规则的负载均衡

在配置类OrderApplication定义一个新的IRule

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

2、配置文件方式 - 单独配置

单独配置范围:不同服务配置不同规则

在Order-service的applicatioon.yml文件中,添加新的配置也可以修改规则

userservice: #指定要配置负载均衡的服务
    ribbon: #Ribbond负载均衡的规则
        NFLoadBalancerRuleClassName:com.netfile.loadbalancer.RandomRule  #负载均衡规则

Ribbon饥饿加载

Ribbon默认采用懒加载第一次访问时才会去创建LoadBalanceClient,请求的时间会很长。而饥饿加载则会在项目启动时创建,降低第一次访问的耗时

懒加载 - 默认

第一次访问时才会去创建LoadBalanceClient,请求的时间会很长

饥饿加载 - 对指定的服务做饥饿加载

项目启动的时候就去创建了,降低第一次访问的耗时

ribbon:
    eager-load:
        enablee: true #开启饥饿加载
        clients: #并不是全局统一配置:对如下服务饥饿加载
         - userservice 
         - orderservice

标签:负载,服务,service,IRule,均衡,Ribbon
From: https://www.cnblogs.com/phonk/p/16748900.html

相关文章

  • 查看系统负载w
    ####w命令:#18:29:18表示系统启动时间#up1min,表示启动了多长时间#2users,表示登录了几个用户#loadaverage:0.41,0.17,0.06表示系统负载,分别为1分钟,5分钟,15分......
  • Spring Cloud【Ribbon】客户端负载均衡
    微服务负载均衡器Ribbon文章目录​​微服务负载均衡器Ribbon​​​​一、什么是Ribbon?​​​​1.1客户端的负载就均衡​​​​1.2服务端的负载均衡​​​​1.3常见的负载......
  • 某云负载均衡获取客户端真实IP的问题
    某云负载均衡真实IP的问题,我们这边已经遇到过两次了。而且每次和售后沟通的时候都大费周折,主要是要给售后说明白目前文档的获取真实IP是有问题的,他们觉得文档上说明的肯定......
  • 防火墙基础之大型企业网络架构负载均衡和安全防护
    防火墙基础之大型企业网络架构负载均衡和安全防护原理概述:​防火墙(英语:Firewall)技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间......
  • lvs负载均衡
    目录基本介绍基本工作原理LVS的组成LVS相关术语lvs三种工作模式NAT原理和特点DR原理和特点Tun原理和特点LVS调度算法实践LVS搭建HTTP负载均衡集群实践LVS的NAT模式基本介......
  • 什么是负载均衡?
          负载平衡也称负载共享,是指对系统中的负载情况进行动态调整,以尽量消除或减少系统中各节点负载不均衡的现象。具体实现方法是将过载节点上的任务转移到其他轻载......
  • LVS负载均衡
    [LVS负载均衡]LVS负载均衡目录Lvs负载均衡[lvs简介][lvs作用][lvs体系结构]lvs的三种工作模式[基于NAT的LVS模式负载均衡][基于TUN模式的负载均衡][基于DR模......
  • Lvs负载均衡
    Lvs负载均衡目录Lvs负载均衡lvs简介lvs作用lvs体系结构lvs的三种工作模式基于NAT的LVS模式负载均衡基于TUN模式的负载均衡基于DR模式的LVS负载均衡LVS管理工具LVS的10种调......
  • LVS负载均衡
    LVS负载均衡目录LVS负载均衡一、LVS是什么二、LVS的作用三、lvs的三种工作模式1.基于NAT的LVS模式负载均衡2.基于TUN模式的LVS负载均衡3.LVS(DR)负载模式四、LVS管理工具......
  • dubbo负载均衡
    随机负载均衡publicclassRandomLoadBalanceextendsAbstractLoadBalance{privatefinalRandomrandom=newRandom();protected<T>Invoker<T>doSele......