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

这篇具有很好参考价值的文章主要介绍了【Dubbo】Dubbo负载均衡实现解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Dubbo】Dubbo负载均衡实现解析,Dubbo从入门到精通与实战,dubbo,负载均衡,运维,分布式,微服务,算法

📫作者简介:小明java问道之路2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司后端高级工程师。

        

📫 热衷分享,喜欢原创~ 关注我会给你带来一些不一样的认知和成长。

        

🏆 2022博客之星TOP3 | CSDN博客专家 | 后端领域优质创作者 | CSDN内容合伙人

🏆 InfoQ(极客邦)签约作者、阿里云专家 | 签约博主、51CTO专家 | TOP红人、华为云享专家

        

🔥如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主~ 


🍅 文末获取联系 🍅  👇🏻 精彩专栏推荐订阅收藏 👇🏻

专栏系列(点击解锁)

学习路线(点击解锁)

知识定位

🔥Redis从入门到精通与实战🔥

Redis从入门到精通与实战

围绕原理源码讲解Redis面试知识点与实战

🔥MySQL从入门到精通🔥

MySQL从入门到精通

全面讲解MySQL知识与企业级MySQL实战

🔥计算机底层原理🔥

深入理解计算机系统CSAPP

以深入理解计算机系统为基石,构件计算机体系和计算机思维

Linux内核源码解析

围绕Linux内核讲解计算机底层原理与并发

🔥数据结构与企业题库精讲🔥

数据结构与企业题库精讲

结合工作经验深入浅出,适合各层次,笔试面试算法题精讲

🔥互联网架构分析与实战🔥

企业系统架构分析实践与落地

行业最前沿视角,专注于技术架构升级路线、架构实践

互联网企业防资损实践

互联网金融公司的防资损方法论、代码与实践

🔥Java全栈白宝书🔥

精通Java8与函数式编程

本专栏以实战为基础,逐步深入Java8以及未来的编程模式

深入理解JVM

详细介绍内存区域、字节码、方法底层,类加载和GC等知识

深入理解高并发编程

深入Liunx内核、汇编、C++全方位理解并发编程

Spring源码分析

Spring核心七IOC/AOP等源码分析

MyBatis源码分析

MyBatis核心源码分析

Java核心技术

只讲Java核心技术

本文目录

本文导读

一、Dubbo负载均衡的作用?

二、Dubbo提供了 5 种负载均衡实现

三、如何配置Dubbo负载均衡策略?

四、Dubbo负载均衡的实现

1、随机均衡算法 Random LoadBalance

2、权重轮循算法 RoundRobin LoadBalance

3、最小活跃数算法 LeastActive LoadBalance

4、一致性hash算法 ConsistentHash LoadBalance

5、最短响应时间算法 ShortestResponse LoadBalance

总结


本文导读

Dubbo作为分布式远程调用框架,要保证的点很多,比如:负载均衡、服务注册与发现、故障转移、高性能通信等等!

Dubbo是一个分布式服务框架,能避免单点故障和支持服务的横向扩容。一个服务通常会部署多个实例,如何从多个服务 Provider 组成的集群中挑选出一个进行调用,就涉及到负载均衡的策略。

一、Dubbo负载均衡的作用?

负载均衡的目的是为了能够将请求合理地平分到各服务实例上,以便发挥所有机器的叠加作用。

Dubbo 需要对 Consumer 的调用请求进行分配,避免少数 Provider 节点负载过大,而剩余的其他 Provider 节点处于空闲的状态。

因为当 Provider 负载过大时,就会导致一部分请求超时、丢失等一系列问题发生,造成线上故障。

二、Dubbo提供了 5 种负载均衡实现

基于 Hash 一致性的 ConsistentHashLoadBalance(consistenthash),一致性哈希负载均衡,相同参数的请求总是落在同一台机器上。

基于权重随机算法的 RandomLoadBalance(random),随机负载均衡,随机的选择一个,是Dubbo的默认负载均衡策略。

基于最少活跃调用数算法的 LeastActiveLoadBalance(leastactive),最少活跃调用数,相同活跃数的随机。活跃数指调用前后计数差。使慢的 Provider 收到更少请求,因为越慢的 Provider 的调用前后计数差会越大。

基于加权轮询算法的 RoundRobinLoadBalance(roundrobin),轮询负载均衡,轮询选择一个。

基于最短响应时间的 ShortestResponseLoadBalance (shortestresponse),同最小活跃数负载,算法框架完全相同

【Dubbo】Dubbo负载均衡实现解析,Dubbo从入门到精通与实战,dubbo,负载均衡,运维,分布式,微服务,算法

三、如何配置Dubbo负载均衡策略?

Dubbo负载均衡有多种级别的配置:服务端服务/方法级别、客户端服务/方法级别; 具体配置如下:

<!-- 服务端服务级别 -->
<dubbo:service interface="..." loadbalance="roundrobin" />

<!-- 客户端服务级别 -->
<dubbo:reference interface="..." loadbalance="random" />

<!-- 服务端方法级别 -->
<dubbo:service interface="...">
    <dubbo:method name="hello" loadbalance="consistenthash"/>
</dubbo:service>

<!-- 客户端方法级别 -->
<dubbo:reference interface="...">
    <dubbo:method name="hello" loadbalance="leastactive"/>
</dubbo:reference>


随机:loadbalance="random"
轮循:loadbalance="roundrobin"
最少活跃数:loadbalance="leastactive"
一致性Hash:loadbalance="consistenthash"

四、Dubbo负载均衡的实现

1、随机均衡算法 Random LoadBalance

随机,按照权重设置随机概率,调用量越大分布越均匀

是Dubbo的默认负载均衡策略

加权随机算法原理:假设我们有三个 Provider 节点 A、B、C,它们对应的权重分别为 5、2、3,权重总和为 10。现在把这些权重值放到一维坐标轴上,[0, 5) 区间属于节点 A,[5, 7) 区间属于节点 B,[7, 10) 区间属于节点 C,然后通过随机数生成器在 [0, 10) 这个范围内生成一个随机数,然后计算这个随机数会落到哪个区间中。

2、权重轮循算法 RoundRobin LoadBalance

轮循,按照权重设置轮循比率

存在问题: 请求累积的问题,请求会累积在性能较差的机器上,导致响应时间慢。

解决办法:把性能差的机器,权重调低。

缺点:无法对机器性能在时间上的变化而做出动态改变,只能人工发现机器性能下降,手动调节权重。

加权轮询负载均衡算法原理:轮询指的是将请求轮流分配给每个 Provider。例如,有 A、B、C 三个 Provider 节点,加权之后,分配给每个 Provider 节点的流量比会接近或等于它们的权重比。例如,Provider 节点 A、B、C 权重比为 5:1:1,那么在 7 次请求中,节点 A 将收到 5 次请求,节点 B 会收到 1 次请求,节点 C 则会收到 1 次请求。

每个 Provider 节点有两个权重:一个权重是配置的 weight,该值在负载均衡的过程中不会变化;另一个权重是currentWeight,该值会在负载均衡的过程中动态调整,初始值为 0。

当有新的请求进来时,RoundRobinLoadBalance 会遍历 Invoker 列表,并用对应的 currentWeight 加上其配置的权重。遍历完成后,再找到最大的 currentWeight,将其减去权重总和,然后返回相应的 Invoker 对象。

3、最小活跃数算法 LeastActive LoadBalance

处理请求慢的机器将获得更小的调用量(相同活跃数的随机,活跃调用前后计算差值),以达到系统处理最大化。

优点:灵活,能够简单的根据调用数量动态调整机器处理的数量。

最小活跃数负载均衡算法原理:LeastActiveLoadBalance 使用的是最小活跃数负载均衡算法。

它认为当前活跃请求数越小的 Provider 节点,剩余的处理能力越多,处理请求的效率也就越高,那么该 Provider 在单位时间内就可以处理更多的请求,所以我们应该优先将请求分配给该 Provider 节点。

4、一致性hash算法 ConsistentHash LoadBalance

一致性 Hash 负载均衡可以让参数相同的请求每次都路由到相同的服务节点上,这种负载均衡策略可以在某些 Provider 节点下线的时候,让这些节点上的流量平摊到其他 Provider 上,不会引起流量的剧烈波动。

优点:更加灵活。

缺点:灵活导致难度大,由于粒度 细到单个请求上,一开始在开发时就得规划好,后期变动维护人员难度大。

一致性Hash原理:假设现在有N个 Provider 节点对外提供服务,有 100 个请求同时到达,如果想让请求尽可能均匀地分布到这N个 Provider 节点上,我们可能想到的最简单的方法就是 Hash 取模,即 hash(请求参数) % N。如果参与 Hash 计算的是请求的全部参数,那么参数相同的请求将会落到同一个 Provider 节点上。

如果突然有一个 Provider 节点出现宕机的情况,那我们就需要对 2 取模,即请求会重新分配到相应的 Provider 之上。在极端情况下,甚至会出现所有请求的处理节点都发生了变化,这就会造成比较大的波动。

一致性 Hash 算法的原理也是取模算法,与 Hash 取模的不同之处在于:Hash 取模是对 Provider 节点数量取模,而一致性 Hash 算法是对 2^32 取模

5、最短响应时间算法 ShortestResponse LoadBalance

ShortestResponseLoadBalance 是Dubbo 2.7 版本之后新增加的一个 LoadBalance 实现类。

最短响应时间的负载均衡算法原理:

实现了最短响应时间的负载均衡算法,也就是从多个 Provider 节点中,选出调用成功的且响应时间最短的 Provider 节点,不过满足该条件的 Provider 节点可能有多个,所以还要再使用随机算法进行一次选择,得到最终要调用的 Provider 节点。

总结

Dubbo提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

本文讲解了Dubbo负载均衡的作用,如何配置Dubbo负载均衡策略,以及Dubbo提供5种负载均衡实现和原理。文章来源地址https://www.toymoban.com/news/detail-752977.html

到了这里,关于【Dubbo】Dubbo负载均衡实现解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 中间件(二)dubbo负载均衡介绍

    支持轮询、随机、一致性hash和最小活跃数等。 ① sequences:内部的序列计数器 ② 服务器接口方法权重一样:(sequences+1)%服务器的数量=(决定调用)哪个服务器的服务。 ③ 服务器接口方法权重不一样:找到最大权重(权重数)%(sequences+1),然后找出权重比该取模后的值

    2024年02月12日
    浏览(35)
  • Dubbo负载均衡策略之 一致性哈希

    本文主要讲解了一致性哈希算法的原理以及其存在的数据倾斜的问题,然后引出解决数据倾斜问题的方法,最后分析一致性哈希算法在Dubbo中的使用。通过这篇文章,可以了解到一致性哈希算法的原理以及这种算法存在的问题和解决方案。 在这里引用dubbo官网的一段话——

    2024年02月08日
    浏览(67)
  • Dubbo的几个负载均衡类--最短响应时间

    -----------------看过之前一致性哈希和最少活跃书的可以跳过-----------------  链接在此:Dubbo的几个负载均衡类--一致性哈希 Dubbo的几个负载均衡类--最少活跃数 Dubbo的几个负载均衡类--轮询 Dubbo的几个负载均衡类--随机 消费者发起调用过程中涉及如下几步 1:接口调用,比如Demo

    2024年01月23日
    浏览(44)
  • 2.1: Dubbo的基本应用-负载均衡,集群容错,服务降级

    官网地址:  http://dubbo.apache.org/zh/docs/v2.7/user/examples/loadbalance/ 如果在消费端和服务端都配置了负载均衡策略,   以消费端为准。 这其中比较难理解的就是最少活跃调用数是如何进行统计的? 讲道理 ,   最少活跃数应该是在 服务提供者端 进行统计的,   服务提供者统计有

    2024年02月10日
    浏览(30)
  • Dubbo负载均衡策略之 一致性哈希 | 京东云技术团队

    本文主要讲解了一致性哈希算法的原理以及其存在的数据倾斜的问题,然后引出解决数据倾斜问题的方法,最后分析一致性哈希算法在Dubbo中的使用。通过这篇文章,可以了解到一致性哈希算法的原理以及这种算法存在的问题和解决方案。 在这里引用dubbo官网的一段话——

    2024年02月08日
    浏览(49)
  • dubbo源码中设计模式——负载均衡中模版模式的应用

    在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。 使用场景:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板

    2024年02月19日
    浏览(49)
  • 【Dubbo3云原生微服务开发实战】「Dubbo前奏导学」 RPC服务的底层原理和实现

    Dubbo是一款高效而强大的RPC服务框架,它旨在解决微服务架构下的服务监控和通信问题。该框架提供了Java、Golang等多语言的SDK,使得使用者可以轻松构建和开发微服务。Dubbo具备远程地址发现和通信能力,可通过Dubbo独有的身临其境的服务治理特验为主导,以提高开发人员的功

    2024年02月05日
    浏览(49)
  • 精通api接口测试,接口分类,接口架构,http,webservice,dubbo接口协议,接口流程,接口工具,cookie,session,token接口鉴权原理以及实战

    接口口测试和接口自动化测试一直都是很多人混乱的概念。所以搞清楚2个的概念是很重要的一件事情。 接口:一段具备逻辑处理功能的程序代码组成的,可被其他方法、服务或应用所使用。 对于调用接口的那一方,可以把接口看做一只黑匣子,只需要负责按约定传入参数,

    2024年02月02日
    浏览(49)
  • Dubbo之ExtensionLoader源码解析

    ExtensionLoader包含了扩展机制的逻辑,类似ClassLoader的功能用途。ExtensionLoader主要功能是加载约定路径下的SPI文件,获取扩展类的类名,并做Class类、实例的缓存。里面还包含自动包装、自动加载、自适应、自动激活等功能的实现逻辑。 2.1.1)主要成员变量分析 2.1.2)主要成员方

    2024年02月12日
    浏览(39)
  • 5.0: Dubbo服务导出源码解析

    #Dubbo# Dubbo服务导出基本原理分析 Dubbo服务注册流程源码分析 Dubbo服务暴露流程源码分析 服务导出的入口方法为 ServiceBean.export() ,此方法会调用 ServiceConfig.export() 方法,进行真正的服务导出。 服务导出的入口方法为 ServiceBean.export() ,此方法会调用 ServiceConfig.export() 方法,进

    2024年02月10日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包