Envoy 监听器运行时限流:envoy.resource_limits.listener 连接数上限完全解析

发布时间:2026/9/13 23:33:21

Envoy 监听器运行时限流:envoy.resource_limits.listener 连接数上限完全解析 Envoy 监听器运行时限流envoy.resource_limits.listener 连接数上限完全解析【免费下载链接】envoyCloud-native high-performance edge/middle/service proxy项目地址: https://gitcode.com/GitHub_Trending/en/envoy本篇围绕 Envoy 官方文档 监听器运行时配置 展开解析该文档定义的运行时键envoy.resource_limits.listener.name of listener.connection_limit的语义、生效机制与源码实现路径。读完本文你将能够理解如何用 Runtime 层动态调整单个监听器的活跃连接数上限弄清该限制在监听器接收连接路径上的具体检查点从 BasicResourceLimitImpl 与 ListenerImpl 源码中确认默认不限制、运行时动态覆盖的实现细节。一、文档定义的运行时设置docs/root/configuration/listeners/runtime.rst 原文内容非常精简其定义如下The following runtime settings are supported:envoy.resource_limits.listener.name of listener.connection_limitSets a limit on the number of active connections to the specified listener.即 Envoy 支持如下运行时设置envoy.resource_limits.listener.listener_name.connection_limit该设置用于为指定监听器设置活跃连接数上限。其中name of listener需要替换为监听器在 Bootstrap / LDS 配置中声明的name字段值例如监听器名为listener_0则对应的运行时键为envoy.resource_limits.listener.listener_0.connection_limit该键的取值是一个无符号 64 位整数表示允许同时存在accept 之后、关闭之前的连接数量。当当前活跃连接数达到该上限时监听器将拒绝新连接。这一能力让运维人员可以在不重启 Envoy、不重新下发监听器配置的情况下对某个监听器的连接压力进行在线限流或快速放开是过载控制overload shedding场景中的常用手段。二、运行时键的构造与默认值在 source/common/listener_manager/listener_impl.cc 中ListenerImpl构造函数会按监听器名称拼接出运行时键并据此创建连接数资源限制器cx_limit_runtime_key_(envoy.resource_limits.listener. config.name() .connection_limit), open_connections_(std::make_sharedBasicResourceLimitImpl( std::numeric_limitsuint64_t::max(), listener_factory_context_-serverFactoryContext().runtime(), cx_limit_runtime_key_)),这段代码确认了两个事实键名格式与文档完全一致envoy.resource_limits.listener. config.name() .connection_limit监听器名称直接取自 listener 配置的name字段静态默认上限为std::numeric_limitsuint64_t::max()即默认情况下监听器连接数几乎不受限。三、实现原理BasicResourceLimitImpl 的动态上限限制器的核心实现在 source/common/common/basic_resource_impl.h。该类继承ResourceLimit接口关键字段与行为如下current_std::atomicuint64_t原子计数器记录当前活跃连接数max_静态上限构造时传入对监听器而言为uint64_t::max()runtime_key_可选的运行时键用于动态读取上限。最关键的max()方法体现了运行时覆盖机制uint64_t max() override { return (runtime_ ! nullptr runtime_key_.has_value()) ? runtime_-snapshot().getInteger(runtime_key_.value(), max_) : max_; }也就是说每次判断上限时都会从 Runtime 快照中读取envoy.resource_limits.listener.name.connection_limit的值如果运行时未配置该键则回退到静态默认值max_监听器场景下为无上限。判断连接是否可新建的逻辑同样简洁bool canCreate() override { return current_.load() max(); }由于max()每次都会实时查询 Runtime 快照因此通过 Runtime 接口例如管理端口/runtime的更新或envoy set类操作修改该键后无需重启即可改变监听器的连接上限——这正是文档所述 runtime settings 的含义。类注释中还特意说明该实现以原子操作为主极端情况下资源计数可能瞬时超出上限但不会影响整体行为属于可接受的工程取舍。四、限制在连接接收路径上的检查点那么达到上限后新连接会在哪里被拒绝查看 source/common/listener_manager/active_tcp_listener.h可以确认连接计数与检查发生在监听器的 accept 路径上// 判定该监听器是否已不可再接纳连接 bool readyToAccept... { return !config_-openConnections().canCreate(); } // 连接关闭时计数回退 ... { config_-openConnections().dec(); } // 新连接 accept 后计数递增 void postIncNumConnections() override { config_-openConnections().inc(); }对应的资源访问器定义在 source/common/listener_manager/listener_impl.hResourceLimit openConnections() override { return *open_connections_; }整体工作流程为监听器 accept 新连接前通过openConnections().canCreate()判断当前计数是否已达max()若已达上限监听器判定为过载停止/拒绝接收新连接若未达上限连接建立后调用postIncNumConnections()使计数 1连接断开时调用dec()使计数 -1。此外对于内部监听器internal listener路径source/extensions/bootstrap/internal_listener/active_internal_listener.h 同样通过config_-openConnections().inc()/dec()维护同一计数器说明该限制对常规外部监听器与内部监听器的连接生命周期都成立。五、与监听器生命周期、过载管理的关联理解该运行时键的作用域还需要注意几个实现细节上限是 per-listener 的每个ListenerImpl拥有独立的open_connections_计数器source/common/listener_manager/listener_impl.h 中cx_limit_runtime_key_与open_connections_均为成员因此对某个监听器调低上限不会影响其他监听器连接数更新时会继承计数器在 source/common/listener_manager/listener_impl.cc 中open_connections_ origin.open_connections_;表明监听器配置更新如 LDS 更新触发重建时新旧监听器共享同一个连接计数对象保证限流计数在配置变更过程中不丢失与bypass_overload_manager/ignore_global_conn_limit的关系source/common/listener_manager/listener_impl.cc 显示监听器配置另有ignore_global_conn_limit()与bypass_overload_manager()两个选项说明本运行时键单监听器级连接上限与 Envoy 的全局连接数限制、过载管理器属于不同层级的控制手段可组合使用。六、实际使用建议结合文档与源码可以给出以下实操结论键名必须精确匹配监听器namename of listener是监听器配置中的名称字符串含下划线、点等特殊字符时按原样写入键名即可无需转义不设置即不限制由max()的回退逻辑可知未通过 Runtime 配置该键时上限为uint64_t::max()行为与无限制等价动态生效通过 Envoy 的 Runtime 机制修改该整数后canCreate()在下一次判断时即采用新上限可用于流量突增时临时收紧、事后放宽而无需重启进程或推送新的监听器配置达到上限的后果新连接在 accept 阶段被拒绝表现为客户端连接被拒/超时已建立的连接不受影响继续正常处理直到断开并释放计数。七、小结监听器运行时文档 虽只定义了一个键但它背后对应着 Envoy 一条完整的资源限流链路ListenerImpl按名拼接运行时键listener_impl.cc→BasicResourceLimitImpl从 Runtime 快照动态读取上限并原子维护计数basic_resource_impl.h→ 监听器 accept 路径通过canCreate()/inc()/dec()执行准入控制active_tcp_listener.h。掌握这条链路你就能在生产中安全地利用envoy.resource_limits.listener.name.connection_limit对任意监听器做在线连接数限流。【免费下载链接】envoyCloud-native high-performance edge/middle/service proxy项目地址: https://gitcode.com/GitHub_Trending/en/envoy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/13 23:33:21

嵌入式低功耗设计:收益、风险与平衡实践指南

低功耗设计这几年在嵌入式和物联网圈子里的地位变化很明显。早年间大家把低功耗当成一个加分项,能用就行;现在凡是带电池的产品,尤其是做可穿戴设备、传感器节点、智能门锁、环境监测这一类项目,低功耗已经不是可选项,…

2026/9/13 23:28:21

2篇4章6节:单纯病例研究和病例交叉研究

在临床流行病学研究中,传统队列、病例对照研究在慢性疾病病因探索中应用广泛,但面对心肌梗死、恶性心律失常这类由短暂暴露触发、起病急骤的急性突发事件时,会遭遇难以捕捉瞬时暴露、个体混杂难以消除的困境。为解决这一科研痛点,研究者发展出单纯病例研究、病例交叉研究两…

2026/9/14 0:13:24

Keil MDK中文帮助文档离线配置全指南

简介:本资源为Keil MDK嵌入式开发环境的官方中文帮助文档合集,面向51/ARM架构初学者、嵌入式工程师及高校教学实践者,解决开发环境配置、项目构建、编译链接、调试排错等核心实操难题。压缩包共34个文件,主体为29个CHM格式离线帮助…

2026/9/13 0:01:16

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/14 0:03:22

KCF目标跟踪算法与OTB工程实现:毕业设计实战解析

简介:这是一份基于KCF核相关滤波算法、融合尺度池与抗遮挡处理的目标检测跟踪MATLAB完整源码,主要面向计算机相关专业准备毕业设计、课程设计或期末大作业的学生,也适合需要项目实战练习的初学者。源码在OTB数据集上完成验证,能够…

2026/9/14 0:03:22

语音情感识别实战:Keras实现LSTM、CNN、SVM与MLP多模型对比

简介:面向语音情感识别入门与进阶开发者,这份基于Keras的项目源码完整实现了LSTM、CNN、SVM、MLP四种模型,兼容Python3.8与Keras/TensorFlow2环境。压缩包内含49个文件,大小约70.31MB,主体包括Python脚本、yaml/json配…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/13 11:18:28

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码