带你读《Apache Dubbo微服务开发从入门到精通》——三、 负载均衡机制(5)

本文涉及的产品
云原生网关 MSE Higress,422元/月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 带你读《Apache Dubbo微服务开发从入门到精通》——三、 负载均衡机制(5)

《Apache Dubbo微服务开发从入门到精通》——服务发现与负载均衡——三、 负载均衡机制(4) https://developer.aliyun.com/article/1224430


11) 原理介绍

 

HeuristicSmoothingFlowControl

 

相关指标

 

alpha

alpha为可接受的延时的上升幅度,默认为0.3

 

minLatency

在一个时间窗口内的最小的Latency值。

 

noLoadLatency

noLoadLatency是单纯处理任务的延时,不包括排队时间。这是服务端机器的固有属性,但是并不是一成不变的。在HeuristicSmoothingFlowControl算法中,我们根据机器CPU的使用率来确定机器当前的noLoadLatency。当机器的CPU使用率较低时,我们认为minLatency便是noLoadLatency。当CPU使用率适中时,我们平滑的用minLatency来更新noLoadLatency的值。当CPU使用率较高时,noLoadLatency的值不再改变。

 

maxQPS

一个时间窗口周期内的QPS的最大值。

 

avgLatency

一个时间窗口周期内的Latency的平均值,单位为毫秒。

 

maxConcurrency

计算得到的当前服务提供端的最大并发值。

 

image.png

 

算法实现

 

当服务端收到一个请求时,首先判断CPU的使用率是否超过50%。如果没有超过50%,则接受这个请求进行处理。如果超过50%,说明当前的负载较高,便从HeuristicSmoothingFlowControl算法中获得当前的maxConcurrency值。如果当前正在处理的请求数量超过了maxConcurrency,则拒绝该请求。

 

AutoConcurrencyLimier

 

相关指标

 

MaxExploreRatio

默认设置为0.3

 

MinExploreRatio

默认设置为0.06

 

SampleWindowSizeMs

采样窗口的时长。默认为1000毫秒。

 

MinSampleCount

采样窗口的最小请求数量。默认为40。

 

MaxSampleCount

采样窗口的最大请求数量。默认为500。

 

emaFactor

平滑处理参数。默认为0.1。

 

exploreRatio

探索率。初始设置为MaxExploreRatio。

 

若avgLatency<=noLoadLatency*(1.0+MinExploreRatio)或者qps>=maxQPS*(1.0 + MinExploreRatio)

 

则exploreRatio=min(MaxExploreRatio,exploreRatio+0.02)

否则exploreRatio=max(MinExploreRatio,exploreRatio-0.02)

 

maxQPS

窗口周期内QPS的最大值。

 

image.png

 

noLoadLatency

 

image.png

 

halfSampleIntervalMs

半采样区间。默认为25000毫秒。

 

resetLatencyUs

下一次重置所有值的时间戳,这里的重置包括窗口内值和noLoadLatency。单位是微秒。初始为0

 

image.png

 

remeasureStartUs

下一次重置窗口的开始时间。

 

image.png

 

startSampleTimeUs

开始采样的时间。单位为微秒。

 

sampleCount

当前采样窗口内请求的数量。

 

totalSampleUs

采样窗口内所有请求的latency的和。单位为微秒。

 

totalReqCount

采样窗口时间内所有请求的数量和。注意区别sampleCount。

 

samplingTimeUs

采样当前请求的时间戳。单位为微秒。

 

latency

当前请求的latency。

 

qps

在该时间窗口内的qps值。

 

image.png

 

avgLatency

窗口内的平均latency。

 

image.png

 

maxConcurrency

上一个窗口计算得到当前周期的最大并发值。

 

nextMaxConcurrency

当前窗口计算出的下一个周期的最大并发值。

 

image.png

 

Little's Law

 

当服务处于稳定状态时:concurrency=latency*qps。这是自适应限流理论的基础。

当请求没有导致机器超载时,latency基本稳定,qps和concurrency处于线性关系。

 

当短时间内请求数量过多,导致服务超载的时候,concurrency会和latency一起上升,qps则会趋于稳定。

 

算法实现

 

AutoConcurrencyLimier的算法使用过程和HeuristicSmoothingFlowControl类似。

 

实现与HeuristicSmoothingFlowControl的最大区别是AutoConcurrencyLimier是基于窗口的。每当窗口内积累了一定量的采样数据时,才利用窗口内的数据来更新得到maxConcurrency。

 

其次,利用exploreRatio来对剩余的容量进行探索。

 

另外,每隔一段时间都会自动缩小max_concurrency并持续一段时间,以处理noLoadLatency上涨的情况。因为估计noLoadLatency时必须先让服务处于低负载的状态,因此对maxConcurrency的缩小是难以避免的。

 

由于max_concurrency

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
1月前
|
监控 Java 持续交付
后端开发中的微服务架构实践与挑战####
在当今快速迭代的软件开发领域,微服务架构以其灵活性和可扩展性成为众多企业的首选。本文探讨了微服务架构的核心概念、实施策略及面临的主要挑战,旨在为后端开发者提供一个全面的指南。通过分析真实案例,揭示微服务在提升系统敏捷性的同时,如何有效应对分布式系统的复杂性问题。 ####
|
1月前
|
消息中间件 API 持续交付
后端开发中的微服务架构实践####
【10月更文挑战第21天】 本文深入探讨了微服务架构在后端开发中的应用,从基本概念出发,详细阐述了微服务的核心优势、设计原则及关键技术。通过实际案例分析,揭示了微服务如何助力企业应对复杂业务需求,提升系统的可扩展性、灵活性与可靠性。同时,也指出了实施微服务过程中可能面临的挑战,并提供了相应的解决方案和最佳实践。 ####
31 3
|
1月前
|
API 持续交付 开发者
后端开发中的微服务架构实践与挑战
在数字化时代,后端服务的构建和管理变得日益复杂。本文将深入探讨微服务架构在后端开发中的应用,分析其在提高系统可扩展性、灵活性和可维护性方面的优势,同时讨论实施微服务时面临的挑战,如服务拆分、数据一致性和部署复杂性等。通过实际案例分析,本文旨在为开发者提供微服务架构的实用见解和解决策略。
|
1月前
|
消息中间件 监控 持续交付
后端开发中的微服务架构设计与实践####
在当今快速发展的软件开发领域,微服务架构已成为构建高效、可扩展和易于维护应用的关键策略。本文将深入探讨微服务架构的核心概念、设计原则与实战技巧,通过实例解析如何在后端开发中有效实施微服务,以应对复杂业务需求和技术挑战。我们将从微服务的拆分策略、通信机制、数据管理到持续集成/持续部署(CI/CD)流程,全面剖析其背后的技术细节与最佳实践,为读者提供一份详尽的微服务架构设计与实践指南。 ####
|
1月前
|
Dubbo 安全 应用服务中间件
Apache Dubbo 正式发布 HTTP/3 版本 RPC 协议,弱网效率提升 6 倍
在 Apache Dubbo 3.3.0 版本之后,官方推出了全新升级的 Triple X 协议,全面支持 HTTP/1、HTTP/2 和 HTTP/3 协议。本文将围绕 Triple 协议对 HTTP/3 的支持进行详细阐述,包括其设计目标、实际应用案例、性能测试结果以及源码架构分析等内容。
|
23天前
|
运维 监控 Java
后端开发中的微服务架构实践与挑战####
在数字化转型加速的今天,微服务架构凭借其高度的灵活性、可扩展性和可维护性,成为众多企业后端系统构建的首选方案。本文深入探讨了微服务架构的核心概念、实施步骤、关键技术考量以及面临的主要挑战,旨在为开发者提供一份实用的实践指南。通过案例分析,揭示微服务在实际项目中的应用效果,并针对常见问题提出解决策略,帮助读者更好地理解和应对微服务架构带来的复杂性与机遇。 ####
|
21天前
|
消息中间件 运维 安全
后端开发中的微服务架构实践与挑战####
在数字化转型的浪潮中,微服务架构凭借其高度的灵活性和可扩展性,成为众多企业重构后端系统的首选方案。本文将深入探讨微服务的核心概念、设计原则、关键技术选型及在实际项目实施过程中面临的挑战与解决方案,旨在为开发者提供一套实用的微服务架构落地指南。我们将从理论框架出发,逐步深入至技术细节,最终通过案例分析,揭示如何在复杂业务场景下有效应用微服务,提升系统的整体性能与稳定性。 ####
33 1
|
23天前
|
消息中间件 运维 API
后端开发中的微服务架构实践####
本文深入探讨了微服务架构在后端开发中的应用,从其定义、优势到实际案例分析,全面解析了如何有效实施微服务以提升系统的可维护性、扩展性和灵活性。不同于传统摘要的概述性质,本摘要旨在激发读者对微服务架构深度探索的兴趣,通过提出问题而非直接给出答案的方式,引导读者深入
42 1
|
24天前
|
负载均衡 监控 API
后端开发中的微服务架构实践与挑战
本文深入探讨了微服务架构在后端开发中的应用,分析了其优势和面临的挑战,并通过案例分析提出了相应的解决策略。微服务架构以其高度的可扩展性和灵活性,成为现代软件开发的重要趋势。然而,它同时也带来了服务间通信、数据一致性等问题。通过实际案例的剖析,本文旨在为开发者提供有效的微服务实施指导,以优化系统性能和用户体验。
|
29天前
|
消息中间件 运维 开发者
后端开发中的微服务架构实践与挑战####
本文深入探讨了微服务架构在后端开发中的应用,从其核心概念、设计原则到实际部署过程中面临的挑战进行了全面剖析。不同于传统的单体应用,微服务通过将复杂系统拆解为一系列小型、独立的服务,提高了系统的灵活性和可维护性。然而,这种架构的转变也伴随着服务间通信、数据一致性、部署复杂性等新问题。本文旨在为开发者提供一套应对这些挑战的策略,同时分享一些成功案例,以期促进微服务架构的有效实施。 ####

推荐镜像

更多