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

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 带你读《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)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
6天前
|
开发框架 Dubbo 应用服务中间件
微服务开发框架-----Apache Dubbo
这篇文章介绍了Apache Dubbo微服务开发框架,它提供RPC通信和微服务治理能力,支持服务发现、负载均衡和流量治理等功能,并强调了Dubbo在微服务规模化实践和企业级治理方面的优势。
微服务开发框架-----Apache Dubbo
|
7天前
|
负载均衡 Dubbo Java
Dubbo服务Spi机制和原理
该文章主要介绍了Dubbo中的SPI(Service Provider Interface)机制和原理,包括SPI的基本概念、Dubbo中的SPI分类以及SPI机制的实现细节。
Dubbo服务Spi机制和原理
|
5天前
|
开发框架 Dubbo 应用服务中间件
微服务开发框架-----Apache Dubbo
这篇文章介绍了Apache Dubbo微服务开发框架,它提供RPC通信和微服务治理能力,支持服务发现、负载均衡和流量治理等功能,并强调了Dubbo在微服务规模化实践和企业级治理方面的优势。
|
1月前
|
负载均衡 Kubernetes 算法
K8s服务发现与负载均衡的技术探索
【7月更文挑战第15天】K8s通过Service资源对象和kube-proxy组件实现了高效、灵活的服务发现和负载均衡机制。通过合理选择Service类型、优化kube-proxy配置以及使用Ingress进行高级路由,可以确保应用在K8s集群中高效、可靠地运行。随着云原生技术的不断发展,K8s的服务发现和负载均衡机制也将不断完善和优化,为更多场景提供强大的支持。
|
1月前
|
负载均衡 监控 Kubernetes
Service Mesh 是一种用于处理服务间通信的基础设施层,它通常与微服务架构一起使用,以提供诸如服务发现、负载均衡、熔断、监控、追踪和安全性等功能。
Service Mesh 是一种用于处理服务间通信的基础设施层,它通常与微服务架构一起使用,以提供诸如服务发现、负载均衡、熔断、监控、追踪和安全性等功能。
|
1月前
|
缓存 负载均衡 算法
微服务之客户端负载均衡
微服务中的客户端负载均衡是指将负载(即工作任务或访问请求)在客户端进行分配,以决定由哪个服务实例来处理这些请求。这种负载均衡方式与服务端负载均衡相对,后者是在服务端(如服务器或负载均衡器)进行请求的分发。
42 5
|
3月前
|
负载均衡 网络协议 算法
【Docker 专栏】Docker 容器内服务发现与负载均衡
【5月更文挑战第8天】本文探讨了Docker容器中的服务发现与负载均衡。服务发现通过环境变量、DNS或集中式系统(如Consul、Zookeeper)来定位服务实例。负载均衡则采用轮询、随机等算法,可通过软件负载均衡器、云服务或容器编排工具(如Kubernetes)实现。服务发现与负载均衡结合使用,确保请求有效分发和系统稳定性。面对动态性、网络延迟及大规模部署的挑战,需采取相应措施优化。选择合适技术并持续优化,能提升Docker容器应用的性能和可靠性。
140 5
【Docker 专栏】Docker 容器内服务发现与负载均衡
|
3月前
|
缓存 负载均衡 监控
探索分布式系统演进之路:从负载均衡到微服务架构
小米分享了分布式系统的发展,从早期的负载均衡(入口级、网关和客户端)到微服务架构的演进。微服务实现服务解耦,增强系统弹性,但带来了新的挑战。为优化数据库性能,实施了主备读写分离、全文搜索引擎、缓存集群等措施。通过微服务治理,如服务注册、动态配置、灰度发布等,提升了系统稳定性和可靠性。未来将继续优化分布式系统,提供更好的服务体验。关注公众号“软件求生”了解更多。
65 6
|
3月前
|
负载均衡 算法 应用服务中间件
【微服务系列笔记】负载均衡
本文介绍了负载均衡的概念和重要性,指出随着流量增长,通过垂直扩展和水平扩展来提升系统性能,其中水平扩展引入了负载均衡的需求。负载均衡的目标是将流量分布到多台服务器以提高响应速度和可用性,常见的硬件和软件负载均衡器包括F5、A10、Nginx、HAProxy和LVS等。 文章接着提到了Ribbon,这是一个客户端实现的负载均衡器,用于Spring Cloud中。Ribbon在发起REST请求时进行拦截,根据预设的负载均衡算法(如随机算法)选择服务器,并重构请求URI。文中还介绍了如何通过代码和配置文件两种方式自定义Ribbon的负载均衡策略。
147 3
|
3月前
|
负载均衡 应用服务中间件 nginx
服务器架构、分布式系统、负载均衡、微服务、高可用性
**分布式系统取代单体架构,以微服务实现高扩展性和灵活性。通过负载均衡技术增强性能,防止单点故障,结合冗余备份与故障切换保障高可用性,这种架构是支撑大规模在线业务的关键。**
101 3

推荐镜像

更多