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

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

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


7) 自适应限流

 

与负载均衡运行在consumer端不同的是,限流功能运行在provider端。其作用是限制provider端处理并发任务时的最大数量。从理论上讲,服务端机器的处理能力是存在上限的,对于一台服务端机器,当短时间内出现大量的请求调用时,会导致处理不及时的请求积压,使机器过载。在这种情况下可能导致两个问题:

 

由于请求积压,最终所有的请求都必须等待较长时间才能被处理,从而使整个服务瘫痪。

 

服务端机器长时间的过载可能有宕机的风险。因此,在可能存在过载风险时,拒绝掉一部分请求反而是更好的选择。在之前的dubbo版本中,限流是通过在provider端设置静态的最大并发值实现的。但是在服务数量多,拓扑复杂且处理能力会动态变化的局面下,该值难以通过计算静态设置。

 

基于以上原因,我们需要一种自适应的算法,其可以动态调整服务端机器的最大并发值,使其可以在保证机器不过载的前提下,尽可能多的处理接收到的请求。因此,我们参考brpc等其他框架的基础上,在dubbo的框架内实现了两种自适应限流算法,分别是基于启发式平滑的“HeuristicSmoothingFlowControl”和基于窗口的“AutoConcurrencyLimier”。

 

代码的github地址

 

8) 效果介绍

 

自适应限流部分的有效性实验我们在提供端机器配置尽可能大的情况下进行,并且为了凸显效果,在实验中我们将单次请求的复杂度提高,将超时时间尽可能设置的大,并且开启消费端的重试功能。

 

image.png

 

9) 使用方法

 

要确保服务端存在多个节点,并且消费端开启重试策略的前提下,限流功能才能更好的发挥作用。

 

设置方法与静态的最大并发值设置类似,只需在provider端将“flowcontrol”设置为“autoConcurrencyLimier”或者“heuristicSmoothingFlowControl”即可。

 

10) 代码结构

 

FlowControlFilter:在provider端的filter负责根据限流算法的结果来对provider端进行限流功能。

 

FlowControl:根据dubbo的spi实现的限流算法的接口。限流的具体实现算法需要继承自该接口并可以通过dubbo的spi方式使用。

 

CpuUsage:周期性获取cpu的相关指标

 

HardwareMetricsCollector:获取硬件指标的相关方法

 

ServerMetricsCollector:基于滑动窗口的获取限流需要的指标的相关方法。比如qps等。

 

AutoConcurrencyLimier:自适应限流的具体实现算法。

 

HeuristicSmoothingFlowControl:自适应限流的具体实现方法。



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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
514 3
|
Cloud Native Java Nacos
微服务时代的新宠儿!Spring Cloud Nacos实战指南,带你玩转服务发现与配置管理,拥抱云原生潮流!
【8月更文挑战第29天】Spring Cloud Nacos作为微服务架构中的新兴之星,凭借其轻量、高效的特点,迅速成为服务发现、配置管理和治理的首选方案。Nacos(命名和配置服务)由阿里巴巴开源,为云原生应用提供了动态服务发现及配置管理等功能,简化了服务间的调用与依赖管理。本文将指导你通过五个步骤在Spring Boot项目中集成Nacos,实现服务注册、发现及配置动态管理,从而轻松搭建出高效的微服务环境。
742 0
|
负载均衡 监控 Dubbo
Dubbo 原理和机制详解(非常全面)
本文详细解析了 Dubbo 的核心功能、组件、架构设计及调用流程,涵盖远程方法调用、智能容错、负载均衡、服务注册与发现等内容。欢迎留言交流。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Dubbo 原理和机制详解(非常全面)
|
负载均衡 Java 持续交付
深入解析微服务架构中的服务发现与负载均衡
深入解析微服务架构中的服务发现与负载均衡
732 7
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
453 3
|
存储 缓存 负载均衡
微服务架构中的服务发现与注册中心实践
【7月更文挑战第26天】在微服务的海洋里,每个服务都是一座孤岛。要让这些孤岛彼此发现、相互通讯,就需要一个高效的信使系统——服务发现与注册中心。本文将深入探讨如何搭建和维护这一核心组件,确保微服务间的顺畅交流。
|
负载均衡 网络协议 调度
Docker Swarm服务发现与负载均衡
【10月更文挑战第8天】
753 1
|
负载均衡 应用服务中间件 Apache
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
277 3
|
设计模式 存储 运维
微服务架构中的服务发现与注册中心设计模式
在现代软件工程实践中,微服务架构已成为构建灵活、可扩展系统的首选方案。本文将深入探讨微服务架构中至关重要的服务发现与注册中心设计模式。我们将从服务发现的基本原理出发,逐步解析注册中心的工作机制,并以Eureka和Consul为例,对比分析不同实现的优劣。文章旨在为开发者提供一套清晰的指导原则,帮助他们在构建和维护微服务系统时做出更明智的技术选择。
|
存储 负载均衡 数据库
探索微服务架构中的服务发现机制
【7月更文挑战第24天】在微服务架构的复杂网络中,服务发现是确保通信流畅与系统弹性的关键组件。本文将深入探讨服务发现的工作原理、面临的挑战以及解决方案,同时比较不同服务发现工具的性能特点,旨在为开发者提供实现高效服务发现的实战指南。

推荐镜像

更多