Dubbo 负载均衡算法

Dubbo服务集群的负载均衡算法 在集群负载均衡时,Dubbo提供了4种均衡策略,如:Random LoadBalance(随机均衡算法)、;RoundRobin LoadBalance(权重轮循均衡算法)、LeastAction LoadBalance(最少活跃调用数均衡算法)、ConsistentHash LoadBalance(一致性Hash均衡算法)。缺省时为Random随机调用。这四种算法的原理简要介绍 立即下载

基于dubbo v2.7.8

博主在学习自己部门的 rpc 框架时,发现在负载均衡算法上,其参考了 dubbo 的 RandomLoadBalance 算法,故对 dubbo 源码进行学习。

dubbo 提供了 RandomLoadBalance 的负载均衡算法,该算法会从服务列表中,随机选择出一个 invoker,来处理后续的请求。而对于随机选择上,dubbo 采用权重计算随机的方式。

代码具体思路:

  1. 计算每一个 invoker 的权重
  2. 判断是否每一个 invoker 的权重相同,如果所有 inovker 拥有相同的权重,则均匀的返回 invoker
  3. 如果权重有不同,则按照权重,随机获取 invoker

RandomLoadBalance.class:

@Override
protected <T> Invoker<T> doSelect(List<Invoker<T>> invokers, URL url, Invocation invocation) {
    // Number of invokers
    int length = invokers.size();
    // Every invoker has the same weight?
    boolean sameWeight = true;
    // the weight of every invokers
    int[] weights = new int[length];
    // the first invoker's weight
    // 获取第一个 invoker 的权重
    int firstWeight = getWeight(invokers.get(0), invocation);
    weights[0] = firstWeight;
    // The sum of weights
    int totalWeight = firstWeight;
    // 计算所有 invoker 的和,并判断是否存在不同的权重
    for (int i = 1; i < length; i++) {
        int weight = getWeight(invokers.get(i), invocation);
        // save for later use
        weights[i] = weight;
        // Sum
        totalWeight += weight;
        if (sameWeight && weight != firstWeight) {
            sameWeight = false;
        }
    }
    
    // 如果存在不同的权重,则通过权重获取随机数,来随机获取 invoker
    if (totalWeight > 0 && !sameWeight) {
        // If (not every invoker has the same weight & at least one invoker's weight>0), select randomly based on totalWeight.
        int offset = ThreadLocalRandom.current().nextInt(totalWeight);
        // Return a invoker based on the random value.
        for (int i = 0; i < length; i++) {
            offset -= weights[i];
            if (offset < 0) {
                return invokers.get(i);
            }
        }
    }
    
    // If all invokers have the same weight value or totalWeight=0, return evenly.
    return invokers.get(ThreadLocalRandom.current().nextInt(length));
}

第二部分中,根据权重值随机获取 invoker 的算法非常巧妙,其先求得将所有 invoker 的权重之和,再随机获取0到权重和之间的整数(包含0,不包含权重和),再用该整数,按 invoker 的顺序,减去 invoker 的权重值,但减出来的结果小于 0 时,以为着对应的 invoker,即为被随机选中的 invoker,从概率上分析,刚好实现了按照权重进行随机的请求。

而关于权重的计算问题,dubbo 采用的是通过计算预热时间来获取。

默认的权重为100,默认的预热时间为 10min,如果服务注册到注册中心到现在的时间差,不小于预热时间,则直接返回权重100,如时间差小于预热时间,则按 (时间差/预热时间)*权重 的方式进行计算。

如采用默认的预热时间,当服务启动 5min时,其权重为:50

具体代码:

	int DEFAULT_WEIGHT = 100;
	int DEFAULT_WARMUP = 10 * 60 * 1000;
	
	int getWeight(Invoker<?> invoker, Invocation invocation) {
        int weight;
        URL url = invoker.getUrl();
        // Multiple registry scenario, load balance among multiple registries.
        if (REGISTRY_SERVICE_REFERENCE_PATH.equals(url.getServiceInterface())) {
            weight = url.getParameter(REGISTRY_KEY + "." + WEIGHT_KEY, DEFAULT_WEIGHT);
        } else {
            weight = url.getMethodParameter(invocation.getMethodName(), WEIGHT_KEY, DEFAULT_WEIGHT);
            if (weight > 0) {
                long timestamp = invoker.getUrl().getParameter(TIMESTAMP_KEY, 0L);
                if (timestamp > 0L) {
                    long uptime = System.currentTimeMillis() - timestamp;
                    if (uptime < 0) {
                        return 1;
                    }
                    int warmup = invoker.getUrl().getParameter(WARMUP_KEY, DEFAULT_WARMUP);
                    if (uptime > 0 && uptime < warmup) {
                        weight = calculateWarmupWeight((int)uptime, warmup, weight);
                    }
                }
            }
        }
        return Math.max(weight, 0);
    }

    static int calculateWarmupWeight(int uptime, int warmup, int weight) {
        int ww = (int) ( uptime / ((float) warmup / weight));
        return ww < 1 ? 1 : (Math.min(ww, weight));
    }

使用 RandomLoadBalance 的负载均衡算法,可以使用后端服务在刚启动的一段时间,不会一瞬间获取过多的负载,而是根据启动时间,慢慢流量增加,这给刚启动的后端服务提供时间进行预热,缓解服务刚启动时因性能不足而造成处理请求失败的情况。

组态王与SqlServer数据库交互总结 组态王可以与SqlServer、mysql、acess、oracle等数据库进行数据交互。 本文重点梳理了如何把组态王中的数据保存到SqlServer数据库中,并使用ADO控件对数据库中的数据进行查询。 一、数据存到SQL数据库 1.新建记录体 2、创建表格模板(用于创建数据库中的表格) 3、打开sqlserver,新建数据库 4、创建ODBC数据源 选择自己新建的数据库 5.使用SQLConnect函数连接数据库,SQLCraetTable函数用于在数据库中创建表格 6.使用 阅读详情

相关推荐

交通流预测爬坑记(一):交通流数据集,原始数据

常用的交通流数据集,持续更新~~

K_first的博客 4万+

5种Dubbo负载均衡算法(看这一篇就够了)

文章目录1.概述2.随机+权重(random)3.轮询+权重(roundrobin)4.最少连接(leastactive)5.最短响应(shortestresponse)6.一致性哈希(consistenthash) 1.概述 ​ 2.7.9版本的Dubbo官方提供的负载均衡算法有5种,在2.6.*里面只有4种负载均衡算法。本文将详细的介绍这5种算法的底层实现。 2.随机+权重(random) 算法步骤 计算服务提供者的总权重,并维护一个前缀和数组。 基于第一步的结果,在0~总权重之间生成一个随机数。

gongsenlin341的博客 6360

PADS VX2.7学习记录05-PADS Layout设计文件Gerber等输出整理

在“PDF Document”栏中,依次选中除REF-TOP和REF-BOT之外的文件,单击图标,将其余PDF Document文件进行删除,如图所示。然后单击【生成PDF】按钮,即可创建一份PDF格式的位号图。

tianpu2320959696的博客 1023

Dubbo中的负载均衡

在实际开发中,一个服务基本都是集群模式的,也就是多个功能相同的项目在运行,这样才能承受更高的并发这时一个请求到这个服务,就需要确定访问哪一个服务器Dubbo框架内部支持负载均衡算法,能够尽可能的让请求在相对空闲的服务器上运行我们要实现设置好负载均衡的策略算法,并设置好每个服务器的运行权重才能更好的实现负载均衡的效果Loadbalance:就是负载均衡的意思Dubbo内置4种负载均衡算法实际运行过程中,每个服务器性能不同在负载均衡时,都会有性能权重,这些策略算法都考虑权重问题随机生成随机数在哪个范围内让哪个服

Melody_1943的博客 826

SpringAi 通过大模型来实现调用自己的Api

摘要 本文介绍了如何利用Spring AI的Tools机制扩展大模型能力,实现业务系统集成。通过@Tool和@ToolParam注解定义工具方法,将订单查询和关闭功能暴露给大模型调用。关键实现包括:1)使用详细描述标注工具方法和参数;2)在ChatClient中注册工具服务;3)集成对话记忆保持上下文。该方法使AI具备操作业务系统的能力,形成"认知-决策-执行"闭环,大幅提升了模型在实际业务场景中的应用价值。

又要搬砖了 835

手机拍照也能玩高光谱?教你用TensorFlow Lite在Android上实现实时RGB转高光谱

本文介绍了如何利用TensorFlow Lite在Android设备上实现实时RGB到高光谱的图像重构技术。通过深度学习模型优化和移动端部署策略,使智能手机具备专业级光谱分析能力,适用于农业检测、化妆品分析等多个领域。

weixin_29091105的博客 243

dubbo负载均衡算法

dubbo的负载均衡算法有4种: 随机(RandomLoadBalance) 随机算法里面还包含设置的权重,假如有四个节点:A、B、C;如果权重一样,则随机选择一个即可: // 如果权重相同或权重为0则均等随机 return invokers.get(random.nextInt(length)); 如果设置了权重:A(20%)、B(30%)、C(50%) A,权重weight=2 B,权重weight=3 C,权重weight=5 这些服务器totalWeight = AWeigh

wanyu_123的博客 1082

国产NAS哪家强?极空间&绿联&威联通&群晖对比

随着个人数据量暴增,传统网盘空间不足和下载速度慢问题愈发凸显。新势力NAS,作为数据管理领域的璀璨新星,正以其独特的互联网设计理念,引领家庭及小型办公用户向数据存储的新纪元。它不仅仅是一款产品,更是为初学者用户量身定制的贴心伙伴。其系统界面之简洁、操作流程之直观,让人一目了然,真正实现了“即插即用”的极致便捷。同时,新势力NAS在保持专业水准的同时,更提供了多样化的扩展性配置,轻松应对各种数据存储与管理需求,让家庭及小型办公场景下的数据管理变得前所未有的简单与高效。

专注大数据、云计算、人工智能、机器人领域技术传播 3641

Dubbo 负载均衡

负载均衡是在支持应用程序的资源池中的一种方法。现代应用程序必须同时处理数百万用户,并以快速、可靠的方式将正确的文本、视频、图像和其他数据返回给每个用户。为了处理如此高的流量,大多数应用程序都有许多资源服务器,它们之间包含很多重复数据。负载均衡器是位于用户与服务器组之间的设备,充当不可见的协调者,确保均等使用所有资源服务器。

m0_64201189的博客 1359

指纹浏览器 WebGPU:新一代图形指纹的检测趋势与提前防御

指纹浏览器与风控系统对抗已升级至硬件层面。传统基于WebGL的API拦截和像素噪声技术,在WebGPU时代因架构变革而失效。WebGPU通过Compute Shader直接测量GPU物理算力,暴露了软件模拟的致命缺陷。防御需转向真实GPU硬件直通和虚拟化技术,如vGPU分割算力并伪装特征,以应对风控系统对硬件拓扑和浮点精度的检测。唯有基于物理算力的拟态,才能抵御新一代图形指纹的降维打击。

数据知道的博客 214

2.1 直流无刷电机(BLDC):机械结构与组件

本文详细解析了直流无刷电机(BLDC)的机械结构与核心组件。BLDC电机通过电子换向取代传统机械电刷,主要包含定子、转子、位置传感器和电子换向器四大组件。定子采用硅钢片叠压结构,配有三相绕组;转子采用永磁体材料,结构设计影响转矩特性;位置传感器(霍尔、编码器、旋转变压器)实现精准换向;电子换向器通过功率逆变拓扑完成电流控制。文章还对比了不同绕组类型、永磁材料及传感器技术的性能特点,为BLDC电机的设计与应用提供了理论基础。

技术工作者 387

Dubbo负载均衡算法总结

纲要前言一、学习目的与目标二、负载均衡概述三、DUbbo负载均衡的四种算法3.0 基于权重随机算法的 RandomLoadBalance3.0.1 实现原理3.0.2 源码解读3.1 基于最少活跃调用数算法的 LeastActiveLoadBalance3.1.1 实现原理3.1.2 源码解读3.2 基于 hash 一致性的 ConsistentHashLoadBalance3.2.1 实现原理3...

伊甸园 3271

计算机网络实验报告实验七可靠传输TCP协议分析

计算机网络实验报告实验七可靠传输TCP协议分析

m0_56638814的博客 965

Dubbo的负载均衡算法

目录 1 简介 1.1 自适应默认算法 1.2 抽象基类 1.2.1 选择Invoker 1.2.2 计算权重 2 负载均衡算法实现 2.1 加权随机算法 2.2 最小活跃数算法 ...

dehubiao4740的博客 412

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Dubbo(77)Dubbo的负载均衡算法是如何实现的?

随机(Random):随机选择一个服务提供者。轮询(Round Robin):按顺序轮流选择服务提供者。最少活跃调用(Least Active):选择当前活跃调用数最少的服务提供者。一致性哈希(Consistent Hash):根据请求参数的一致性哈希值选择服务提供者,确保相同参数的请求总是分配到同一个服务提供者。通过以上步骤,我们详细展示了Dubbo的负载均衡算法,包括随机、轮询、最少活跃调用和一致性哈希等。定义项目结构:创建服务接口模块、服务提供者模块和服务消费者模块。创建服务接口模块。

qq_43012298的博客 950

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

让我们来聊一聊dubbo的负载均衡算法

负载均衡的目的是通过分散流量,将流量尽可能地平摊在每一个节点上,进而保护节点,并提高系统性能。

m0_57713282的博客 1052

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【详解】Dubbo几种负载均衡算法

Dubbo作为一款高性能的Java RPC框架,在服务治理方面提供了丰富的功能,其中负载均衡(Load Balancing)是一个关键特性。带权重的轮询算法是在标准轮询算法的基础上增加了权重的概念,允许为不同的服务提供者设置不同的权重值。在 Dubbo 中,负载均衡(Load Balancing)是一个重要的特性,它确保了客户端请求能够均匀地分发到多个服务提供者上,从而提高系统的可用性和响应速度。基于一致哈希的负载均衡算法通过哈希算法将请求映射到特定的服务提供者上,确保相同的请求总是被路由到同一台服务器。

牛肉胡辣汤 307

dubbo3源码解析----负载均衡算法的实现

负载均衡是开发中的重要模块,以 dubbo3 的源码为例,详细讲解负载均衡算法的实现

u013010890的博客 306

DUBBO负载均衡算法及源码分析

文章目录DUBBO负载均衡算法及源码分析前言类结构随机权重-RandomLoadBalance算法思想源码分析主要代码-doSelectgetweight分析加权轮询-RoundRobinLoadBalance算法思想步骤分析源码分析最少活跃连接数-LeastActiveLoadBalance算法思想源码分析一致性hash-ConsistentHashLoadBalance算法思想源码分析补充总结 DUBBO负载均衡算法及源码分析 前言 ​ 下面是dubbo官方集群容错的布局图,集群容错有以下组件,

sinat_22143835的博客 731

dubbo中涉及到的负载均衡算法

dubbo中负载均衡算法 当dubbo中服务的提供者存在多个时,就存在服务的集群,集群中如何分配服务的调用就存在一些算法,选择合适的服务来提供服务。 轮询负载均衡算法RoundRobinLoadBalance 轮询顾名思义就是按照顺序一个一个来提供服务,假设有三个服务1,2,3,首先执行服务1,然后2,然后3,紧接着服务1 直接上代码 // 定义一个类似计数器 private static AtomicInteger atomicIndexDirect = new AtomicInteger(0

weixin_44477207的博客 303

Dubbo源码解析实战 - 负载均衡算法LoadBalance

1 简介 本篇尽量用一些简单的数学式子和流程图和大家一起梳理一下这些集群容错算法. 2 灵魂拷问 谈谈dubbo中的负载均衡算法及特点 最小活跃数算法中是如何统计这个活跃数的 简单谈谈你对一致性哈希算法的认识 3 接口的继承体系 4 RandomLoadBalance(随机) 随机,按权重设置随机概率在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动...

qq_35854212的博客 817

dubbo中的负载均衡算法

例如 ABC 三节点有如下权重:{A: 3, B: 2, C: 1} 那么按照最原始的轮询算法,调用过程将变成:A A A B B C。我们发现经过合计权重(3+2+1)轮次后,循环又回到了起点,整个过程中节点流量是平滑的,且哪怕在很短的时间周期内,概率都是按期望分布的。然后生成区间[0,5),[5,8),[8,10],随机范围为0~10,权重越大则概率越大。根据目标集群服务器,处理性能最高的权重越高,处理性能较低的,权重也交低。则按照 A,,A,A,A,A,B,B,B,C,C轮询。

wenlai123456的博客 226

Dubbo集群与负载均衡算法深度解析

Dubbo集群与负载均衡算法深度解析 【免费下载链接】dubbo Dubbo 是一款高性能、轻量级的分布式服务框架,旨在解决企业应用系统中服务治理的问题。轻量级的服务框架,支持多种通信协议和服务治理。适用分布式微服务架构下的服务调用和治理。 ...

gitblog_01044的博客 1165

Dubbo负载均衡算法

本文摘自dubbo官网---dubbo2.7版本 连接:https://dubbo.apache.org/zh/docs/v2.7/dev/source/loadbalance/ 1.简介 LoadBalance 中文意思为负载均衡,它的职责是将网络请求,或者其他形式的负载“均摊”到不同的机器上。避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况。通过负载均衡,可以让每台服务器获取到适合自己处理能力的负载。在为高负载服务器分流的同时,还可以避免资源浪费,一举两得。负载均衡可分为软件负载均衡和硬

嗯哼的博客 808

dubbo学习笔记-负载均衡算法

我的学习方法: 1-应用::根据业务场景(小)写个demo ; 2-源码::不必全部看懂,知道一些关键类就可以; 3-官方文档:: 现在主流的文档在github都找得到,另外开源的在apache官网上也可以找得到. apache-dubbo负载均衡官方文档 一些关键知识点梳理: 负载均衡 LoadBalance 中文意思为负载均衡,它的职责是将网络请求,或者其他形式的负载“均摊”到不同的机器上。避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况。通过负载均衡,可以让每台服务器获取.

狐狸是一只狐狸 210

Dubbo 常见的负载均衡(Load Balance)算法,一起学习一下吧~

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、负载均衡的目的是什么?二、权重随机算法三.非平滑权重轮询算法平滑权重轮询算法ip hash算法一致性Hash负载均衡算法总结 前言 ????最近学习Dubbo的时候了解到负载均衡相关的内容,随着用户量的增多,数据不断加大,单体应用已不能满足项目的需求,分布式应用就成了我们的解决方案.而且负载均衡算法直接影响了我们分布式应用的性能,本文就dubbo的负载均衡算法来做一些了解吧. 一、负载均衡的目的是什么? 讨论负载均衡,

qq_44405452的博客 2507
上一篇: IDEA 常用设置【更新ing】
下一篇: grpc-java 源码阅读环境搭建
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值