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

dubbo负载均衡

时间:2022-09-27 14:57:21浏览次数:53  
标签:dubbo 负载 权重 get int invokers sameWeight Invoker 均衡

随机负载均衡

public class RandomLoadBalance extends AbstractLoadBalance {

    private final Random random = new Random();

    protected <T> Invoker<T> doSelect(List<Invoker<T>> invokers, URL url, Invocation invocation) {
        int length = invokers.size();      // Invoker 总数
        int totalWeight = 0;               // 所有 Invoker 的权重的和

        // 判断是不是所有的 Invoker 的权重都是一样的
        // 如果权重都一样,就简单了。直接用Random生成索引就可以了。
        boolean sameWeight = true;
        for (int i = 0; i < length; i++) {
            int weight = getWeight(invokers.get(i), invocation);
            totalWeight += weight; // Sum
            if (sameWeight && i > 0 && weight != getWeight(invokers.get(i - 1), invocation)) {
                sameWeight = false;
            }
        }

        if (totalWeight > 0 && !sameWeight) {
            // 如果不是所有的 Invoker 权重都相同,那么基于权重来随机选择。权重越大的,被选中的概率越大
            int offset = random.nextInt(totalWeight);
            for (int i = 0; i < length; i++) {
                offset -= getWeight(invokers.get(i), invocation);
                if (offset < 0) {
                    return invokers.get(i);
                }
            }
        }
        // 如果所有 Invoker 权重相同
        return invokers.get(random.nextInt(length));
    }
}

标签:dubbo,负载,权重,get,int,invokers,sameWeight,Invoker,均衡
From: https://www.cnblogs.com/sjj123/p/16734552.html

相关文章

  • HCIA学习笔记三十一:静态路由的负载均衡
    一、负载分担示例• 在路由器B上配置到达路由器A的10.1.1.1网段的三条负载路由。二、负载分担实验2.1、拓扑图•分别在路由器中拖出2台AR2220、终端中拖出2台PC机,......
  • .NET下数据库的负载均衡(有趣实验)
    相关下载:数据库的负载均衡-示例代码(dp1-DbBalance.rar)数据库的负载均衡-示例代码(dp1-DbBalance.rar)支持.Net/.NetCore/.NetFramework为了演示数据库的负载均衡(Lo......
  • springcloud--负载均衡(ribbon)
    springcloud--负载均衡(ribbon)一、项目背景搭建好的springcloud项目,包含erueka模块(这里是单个,也可以多个)、服务提供者(多个)、消费者。创建多个服务提供者模块,用于集群(单......
  • Feign负载均衡
    feign是声明式的webservice客户端,它让微服务之间的调用变得更简单了,类似controller调用service。SpringCloud集成了Ribbon和Eureka,可在使用Feign时提供负载均衡的http......
  • Ribbon负载均衡
    Ribbon Ribbon是什么?SpringCloudRibbon是基于NetflixRibbon实现的一套客户端负载均衡的工具。简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件......
  • 【Nacos】最新版本 Spring Cloud Alibaba nacos 负载均衡调用异常 没有找到对应主机
    问题原因:最新版本的Nacos中没有依赖任何负载均衡的包,解决办法:需要手动引入Ribbon或者LoadBalancer,这里建议引入LoadBalancer,因为Ribbon已经处于维护状态......
  • 负载均衡
    什么是负载均衡在实际项目中,一个服务基本都是集群模式的,也就是多个功能相同的项目在运行,这样才能承受更高的并发这时一个请求到这个服务,就需要确定访问哪一个服务器......
  • 中仑网络全站 Dubbo 2 迁移 Dubbo 3 总结
    简介: 中仑网络在2022年完成了服务框架从Dubbo2到Dubbo3的全站升级,深度使用了应用级服务发现、Kubernetes原生服务部署、服务治理等核心能力。来自中仑网络的技术......
  • Dubbo的基本使用
    1、Dubbo的基本介绍Dubbo(读音[ˈdʌbəʊ])是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集......
  • Dubbo概述
    什么是RPCRPC是RemoteProcedureCall的缩写 翻译为:远程过程调用目标是为了实现两台(多台)计算机\服务器,相互调用方法\通信的解决方案RPC只是实现远程调用的一套标准......