Envoy 负载均衡与限流设计

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 【2月更文挑战第29天】Envoy负载均衡策略包括优先级、恐慌阈值、区域感知和资源限制。它按优先级分配流量,使用恐慌阈值避免健康节点过载,实现区域内的首选服务选择,并通过资源管理限制上游集群的连接和请求数。此外,Envoy提供全局限流功能,在网络和HTTP层面对通信进行控制,确保服务器稳定性。

负载均衡是高性能和高并发的基础,通过负载均衡,可以将流量均匀分布到集群的多个节点上,Envoy负载均衡的设计和实现如下。

1.优先级

Envoy集群管理也是以优先级为基础进行组织的,单个集群按照优先级划分为不同的节点集合,集群成员信息变化时也会按照优先级进行重新组织和整理。


负载均衡选取时,Envoy默认只在最高优先级的候选集中进行选取,出于高可用的考虑,一般都会指定比最高优先级小的可用优先级为备选,这样当最高优先级的候选集中的服务节点均不可用时,可以通过故障转移机制将流量转移到备选优先级对应的候选集中。

2.恐慌阈值

负载均衡选取过程中,Envoy默认优先选择健康的节点,但由于故障等,一个集群的健康节点比例过低时,按照健康节点的选取策略,集群的全部流量会全部涌向为数不多的健康节点上,容易引发健康节点因为流量过大而雪崩的现象,导致整个集群全部不可用。


为了解决这个问题,Envoy引入了恐慌阈值的概念,默认的恐慌阈值是50%,当健康节点占所有节点的比例下降到恐慌阈值时,选取节点时不再局限于健康节点范围内,而是在所有节点范围内选取。

3.区域感知负载均衡

区域感知负载均衡,顾名思义,负载均衡时优先选取和当前区域相同的服务节点,区域感知特性是Envoy中所有负载均衡算法的基石。


hostSourceToUse是区域感知路由的核心实现,首先基于优先级选取初始候选集,默认采用选取健康节点的策略,如果触发恐慌阈值,则退化到选取当前所有节点;然后判断当前是否满足区域感知负载均衡的条件,如果不满足,则直接返回,否则通过区域感知路由算法获取合适的节点列表。综合来看,目标候选节点集合的选取条件包括优先级、区域和是否需要健康节点这几个核心因素。

4.资源限制机制

任何系统的资源都是有一定限度的,如果使用超过一定限度,就会出现各种各样的问题,影响系统的整体可用性,因此为了保障系统的可用性,需要有相应的资源管理机制,保障关键资源的合理使用。

Envoy针对Upstream集群的一些关键资源,比如Upstream集群最大连接数、最大请求数等,通过resource manager进行管理。


resource manager进行资源管理的方式很简单,在资源创建时指定资源的配额限制,同时提供相应的资源更新和配额检查接口。当使用和归还资源时更新相应的资源计数;通过资源配额检查接口判断资源当前是否还有富余。


为了实现资源管理的灵活性,resource manager针对每个资源设置一个开关变量key,从而通过开关特性机制动态修改资源的当前值。

另外,针对每个资源设置一个stats项,当资源超过限额时设置stats状态为超出配额,这样外界通过HTTP管理接口实时查看Envoy运行状态时,也可以查看当前所有的资源状态,比如是否超出资源配额等。

5.全局限流机制

尽管Envoy提供了完善的资源限制机制,可以很大程度上保证顺利访问Upstream的资源和应对压力情况,但对于有大量客户端的服务端程序来说,从任何一个客户端都很难确切地了解服务端程序的真实压力情况,并进行准确的资源限制,因此需要有一个从服务端角度出发的全局视角,对客户端/服务器之间的通信和链路情况进行限制与管控,全局限流就是解决这个问题的一个很好的机制。

Envoy当前支持网络层面和HTTP层面两种限流方式。网络层面的限流可以针对需要限流的连接设置网络限流过滤器,这样当新连接创建时,Envoy会通过gRPC远程访问全局限流服务判断是否允许访问,如果不允许,限流插件会在新数据到来时直接返回出错提示。HTTP层面的限流是针对请求级别的,每个HTTP请求会有相应的路由,路由访问前,通过gRPC远程访问全局限流服务判断是否允许访问,如果不允许,则返回失败。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
编解码 运维 负载均衡
envoy代理转发与L5 Cluster 负载均衡
envoy代理转发与L5 Cluster 负载均衡
190 0
envoy代理转发与L5 Cluster 负载均衡
|
负载均衡 算法 Dubbo
提升集群吞吐量与稳定性的秘诀: Dubbo 自适应负载均衡与限流策略实现解析
提升集群吞吐量与稳定性的秘诀: Dubbo 自适应负载均衡与限流策略实现解析
518 12
提升集群吞吐量与稳定性的秘诀: Dubbo 自适应负载均衡与限流策略实现解析
|
负载均衡 算法 关系型数据库
【服务网格架构】Envoy架构概览(5):负载均衡
【服务网格架构】Envoy架构概览(5):负载均衡
|
负载均衡 算法 关系型数据库
Envoy架构概览(5):负载均衡
Envoy架构概览(5):负载均衡
|
缓存 负载均衡 算法
Nginx应用:配置文件详解、反向代理、负载均衡,做限流、缓存、黑白名单
Nginx应用:配置文件详解、反向代理、负载均衡,做限流、缓存、黑白名单
498 0
Nginx应用:配置文件详解、反向代理、负载均衡,做限流、缓存、黑白名单
|
存储 缓存 负载均衡
【Nginx】实现负载均衡、限流、缓存、黑白名单和灰度发布,这是最全的一篇了!
在《【高并发】面试官问我如何使用Nginx实现限流,我如此回答轻松拿到了Offer!》一文中,我们主要介绍了如何使用Nginx进行限流,以避免系统被大流量压垮。除此之外,Nginx还有很多强大的功能,例如:负载均衡、缓存、黑白名单、灰度发布等。今天,我们就来一起探讨Nginx支持的这些强大的功能!
625 0
|
存储 缓存 负载均衡
Nginx 如何工作 负载均衡策略有哪些 如何限流
Nginx 如何工作 负载均衡策略有哪些 如何限流
244 0
|
2月前
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
159 3
|
8月前
|
缓存 负载均衡 算法
解读 Nginx:构建高效反向代理和负载均衡的秘密
解读 Nginx:构建高效反向代理和负载均衡的秘密
161 2
|
7月前
|
负载均衡 算法 应用服务中间件
nginx自定义负载均衡及根据cpu运行自定义负载均衡
nginx自定义负载均衡及根据cpu运行自定义负载均衡
147 1

热门文章

最新文章