首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏BAT的乌托邦

    五十三、Ribbon的LoadBalancer五大组件之:IRule(三)随机和重试,所有IRule实现总结

    代码下载地址:https://github.com/f641385712/netflix-learning 前言 关于IRule的实现,还差两个实现规则,一个是随机规则RandomRule,一个是重试规则 RetryRule,本文将进行收尾,并且给出对所有IRule实现的总结列表。 ---- RetryRule 重试规则 它可以在给定的任何IRule的基础上再包一层重试逻辑(默认给定的RoundRobinRule规则)。 public class RetryRule extends AbstractLoadBalancerRule { IRule subRule = new RoundRobinRule(); // null; } else { return answer; } } } RetryRule中又定义了一个subRule,它默认的实现类是RoundRobinRule(你可以自己指定任何IRule

    1.5K20发布于 2020-03-20
  • 来自专栏MyTechnology

    Ribbon核心组件IRule及负载均衡算法

    Ribbon常用负载均衡算法: IRule接口,Riboon使用该接口,根据特定算法从所有服务中,选择一个服务, Rule接口有7个实现类,每个实现类代表一个负载均衡算法,默认使用轮询 ? package com.xn2001.myrule; import com.netflix.loadbalancer.IRule; import com.netflix.loadbalancer.RandomRule Created by 乐心湖 on 2020/5/2 22:14 */ @Configuration public class MyselfRule { @Bean public IRule

    70720发布于 2020-07-31
  • 来自专栏CSDN专栏

    【SpringCloud(3)】Ribbon负载均衡:IRule原理轮询算法;LB负载均衡;loadbalancer和IRule组件;Ribbon和Ngin负载均衡的区别

    使用Ribbon —— IRule组件 如果在使用自定义负载均衡时报错,大概率是因为版本问题。 springcloud在2020.0.0之后,移除掉了netflix-ribbon 使用eureka-client中的loadbalancer,使用自定义负载均衡不使用IRule接口。 IRule 原理 负载均衡算法: rest接口第几次请求书 % 服务器集群总数量 = 实际调用服务器位置下标,每次服务重启后rest接口计数从1开始 List<ServiceInstance> instances

    26410编辑于 2025-10-13
  • 来自专栏BAT的乌托邦

    五十一、Ribbon的LoadBalancer五大组件之:IRule(一)轮询和加权轮询

    Ribbon最重要的能力是负载均衡(注意:Ribbon并不等于负载均衡,只是负载均衡器是它最出名也是最重要的模块),而负载均衡的核心是负载均衡算法,这些算法都将通过IRule的子类一一体现。 正文 IRule一共提供7种规则算法: RoundRobinRule轮询规则:线性轮询 WeightedResponseTimeRule加权轮询规则:Server的rt响应时间作为权重参考,响应时间越短 ---- IRule介绍 为LoadBalancer定义“规则”的接口,它是负载均衡算法的实现。负载均衡策略,根据特定算法中从服务列表中选取一个要访问的Server。 class AbstractLoadBalancerRule implements IRule, IClientConfigAware { private ILoadBalancer lb; ---- 总结 关于`Ribbon的LoadBalancer五大组件之:IRule的第一篇就先介绍到这,本文概述了IRule以及介绍了其7大负载均衡算法,且着重介绍了最为常用、最广为人知的轮询算法和加权轮询算法的实现

    1.7K40发布于 2020-03-20
  • 来自专栏全栈程序员必看

    【云原生&微服务二】SpringCloud之Ribbon自定义负载均衡策略(含Ribbon核心API)「建议收藏」

    文章目录 一、前置知识 二、Ribbon核心API 三、自定义负载均衡策略IRule 1、编写IRule实现类 2、编写Ribbon配置类 3、应用到全部服务上(Ribbon全局配置) 1)Spring Ribbon有三个核心接口:ILoadBalancer、IRule、IPing,其中: ILoadBalancer是负载均衡器; IRule 复杂负载均衡的规则,ILoadBalancer根据其选择一个可用的 三、自定义负载均衡策略IRule 1、编写IRule实现类 MyRule重写IRule的choose(Object o)方法,每次都访问List<Server>中第一个服务实例; import com.netflix.loadbalancer.ILoadBalancer 2、编写Ribbon配置类 在Ribbon配置类中通过@Bean注解将自定义的IRule实现类MyRule注入到Spring容器中。 四、自定义服务实例是否存活判定策略IPing 和IRule的自定义方式一样,这里只提供自定义的IPing,具体配置方式和IRule一样。

    1.5K30编辑于 2022-11-04
  • 来自专栏软件开发-青出于蓝

    Ribbon的LoadBalancerRule复杂均衡实现 原

    这些复杂均衡实现类都实现了com.netflix.loadbalancer.IRule接口,zuul中提供了好几种实现类: AvailabilityFilteringRule  BestAvailableRule AbstractLoadBalancerRule如下List-1: List-1 public abstract class AbstractLoadBalancerRule implements IRule List-2 IRule接口 public interface IRule { Server choose(Object var1); void setLoadBalancer(ILoadBalancer

    79010发布于 2019-10-06
  • 来自专栏JokerDJ

    Spring-Cloud-Netflix-Ribbon&Feigen

    默认是轮询 负载均衡算法 随机 轮询 hash:根据ip地址进行hash,通过ip值模于服务的数量,从而确定访问认证 最少访问 这些算法, 都不需要要我们去写, 直接使用一个Robbin进行操作 核心组件IRule IRule是是Ribbon对于负载均衡策略实现的接口 默认实现IRule接口的类: RoundRobinRule:轮询 RandomRule:随机 AvailabilityFilteringRule 配置:在启动类添加 @Bean public IRule Irule(){ return new RandomRule();//随机 } 不同服务设置不同的策略 步骤 写goods和order的负载均衡配置 goodsconfig: @Configuration public class goodsConfig { @Bean public IRule RoundRobinRule(); } } orderconfig: @Configuration public class OrderConfig { @Bean public IRule

    35910编辑于 2023-11-27
  • 来自专栏每日一Java,进步一点点

    Ribbon负载均衡 (源码分析)

    3)负载均衡策略IRule 在刚才的代码中,可以看到获取服务使通过一个getServer方法来做负载均衡: 我们继续跟入: 继续跟踪源码chooseServer方法,发现这么一段代码: 我们看看这个 user-service DynamicServerListLoadBalancer根据user-service到eureka拉取服务列表 eureka返回列表,localhost:8081、localhost:8082 IRule 接口下的ZoneAvoidanceRule 类(根据就近区域Zone来轮询) 1)负载均衡策略 负载均衡的规则都定义在IRule接口中,而IRule有很多不同的实现类: 不同规则的含义如下:默认的实现就是 通过定义IRule实现可以修改负载均衡规则,有两种方式:(二选一即可) 代码方式:在order-service中的OrderApplication类中,定义一个新的IRule: 优:配置灵活 劣:修改时需要重新打包 @Bean public IRule randomRule(){ return new RandomRule(); } 配置文件方式:在order-service

    54030编辑于 2023-02-13
  • 来自专栏Java技术编程

    Ribbon 负载均衡器 LoadBalancer 源码解析

    在 ILoadBalancer 进行获取服务的时候,会根据负载均衡策略 IRule 来进行选择 5. IPing 表示检测服务是否可用策略,Ribbon 也提供了很多策略,共有 5 种,默认为 DummyPing 关于 IRule 和 IPing 的策略,后面会专门进行研究。 有了这些服务之后,会根据负载均衡策略IRule 来选择一个可用的服务。 提供了 7 种,后面再来分析,现在只需要知道通过 IRule 来选择服务就可以了。 关于负载均衡策略 IRule 和 Ping 策略,下篇文章进行研究。

    2.6K20发布于 2020-05-21
  • 来自专栏波波烤鸭

    不懂Ribbon原理的可以进来看看哦,分析RibbonClientConfiguration完成了哪些核心初始操作

    接口 默认实现 描述 IClientConfig DefaultClientConfigImpl 管理配置接口 IRule ZoneAvoidanceRule 均衡策略接口 IPing DummyPing ribbonRule(IClientConfig config) { if (this.propertiesFactory.isSet(IRule.class, this.name)) { return (IRule)this.propertiesFactory.get(IRule.class, config, this.name); } else 首先会进入【ZoneAwareLoadBalancer】的构造方法中 public ZoneAwareLoadBalancer(IClientConfig clientConfig, IRule rule void initWithConfig(IClientConfig clientConfig, IRule rule, IPing ping, LoadBalancerStats stats) {

    1.2K50发布于 2021-09-08
  • 来自专栏灵墨AI探索室

    深入理解微服务中的负载均衡算法与配置策略

    中间步骤大家就不用再找了,我已经事先找好了,就在这里:这张图包含两个关键信息:首先是注入了一个IRule规则,其次是将该IRule规则应用到了ZoneAwareLoadBalancer负载均衡器中。 LoadBalancerStats stats) { // 省略部分代码 setRule(rule); // 省略部分代码 }}这里可以看到是有默认的IRule 规则的——RoundRobinRule,但是别冲动,因为我们Spring自动托管的IRule规则还没用上,不可能这么简单的走轮训。 if (this.propertiesFactory.isSet(IRule.class, name)) { return this.propertiesFactory.get(IRule.class @Bean public IRule ribbonRule() { // 指定使用Nacos提供的负载均衡策略(优先调用同一集群的实例,基于随机权重) return new

    51441编辑于 2024-08-09
  • 来自专栏码匠的流水账

    聊聊DependenciesBasedLoadBalancer

    final Log log = LogFactory.getLog(DependenciesBasedLoadBalancer.class); ​ private final Map<String, IRule chooseRuleForLoadBalancerType(dependency.getLoadBalancerType())); } } ​ private IRule private RoundRobinRule getRoundRobinRule() { return new RoundRobinRule(this); } ​ private IRule RandomRule(); randomRule.setLoadBalancer(this); return randomRule; } ​ private IRule ; ​ private final AtomicInteger instanceNumber = new AtomicInteger(-1); ​ public StickyRule(IRule

    41000发布于 2019-08-03
  • 来自专栏原创干货

    【SpringCloud原理】Ribbon核心组件以及运行原理源码剖析

    4、IRule public interface IRule{ /* * choose one alive server from lb.allServers or * lb.upServers rule:负载均衡算法组件,默认是RoundRobinRule 核心方法 setRule:这个方法是设置负载均衡算法的,并将当前这个ILoadBalancer对象设置给IRule,从这可以得出一个结论 ,IRule进行负载均衡的服务实例列表是通过ILoadBalancer获取的,也就是 IRule 和 ILoadBalancer相互引用。 chooseServer:就是选择一个服务实例,是委派给IRule的choose方法来实现服务实例的选择。 (IRule.class, name)) { return this.propertiesFactory.get(IRule.class, config, name); }

    68110编辑于 2022-07-27
  • 来自专栏look Java

    (4)什么是Ribbon负载均衡

    3)负载均衡策略IRule 在刚才的代码中,可以看到获取服务使通过一个getServer方法来做负载均衡: 我们继续跟入: 继续跟踪源码chooseServer方法,发现这么一段代码: 我们看看这个rule localhost:8081替代userservice,得到http://localhost:8081/user/1,发起真实请求 4.3.负载均衡策略 4.3.1.负载均衡策略 负载均衡的规则都定义在IRule 接口中,而IRule有很多不同的实现类: 不同规则的含义如下: 内置负载均衡规则类 规则描述 RoundRobinRule 简单轮询服务列表来选择服务器。 RetryRule 重试机制的选择逻辑 默认的实现就是ZoneAvoidanceRule,是一种轮询方案 4.3.2.自定义负载均衡策略 通过定义IRule实现可以修改负载均衡规则,有两种方式: 代码方式 :在order-service中的OrderApplication类中,定义一个新的IRule: @Bean public IRule randomRule(){ return new RandomRule

    43110编辑于 2023-12-07
  • 来自专栏个人技术博客

    Cloud微服务:Ribbon负载均衡

    动态服务列表负载均衡器:DynamicServiceListLoadBalancer将得到的信息列表给到负载均衡规则器:IRule进行负载均衡算法,选择一个服务信息,重新给到负载均衡客户端:RibbonLoadBalancerClient 二、Ribbon - 负载均衡策略 Ribbon的负载均衡策略是一个叫做IRule的接口来定义的,每一个子接口都是一种规则。 1.常见的负载均衡规则 2.调整负载均衡规则 ①代码方式 在微服务的服务消费者(order-service)中的启动类OrderApplication类内部,定义一个新的IRule @MapperScan 实现负载均衡 public RestTemplate restTemplate() { return new RestTemplate(); } //重新定义IRule ,达到调整负载均衡规则的效果 @Bean public IRule randomRule() { //默认是轮询规则,这里负载均衡策略调整成——随即规则

    70710编辑于 2024-04-25
  • 来自专栏问天丶天问

    修改默认负载均衡策略(Ribbon)

    com.learning.springcloud.config; import com.alibaba.cloud.nacos.ribbon.NacosRule; import com.netflix.loadbalancer.IRule     /**          * 全局设置负载均衡策略          *          * @return          */         @Bean         public IRule iRule() {         return new NacosRule();        } }  增加客户端负载配置  @RibbonClients package com.learning.springcloud

    22410编辑于 2024-01-13
  • 来自专栏Java学习录

    自定义Eureka集群负载均衡策略

    使用此类注册一个IRule以达到替换Eureka的目的 package cn.org.config; import com.netflix.loadbalancer.*; import org.springframework.context.annotation.Bean org.springframework.context.annotation.Configuration; @Configuration public class LoadBalanced { @Bean public IRule cn.org.config.domain; import com.netflix.loadbalancer.ILoadBalancer; import com.netflix.loadbalancer.IRule ; import com.netflix.loadbalancer.Server; import java.util.List; public class TestRule implements IRule 类使用刚才自定义的注解标示 @Configuration @ExcludeFromComponentScan public class AvoidLoanbalanced { @Bean public IRule

    1.5K00发布于 2019-04-18
  • 来自专栏一枝花算不算浪漫的专栏

    【一起学源码-微服务】Ribbon 源码四:进一步探究Ribbon的IRule和IPing

    本讲目录 我们知道Ribbon主要是由3个组件组成的: ILoadBalancer IRule IPing 其中ILoadBalancer前面我们已经分析过了,接下来我们一起看看IRule和IPing中的具体实现 目录如下: 负载均衡默认Server选择逻辑 Ribbon实际执行http请求逻辑 Ribbon中ping机制原理 Ribbon中其他IRule负载算法初探 说明 原创不易,如若转载 请标明来源! 博客地址:一枝花算不算浪漫 微信公众号:壹枝花算不算浪漫 源码分析 负载均衡默认Server选择逻辑 还记得我们上一讲说过,在Ribbon初始化过程中,默认的IRule为ZoneAvoidanceRule Ribbon中其他IRule负载算法初探 RoundRobinRule:系统内置的默认负载均衡规范,直接round robin轮询,从一堆server list中,不断的轮询选择出来一个server,每个

    1.1K20发布于 2020-01-14
  • 来自专栏CodingToDie

    Spring Cloud:使用Ribbon实现负载均衡详解(下)

    重写 `choose` 方法使用针对某个服务使用针对全部应用解决实际问题参考 自定义 Ribbon 负载均衡策略 前面讲了如何使用Ribbon以及其内置的几种负载均衡策略(IRULE). 继承`AbstractLoadBalancerRule` 通过前面的讲解中,可以得出AbstractLoadBalancerRule实现了IRule 中的 setLoadBalancer 和 getLoadBalancer ,通过继承 AbstractLoadBalancerRule 我们就不需要在自己实现这两个方法,而是把关注点放在choose方法上,即只关注如何进行服务的负载上 **回顾一下**`IRule.java` public interface IRule{ /* * choose one alive server from lb.allServers or * lb.upServers ; } 回顾一下AbstractLoadBalancerRule.java public abstract class AbstractLoadBalancerRule implements IRule

    2.1K30发布于 2019-05-07
  • 来自专栏NetCore

    关于今天很热的--FizzBuzzWhizz

    我设计了一个Student类 public class Student { private int Id { get; set; } private IRule Rule { get; set; } public Student(int id, IRule rule) { Id = id; public interface IRule { string RuleResult(int number); } 如何实现IRule,则很简单了,这里说下第5个规则,如果含有第一个特殊数 ; } return result; } 在不符合规则的情况下,返回number.ToString(); 开始报数: IRule 接下来就是写单元测试,我们只要针对IRule进行测试即可 [Fact] public void RuleTest() { IRule rule

    1.3K60发布于 2018-02-02
领券