美文网首页
Ribbon负载均衡服务调用

Ribbon负载均衡服务调用

作者: 吃货_ee62 | 来源:发表于2021-09-06 17:51 被阅读0次

    SpringCloud Ribbon是Netfix Ribbon实现的一套客户端 负载均衡的工具。

    (负载均衡+RestTemplate调用)
    Ribbon 是Netfilx发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。(目前进入了维护模式)

    Load Balance(LB)负载均衡:

    可以理解为将用户的请求平均分配到多个服务上,从而达到高可用(HA),常见的负载均衡有软件Nginx,LVS,硬件F5等。

    LB:

    集中式LB:

    服务的消费方和提供方之间使用独立的LB设施(可以是硬件,F5,也可以是软件 ,Nginx),通过该设施负责把访问请求通过某种策略转发至服务的提供方

    进程内LB:

    将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取服务方提供的地址。
    eg:看病,选择医院(集中式lB),选择合适医院后,选择科室内的医生(进程内LB)

    Ribbon本地负载均衡客户端VS Nginx服务端负载均衡区别

    Nginx是服务器负载均衡,客户端所有请求都会交给nginx,然后由nginx实现转发请求,即负载均衡 是由服务端实现的。
    Ribbon本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。

    Ribbon在工作的时候分为两步:

    1.选择EurekaServer,它优先选择在同一个区域内负载较少的server
    2.根据用户指定策略,再从server取到注册列表,在从中选择一个地址
    Ribbon的核心组件IRule:根据特定算法中从服务列表中选取一个要访问的服务:

    Ribbon自带服务策略有:

    1.RoundRobinRule:轮询(默认)
    2.RandomRule:随机
    3.RetryRule:重试,先按照轮询的策略获取服务,如果获取服务失败则在指定时间内会进行重试,获取可用的服务
    4.WeightedResponseTimeRule:对轮询的扩展,响应速度越快的实例选择权重越大,越容易被选择
    5.BestAvailableRule:会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
    6.AvailabilityFilteringRule:先过滤掉故障实例,然后选择并发较小的实例
    7.ZoneAvoidanceRule:默认规则,复合判断server所在区域的性能和server的可用性选择服务器

    Ribbon负载规则替换:
    1.自定义配置类

    package com.gods.myrule;
    
    import com.netflix.loadbalancer.IRule;
    import com.netflix.loadbalancer.RandomRule;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class MyselfRule {
        @Bean
        public IRule myRule(){
            return new RandomRule();//定义为随机
        }
    }
    
    
    

    注:不可以放在@ComponentScan所扫描的当前包下以及子包下,否则这个自定义配置类就会被所有的Ribbon客户端共享,达不到为指定的Ribbon定制配置,而@SpringBootApplication注解里就有@ComponentScan注解,所以不可以放在主启动类所在的包下。(因为Ribbon是客户端(消费者)这边的,所以Ribbon的自定义配置类是在客户端(消费者)添加,不需要在提供者或注册中心添加)


    企业微信截图_16310002776494.png

    2.启动类
    添加@RibbonClient(name = "CLOUD-PAYMENT-SERVICE", configuration = MySelfRule.class)

    package com.gods.springcloud;
    
    
    import com.gods.myrule.MyselfRule;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    import org.springframework.cloud.netflix.ribbon.RibbonClient;
    
    
    @SpringBootApplication
    @EnableEurekaClient
    @RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MyselfRule.class)
    //name为指定的服务名(服务名必须与注册中心显示的服务名大小写一致)
    //configuration为指定服务使用自定义配置(自定义负载均衡机制)
    public class order80 {
        public static void main(String[] args) {
            SpringApplication.run(order80.class,args);
        }
    }
    
    

    Ribbon负载均衡的轮询算法:

    rest接口第几次请求数%服务器集群总数量=实际调用服务器位置下标,每次服务重启后rest接口计数从1开始。

    相关文章

      网友评论

          本文标题:Ribbon负载均衡服务调用

          本文链接:https://www.haomeiwen.com/subject/hrvniltx.html