带你读《Apache Dubbo微服务开发从入门到精通》——六、 负载均衡

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 带你读《Apache Dubbo微服务开发从入门到精通》——六、 负载均衡

六、 负载均衡

 

在集群负载均衡时,Dubbo提供了多种均衡策略,缺省为random随机调用。

 

具体实现上,Dubbo提供的是客户端负载均衡,即由Consumer通过负载均衡算法得出需要将请求提交到哪个Provider实例。

 

可以自行扩展负载均衡策略,参见:负载均衡扩展

 

1. 负载均衡策略

 

目前Dubbo内置了如下负载均衡算法,用户可直接配置使用:

 

image.png

 

1) Random

 

加权随机,按权重设置随机概率。

 

在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。

 

缺点:存在慢的提供者累积请求的问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。

 

2) RoundRobin

 

加权轮询,按公约后的权重设置轮询比率,循环调用节点

 

缺点:同样存在慢的提供者累积请求的问题。

 

加权轮询过程过程中,如果某节点权重过大,会存在某段时间内调用过于集中的问题。例如ABC三节点有如下权重:{A: 3, B: 2, C: 1}那么按照最原始的轮询算法,调用过程将变成:A A A B B C对此,Dubbo借鉴Nginx的平滑加权轮询算法,对此做了优化,调用过程可抽象成下表

 

image.png

 

我们发现经过合计权重(3+2+1)轮次后,循环又回到了起点,整个过程中节点流量是平滑的,且哪怕在很短的时间周期内,概率都是按期望分布的。

 

如果用户有加权轮询的需求,可放心使用该算法。

 

3) LeastActive

 

加权最少活跃调用优先,活跃数越低,越优先调用,相同活跃数的进行加权随机。活跃数指调用前后计数差(针对特定提供者:请求发送数-响应返回数),表示特定提供者的任务堆积量,活跃数越低,代表该提供者处理能力越强。

 

使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大;相对的,处理能力越强的节点,处理更多的请求。

 

4) ShortestResponse

 

加权最短响应优先,在最近一个滑动窗口中,响应时间越短,越优先调用。相同响应时间的进行加权随机。

 

使得响应时间越快的提供者,处理更多的请求。

 

缺点:可能会造成流量过于集中于高性能节点的问题。

 

这里的响应时间=某个提供者在窗口时间内的平均响应时间,窗口时间默认是30s。

 

5) ConsistentHash

 

一致性Hash,相同参数的请求总是发到同一提供者。

 

当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。

 

算法参见:Consistent Hashing | WIKIPEDIA

 

缺省只对第一个参数Hash,如果要修改,请配置

缺省用160份虚拟节点,如果要修改,请配置

 

2. 配置

 

1) 服务端服务级别

 

image.png

 

2) 客户端服务级别

 

image.png

 

3) 服务端方法级别

 

image.png

 

4) 客户端方法级别

 

image.png

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
15小时前
|
Kubernetes Docker 微服务
微服务实践k8s&dapr开发部署实验(3)订阅发布
微服务实践k8s&dapr开发部署实验(3)订阅发布
4 0
|
1天前
|
机器学习/深度学习 监控 持续交付
构建高效微服务架构:后端开发的新趋势探索深度学习在图像识别中的边界
【5月更文挑战第27天】随着业务需求的快速变化和市场竞争的激烈,企业需要更灵活、高效和可扩展的系统来支持其运营。微服务架构作为一种新兴的软件开发模式,已经成为后端开发领域的热门话题。本文将深入探讨微服务架构的概念、优势以及如何构建一个高效的微服务架构,帮助后端开发者更好地应对业务挑战。 【5月更文挑战第27天】 随着人工智能的不断进步,深度学习技术已经在图像识别领域取得了显著成就。本文将深入探讨深度学习模型在处理复杂图像数据时的挑战与机遇,分析现有技术的局限性,并提出潜在的改进方向。通过实验验证,我们将展示如何通过创新的网络架构、数据增强策略和损失函数设计来提升模型性能。本研究不仅为深度学习
|
1天前
|
Kubernetes API 开发者
构建高效微服务架构:后端开发的新趋势
【5月更文挑战第27天】 在现代软件开发领域,微服务架构已经成为一种流行的设计模式。它通过将大型应用程序拆分成一系列小型、独立的服务来提高可维护性、扩展性和敏捷性。本文深入探讨了如何构建一个高效的微服务架构,包括选择合适的技术栈、实现服务的解耦和独立部署、以及确保系统的高可用性和安全性。我们将讨论微服务架构的优势,以及在实施过程中可能遇到的挑战和解决方案。
|
1天前
|
消息中间件 监控 数据库
构建高效微服务架构:后端开发的新趋势
【5月更文挑战第27天】 在当今快速演变的技术景观中,构建高效、可扩展且易于管理的后端系统已成为开发社区的重中之重。微服务架构作为一种创新的软件开发模式,以其独特的模块化和独立性特征,为解决复杂系统问题提供了新的解决方案。本文将深入探讨微服务架构的核心概念,分析其对后端开发流程的影响,并提供一系列实践策略来帮助开发者构建和维护高效的微服务系统。通过实际案例分析和最佳实践的分享,我们旨在为读者提供一套全面的工具和思路,以优化他们的后端项目并提升系统性能。
|
1天前
|
负载均衡 监控 API
探索后端开发中的微服务架构设计与实践
在当今快速发展的互联网时代,后端开发领域的微服务架构设计和实践变得愈发重要。本文将从微服务架构的概念、优势,以及设计和实施过程中的关键问题等方面展开探讨,带您深入了解后端开发中微服务架构的精髓。
7 0
|
1天前
|
存储 监控 安全
构建高效微服务架构:后端开发的新范式
【5月更文挑战第27天】随着现代软件开发的复杂性日益增加,传统的单体应用架构面临着可扩展性和维护性的瓶颈。本文探讨了采用微服务架构作为解决方案的优势与挑战,并详细阐述了在设计、部署和优化微服务过程中的关键实践和技术考量。通过将大型应用程序拆分成一系列小型、自治的服务,开发团队可以更灵活地应对市场变化,提高系统的可靠性,同时促进技术创新。
|
1天前
|
消息中间件 监控 持续交付
构建高效微服务架构:后端开发的新范式
【5月更文挑战第27天】在现代软件开发领域,随着业务需求的不断复杂化和开发团队规模的增长,传统的单体应用架构逐渐显得笨重且难以维护。微服务架构作为解决这一问题的银弹,其设计理念是拆分大型应用程序为一系列小型、自治的服务单元,每个单元负责一个功能模块并独立运行在其各自的进程中。本文探讨了微服务架构的设计原则、技术选型、以及在实施过程中可能面临的挑战,并提供了一系列解决方案和最佳实践,旨在帮助后端开发人员构建更加灵活、可扩展且高效的系统。
|
1天前
|
消息中间件 持续交付 开发者
构建高效的微服务架构:后端开发的新范式
【5月更文挑战第27天】在现代软件开发中,微服务架构已经成为一种流行的设计模式,它通过将大型应用程序拆分成一组小型、松散耦合的服务来提供灵活性和可扩展性。本文将探讨微服务架构的关键概念、优势以及如何在实际项目中实现这种架构。我们将重点关注后端开发的挑战,包括服务的划分、通信、数据一致性和安全性等方面,并提供实用的解决方案和最佳实践。
|
1天前
|
监控 API 持续交付
构建高效微服务架构:后端开发的新范式
【5月更文挑战第27天】随着现代软件系统的复杂性日益增长,传统的单体应用架构已难以满足快速迭代和灵活部署的需求。微服务架构作为一种新兴的后端开发模式,以其高度模块化和独立部署的特性,为解决这一难题提供了有效的解决方案。本文将深入探讨微服务架构的设计原则、核心技术以及在实现中的最佳实践,旨在为后端开发人员提供构建和维护高效、可靠微服务系统的指导。
|
2天前
|
消息中间件 Prometheus 监控
构建高效微服务架构:后端开发的新趋势
【5月更文挑战第27天】在现代软件开发中,微服务架构已经成为一种广泛采用的设计方案。本文将深入探讨微服务的概念、优势以及如何构建一个高效的微服务系统。我们将重点关注后端开发中的关键要素,如服务的划分、通信机制、数据一致性和容错处理,以提供一个全面的技术指南。

推荐镜像

更多