

Envoy的负载均衡与限流设计
source link: https://blog.51cto.com/key3feng/5982146
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Envoy的负载均衡与限流设计
精选 原创负载均衡是高性能和高并发的基础,通过负载均衡,可以将流量均匀分布到集群的多个节点上,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远程访问全局限流服务判断是否允许访问,如果不允许,则返回失败。
- 1赞
- 收藏
- 评论
- 分享
- 举报
上一篇:浅谈如何召回流失用户
Recommend
-
116
关于负载均衡的一切:总结与思考 正文 古人云,不患寡而患不均。 在计算机的世界,这就...
-
88
请稍候... 文章不存在或已被删除 (如果不想等待, 请点击这里)
-
132
基于Nginx负载均衡方案项目背景公司一直使用商用负载均衡(LB),基于以下几点原因考虑用开源产品来替代:价格昂贵,HTTPS支持并发数太低技术门槛比较高,学习成本大技术Bug修复方面都太慢...
-
80
前言:我们在学习路由交换的时候讲过hsrp热备份路由协议,今天要给大家介绍的是lvs群集,为了实现负载均衡,提高服务器的工作效率,当其中有服务器发生故障的时候也不会影响客户的访问。群集在企业中应用非常广泛,今天我们来学习企业中常用的一种群集技术lvs。一...
-
86
负载均衡集群介绍 实现负载均衡集群的软件有:LVS、keepalived、Nginx、haproxy等。其中LVS属于四层(网络OSI模型);Nginx 属于七层;haproxy既可以认为是四层,也可以当作是七层使用。 keepalived 的负载均衡功能...
-
91
一、群集技术概述 1、群集的类型1)负载均衡群集:主要的功能将来自客户机的访问请求分流给多台服务器,从而缓单台服务器的负载压力,例如京东淘宝的购物节的时候,当天的并发量是分常大的,单台服务器是无法承载的。
-
12
零.从横向扩展说起 从单机扩展到多机,面临的第一个问题就是这些机器如何协同工作,即 如何调度请求 : load bal...
-
8
ASP.NET Core 搭载 Envoy 实现微服务的负载均衡2021-07-0518 22 min.如果说,我们一定要找出一个词来形容这纷繁复杂的世界,我希望它会是熵。有人说,熵增定律是宇宙中最绝望的定律,所谓熵,即是指事物混乱或者无序的程度。在一...
-
2
从单服务器模式到负载均衡设计 作者:Grey 原文地址: ...
-
2
Ocelot的限流、熔断和负载均衡 想要在Ocelot
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK