SpringCloud功能区是基于Netflix功能区的一组负载平衡工具。功能区客户端组件提供了一系列完整的配置,例如超时,重试实施我们自己的负载平衡算法。
例如,在弹簧云中的功能区,客户端将具有服务器地址列表。在发送请求之前,通过负载平衡算法选择服务器,然后访问它。这是客户负载平衡;也就是说,负载平衡算法分配是在客户端上执行的。
例如,NGINX是通过NGINX执行的,首先发送请求,然后选择通过负载平衡算法访问多个服务器的一个;也就是说,负载平衡算法分配是在服务器端执行的。
3)修改控制器
Irule是所有负载平衡策略的父界面。核心方法是选择选择服务实例的方法。
AbstractloadBarancerule AbstractLoadBalancerrule是一个抽象类。它主要定义一个iloadbaranscer。在这里定义它的目的是协助均衡策略选择适当的服务器实例。
Randomrule知道名称。这种负载均衡策略是随机选择一个服务示例。查看源代码,该源代码在Randomrule的非CINPORT构造函数中初始初始对象,然后调用选择(选择它重写的选择方法(然后调用选择方法)(然后调用选择(iloadbalancer lb,对象键,对象键)此重载量选择选择方法,在此重新加载的选择方法中,每次随机对象都用于生成服务实例总数的随机数,并且该数字被用作订户,因此获得了服务的secressessence
roundrobinule roundrobinrule这种负载平衡策略称为线性旋转负载平衡策略。此类选择的整体逻辑(iloadbalancer lb,object键)功能是:打开计数器计数,在整个环中浏览服务列表,并通过订阅者获得订户,并通过在获取列表之前,递增的getModulo方法。首先增长数量添加1,然后在服务列表的总数可用后获得(因此此下降将永远不会越过边界),进行竞标,然后转到“服务列表”列表为了拿起服务,每次添加汽车周期计数器时,如果您会添加1,如果添加1,如果添加1,如果添加1,如果添加1,如果您添加1,则添加1,如果您添加1,如果您添加1,则添加1,如果添加1,如果添加1,如果添加1,如果添加1,如果您添加1,则添加1,如果您添加1.如果您连续10次无法获得服务,则将报告从Load Balandcer:XXXX进行10次尝试后,没有任何可用的活着服务器。
重演(根据旋转检索)要查看该名称,您知道这种负载平衡策略具有重试函数。首先,在重演中定义了一个子记录。它的实现类是roundrobinrule,然后在选择性(iLoAdbalancer lb,对象键)的Retryrule中,您仍然使用Roundrobinrule中的选择规则来选择服务实例。如果选择选定的实例,则正常返回实例。如果所选的服务实例为null或已失败,则在截止日期之前一直在审查。顺便说一句,它将返回null。
要计算此实例的重量,然后在选择实例时选择权重,以便您可以意识到更好的实例调用。默认情况下,每个服务实例的重量将每30秒计算一次。权重的计算规则也非常简单。选择的服务实例的概率越大。
Client ConconfigenabledRobinrule客户端ConfigenabledRobinRoule的选择策略非常简单。roundrobinrule的内部定义。选择方法仍然使用rountrobinrule的选择方法。所以
但是,LoadBaranceStats可能是无效的。如果LoadBalancerStats为null,则Bestavailablerule将采用其父类,即Client ConconfigenabledRobInrule的服务选择策略(线性旋转)。
ZoneavoidAncele(默认规则,对服务器所在区域的性能的复合判断以及服务器的可用性选择服务器。)ZoneavoidAncele是一个predicateBasedrule的实现类别,但这里有额外的过滤条件。相结合的效果。条件称为复合形式,由次级过滤条件组成。过滤成功后,继续使用rountrobinule从过滤结果中选择一个。
availabilityFilteringRule(首先过滤出故障实例,然后选择一个较小的并发示例)过滤出标记为电路绊倒的后端服务器,然后过滤出那些高凸进的后端 - 端端服务器或使用availizPredicate包含过滤服务器,以包含逻辑实际上是在检查状态中记录的每个服务器的运行状态。
3.2.1修改默认负载平衡策略
1.配置类:
注意:这里有坑。不能写@springbootapplication扫描@springbootapplication扫描扫描,否则,所有功能区都不会共享自定义配置类。不建议这样使用它,建议使用yml方法。
使用@RibbonClient指定微服务及其负载平衡策略。
配置文件:调用指定微服务提供的服务时,请使用相应的负载平衡算法修改应用程序.yml
3.2.2自定义负载平衡策略可以通过实现IRULE接口来自定义负载策略,而服务逻辑的主要选择是选择方法。1)实现基于NACOS重量的负载平衡策略
3.3饥饿负荷
当服务呼叫时,如果网络条件不好,则第一个调用将暂停。ribbon懒惰地加载,这意味着只有在启动呼叫时才会创建客户端。第一次缓慢电话的问题
源代码对应属性配置类:ribboneagerloadproperties测试:3。功能区内核原理3.1功能区原理
就是这样分享。喜欢它的朋友。如果您想了解更多的Java知识,则可以注意微信的公共帐户“老挝老挝”
原始:https://juejin.cn/post/7100893106026840078