Dubbo框架学习-负载均衡

手写一个简化版的Dubbo框架 在学习了Dubbo之后, 我发现自己好像了解了Dubbo的实现原理, 又好像不是很了解, 毕竟我只是背诵了下概念, 没有深入的去看源码. 这里我就来手写一个简化版的Dubbo框架, 通过动手实践来深入理解Dubbo的实现原理. Dubbo的实现原理 RPC调用的过程 我们先来看下RPC调用的过程. 服务容器负责启动,加载,运行服务提供者。 服务提供者在启动时,向注册中心注册自己提供的服务。 服... 阅读详情

####负载概述####

  1. dubbo中的负载均衡机制主要有4种方式,分别是随机,轮训,最少连接数,一致性hash。其中默认情况下,dubbo采用随机方式进行负载。
  2. dubbo中的负载均衡就是从多个Invoker列表中选择一个可执行的Invoker。集群中的每一个provider都是一个Invoker。
  3. consumer根据Invocation,url,List三个参数,采用不同的算法进行选择。
    ####集群类图####
    dubbo中的负载类图如下:
    这里写图片描述
  4. dubbo中的负载均衡采用模板方法方式设计,其中接口LoadBalance定义了选取Ivnvoker的策略,根据Invocation,url,List选择出一个合适的Invoker。其中声明了方法如下:
<T> Invoker<T> select(List<Invoker<T>> invokers, URL url, Invocation invocation)
  1. AbstractLoadBalance抽象类,实现了select方法,该方法内部又将具体的每种负载策略实现,转接给具体的实现类,即上述类图中的4个实现类。
public abstract class AbstractLoadBalance implements LoadBalance {

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

 public <T> Invoker<T> select(List<Invoker<T>> invokers, URL url, Invocation invocation) {
        if (invokers == null || invokers.size() == 0)
            return null;
        if (invokers.size() == 1)
            return invokers.get(0);
        // 调用模板方法
        return doSelect(invokers, url, invocation);
    }

// 具体选择哪个Invoker的算法由子类具体实现
 protected abstract <T> Invoker<T> doSelect(List<Invoker<T>> invokers, URL url, Invocation invocation);

/** 计算每个Invoker的权重,集群中的每一个provider都是一个Invoker,
 ** 每一个provider可以在服务端设置权重,即consumer在进行选择Inovker时
 ** 要计算每一个invoker的权重,从而选择出更合适的invoker
 **/
 protected int getWeight(Invoker<?> invoker, Invocation invocation) {
        int weight = invoker.getUrl().getMethodParameter(invocation.getMethodName(), Constants.WEIGHT_KEY, Constants.DEFAULT_WEIGHT);
        if (weight > 0) {
            long timestamp = invoker.getUrl().getParameter(Constants.REMOTE_TIMESTAMP_KEY, 0L);
            if (timestamp > 0L) {
                int uptime = (int) (System.currentTimeMillis() - timestamp);
                int warmup = invoker.getUrl().getParameter(Constants.WARMUP_KEY, Constants.DEFAULT_WARMUP);
                if (uptime > 0 && uptime < warmup) {
                    weight = calculateWarmupWeight(uptime, warmup, weight);
                }
            }
        }
        return weight;
    }

}
  1. 具体的实现算法类,可以根据源码去具体分析。再这儿就不分析了。
Dubbo学习总结(2)——Dubbo架构详解 一、前言 部门去年年中开始各种改造,第一步是模块服务化,这边初选dubbo试用在一些非重要模块上,慢慢引入到一些稍微重要的功能上,半年时间,学习过程及线上使用遇到的些问题在此总结下。 整理这篇文章差不多花了两天半时间,请尊重劳动成果,如转载请注明出处http://blog.youkuaiyun.com/hzzhoushaoyu/article/details/43273099 二、什么是dubb 阅读详情

相关推荐

立创开源TinyAWG:基于ZYNQ7010的35MHz带宽200MSa/s任意波形发生器设计与实现

本文详细解析了立创开源TinyAWG的设计与实现,这是一款基于ZYNQ7010芯片的低成本高性能任意波形发生器。项目实现了35MHz带宽和200MSa/s采样率,核心采用ARM+FPGA协同架构,FPGA负责高速DDS信号生成,ARM运行Linux并搭载LVGL图形界面。文章涵盖了硬件选型、电路设计、软件逻辑及性能测试,为复刻和学习ZYNQ系统设计、高速DAC应用提供了完整参考。

weixin_42576467的博客 433

Dubbo之负载均衡

在集群负载均衡时,Dubbo 提供了多种均衡策略,包括Random随机、RoundRobin轮询、LeastActive最少活跃调用数、ConsistentHash一致性Hash四种。缺省为random随机调用。 负载均衡策略 Random LoadBalance 随机,按权重设置随机概率。 在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调...

小花生编程 342

Abaqus仿真进阶:如何准确计算气动软体机器人的抓取力(Blocking Force分析)

本文详细介绍了使用Abaqus进行气动软体机器人抓取力(Blocking Force)分析的进阶技巧。从材料模型验证、刚性目标物选择到接触对建立和充气加载优化,提供了一套完整的有限元仿真解决方案,帮助工程师准确预测软体执行器的抓取性能。

weixin_42528902的博客 401

dubbo的轮询机制说明

针对dubbo的文章已经很多, 我们这里通过代码的解析,简单描述下各种负载均衡的实现方式 随机负载均衡(RandomLoadBalance):先统计所有服务器上该接口方法的权重总和,然后对这个总和随机nextInt一下,看生成的随机数落到哪个段内,就调哪个服务器上的该服务。 protected Invoker doSelect(List> invokers, URL url, Invo

hdu09075340的博客 7200

从理论到代码:如何用随机矩阵理论(RMT)优化你的微生物共现网络分析?

本文详细介绍了如何利用随机矩阵理论(RMT)优化微生物共现网络分析,解决传统阈值法的主观性和不稳定性问题。通过R语言实现端到端的分析流程,包括矩阵标准化、本征值谱分析和自动阈值确定,显著提升网络构建的准确性和可靠性。该方法特别适用于高通量测序数据,能自动识别噪声与真实信号的边界,为微生物组学研究提供更精确的互作网络分析工具。

weixin_29096377的博客 363

手把手教你搞定EMC EFT测试:从电源线到信号线的完整整改实战(附常见失败原因)

本文详细解析了EMC EFT测试中的常见问题及整改措施,从电源线到信号线的完整实战方案。通过四步定位法和成本最优整改策略,帮助工程师有效应对电快速脉冲群干扰,提升产品通过率并降低成本。

weixin_30920597的博客 498

Dubbo源码解析(三)-了解消费者的负载均衡等以及调用的补充

上篇文章https://blog.youkuaiyun.com/qq_38340127/article/details/112712044为当一个服务提供者直接进行request等,那么当有多个服务提供者,消费者是如何进行选择? 首先新增一个服务提供者: provider1中暴露端口修改为20881 将两个服务都进行启动,消费者进行调试: 用zookeeper客户端进行查看(由于我在idea中安装插件无效。。。) 未启动消费者 消费者调用-客户端与服务端进行连接 对上篇中存在的部分遗漏进行

大鹏的博客 325

什么是plm系统?-数字化转型网

当今世界,产品研发能力是企业在激烈的市场竞争中保持战略优势的核心竞争力之一。如何有效地缩短产品研发周期、改善产品服务的设计迭代流程、有效降低产品的研发成本,也是企业面临的主要问题之一。PLM(Product Lifecycle Management,产品生命周期管理)在优化产品研发的全管理流程、增强企业产品的市场竞争力方面具有关键的作用。

cxo17757154043的博客 883

Dubbo——负载均衡(LoadBalance)原理

摘要 当一台服务器的承受能力达到上限时,那么就需要多台服务器来组成集群,提升应用整体的吞吐量,那么这个时候就涉及到如何合理分配客户端请求到集群中不同的机器,这个过程就叫做负载均衡。LoadBalance 中文意思为负载均衡,它的职责是将网络请求,或者其他形式的负载“均摊”到不同的机器上。避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况。通过负载均衡,可以让每台服务器获取到适合自己处理能力的负载。在为高负载服务器分流的同时,还可以避免资源浪费,一举两得。负载均衡可分为软件负载均衡和硬件负载均衡

庄小焱 5708

【软件测试】- 公有云、私有云、混合云简介以及如何在公有云与私有云上分别搭建测试环境

公有云、私有云以及混合云是目前云计算领域的三种主要模式。它们之间的区别主要在于部署方式、数据访问和管理控制的不同。在阿里云或腾讯云上使用 Kubernetes 和 Docker 搭建测试环境可以提供高度的可伸缩性和灵活性。这样的环境非常适合于需要在多种配置和条件下进行测试的复杂应用。通过云服务提供的工具和服务,可以轻松管理和监控整个测试过程。在云服务上搭建测试环境涉及选择合适的云提供商、配置云资源、安装和设置所需软件等步骤。### 1. 选择云服务提供商。

weixin_46453070的博客 2342

【Proteus仿真】用24C04与1602LCD设计的简易加密电子密码锁

【Proteus仿真】用24C04与1602LCD设计的简易加密电子密码锁

perseverance51博客 1121

负载均衡架构

负载均衡架构

lee_nacl的博客 842

【DRAM存储器五十四】LPDDR5介绍--PHY简介和LPDDR5训练流程

简述LPDDR5 PHY的基本功能和训练流程简介

highman110的博客 907

Dubbo学习

RPC的概念: RPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式,他是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。 RPC的原理图: 由RPC的原理图可知RPC两个核心模块是通...

3553

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

千锋索尔《阿里RPC框架Dubbo源码级讲解》

命运就算颠沛流离,命运就算曲折离奇,命运就算恐吓着你做人没趣味。别流泪心酸更不应舍弃,愿千锋能一生永远陪伴你,一生之中弯弯曲曲我也要走过,从何时有你有你伴我给我热烈地拍和像Java语言陪伴真的我,结伴行千山也定能踏过。 纵观中国开源历史,你真的没法找到第二个像 Dubbo 一样自带争议和讨论热度的开源项目了。2011 年,Dubbo的开源填补了当时生产环境使用的 RPC 框架的空白,一发布就被广泛采用,Dubbo经历了停止维护、重启维护后捐献给 Apache 基金会、接着又以顶...

qfxulei的博客 192

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

硬核,Dubbo分布式服务框架入门教程

Dubbo是阿里开源项目,国内很多互联网公司都在用,已经经过很多线上考验。 Dubbo内部使用了 Netty、Zookeeper,保证了高性能高可用性,使用Dubbo可以将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,可用于提高业务复用和灵活扩展,使前端应用能更快速的响应多变的市场需求。 另外,分布式架构可以承受更大规模的并发流量。 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起。 1、单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一

DDDYSz的博客 1351

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

dubbo学习

2015-10-12 http://www.cnblogs.com/Javame/p/3632473.html dubbo框架学习 http://www.oschina.net/question/113994_126551 dubbo注册多个服务Provider,后注册的显示警告信息 http://www.oschina.net/question/778495_193291 Dubbo ...

iteye_6973的博客 210

想突破学习瓶颈,为什么要认真的学一下Dubbo?

今天有学生在问,在学习dubbo的时候遇到瓶颈了怎么办,一些东西就感觉就在那里,但是,就是碰不到,摸不着,陷入了迷茫,今天在这里,就跟大家讲一下怎么突破这个瓶颈 先自我介绍一下哈,我是鲁班学院的周瑜老师,拥有十年互联网电商、互联网金融行业从业经验,在系统架构设计、系统性能调优、高并发秒杀系统、开源项目等方面有非常丰富的经验。 曾任蚂蚁金服高级开发工程师、大众点评高级架构师,同时也是开源框架Dubb...

yueyunyin的博客 2224

Dubbo 学习笔记

Dubbo是阿里开源的分布式RPC框架,提供高性能远程调用、服务注册发现、负载均衡、容错等功能。其架构包含Provider、Consumer、Registry等核心组件,支持多种通信协议和序列化方式。通过SpringBoot可以快速搭建服务,开发者只需定义接口、添加注解即可实现远程调用。Dubbo采用SPI机制实现扩展功能,提供随机、轮询等负载均衡策略,以及失败重试等容错策略。常见问题包括服务注册失败、调用缓慢等。建议从官方文档入手,逐步掌握基础概念、实战搭建和源码分析。

笑衬人心的博客 998

RPC框架-Dubbo

Dubbo 是一个高性能、轻量级的开源 Java RPC 框架,最初由阿里巴巴开发,现已成为 Apache Software Foundation 的顶级项目。Dubbo 致力于提供高效的服务治理和远程调用能力,广泛应用于分布式服务架构中,特别是在微服务架构的实现中。Dubbo 的核心功能包括:远程通信、负载均衡、容错机制、服务自动注册与发现。凭借其丰富的特性和强大的可扩展性,Dubbo 已成为许多互联网企业和传统企业构建分布式系统的首选框架之一。

Flying_Fish_roe的博客 867

【Dubbo】dubbo学习

一、分布式和微服务 1.1 什么是分布式 分布式是一种系统部署方式,即根据实际情况将项目拆分成多个不同的服务,并分散部署在不同的机器是。在分布式中,生产环境的服务器或虚拟机必定超过一台。 分布式服务顾名思义服务是分散部署在不同的机器上的,一个服务可能负责几个功能,是一种面向SOA架构的,服务之间也是通过rpc来交互或者是webservice来交互的。逻辑架构设计完后就该做物理架构设计,系统应用部署在超过一台服务器或虚拟机上,且各分开部署的部分彼此通过各种通讯协议交互信息,就可算作分布式部署。 .

qq_34416331的博客 720

我的Dubbo学习计划

大家好,我是阿斌。从今天开始,我们就要开始学习一个优秀的RPC框架-Dubbo了。从大致的使用流程,再到深入探究源码,预计的学习时间是在三周左右。 开始学习 在学习之前,我们可以先了解一下,一个优秀的RPC框架能够提供什么样的能力? 远程调用 动态代理 序列化 网络通信编码 对调用方来说,只需要调用一个接口,而接口最终的实现,是一个屏蔽了底层细节的proxy。proxy会帮助我们将参数序列化,编码,网络传输给远程服务。在提供者端,会统一解析请求,根据映射关系找到具体的接口实现,并返回结果。 在网络传

1997

Dubbo 学习心得

Dubbo是阿里巴巴内部使用的分布式业务框架,也是java RPC框架,2012年由阿里巴巴开源 红色我标注一下,什么叫RPC: 1.RPC 全称为remote procedure,即远程过程调用 2.需要注意的是RPC并不是一个具体的技术,而是值整个网络远程调用的过程 3.Java中的RPC框架比较多,广泛使用的有RMI.Hessian.Dubbo等。 它是一个业务框架,那什么是分布式业务框架呢?? 这有一道面试题,帮助理解 分布式:面试直达: 聊一聊集群和分布式的区别 集群: 多台服务器重复完成同一个

qq_42880294的博客 541

【Dubbo】Dubbo负载均衡实现解析

本文讲解了Dubbo负载均衡的作用,如何配置Dubbo负载均衡策略,以及Dubbo提供5种负载均衡实现和原理。

小明的Java问道之路 1565

Dubbo、SpringCloud框架学习

Dubbo 更加注重 高性能的 RPC 通信 和 服务治理,适合对性能要求较高的场景,且更偏向于面向服务的架构。Spring Cloud 提供了一整套微服务的解决方案,包括 服务注册与发现、负载均衡、API 网关、断路器等功能,适合全面构建微服务架构。

qq_40708522的博客 839

Dubbo 负载均衡

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

m0_64201189的博客 1359
上一篇: Redis学习--JedisCluster源码解读
下一篇: idea中基本设置功能
鸡蛋达芬奇
博客等级 码龄19年 24粉丝 34原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值