Envoy HTTP 过滤器处理技术文档
1. 概述
Envoy 的 HTTP 过滤器处理是其核心功能之一,通过过滤器链机制实现对 HTTP 请求和响应的灵活处理。过滤器链由解码过滤器(处理请求)和编码过滤器(处理响应)组成,允许开发者在不修改核心代码的情况下扩展 Envoy 的功能。该架构为构建现代 API 网关和服务网格提供了强大的可扩展性基础。
过滤器链架构支持请求解码和响应编码的完整流程,通过过滤器状态管理和延续机制实现高效的处理。
关键优势
-
高可扩展性:插件化架构,易于添加新功能
-
灵活的过滤器链:请求和响应阶段独立处理
-
高效的缓冲管理:支持流式处理和多种缓冲策略
-
完整的状态跟踪:详细的请求和响应状态信息
-
丰富的内置过滤器:满足常见使用场景
适用场景
-
API 网关实现
-
服务网格数据平面
-
微服务架构中的边车代理
-
负载均衡和流量管理
-
安全和认证控制
-
协议转换和适配
Envoy 的过滤器处理架构是其作为现代 API 网关和服务网格代理的核心特性之一,为构建复杂的服务网络提供了强大的基础。通过合理使用和扩展过滤器,可以实现丰富的流量管理、安全控制和可观测性功能。
2. 过滤器管理架构
2.1 FilterManager 类
class FilterManager : public ScopeTrackedObject,public FilterChainManager,Logger::Loggable<Logger::Id::http>
核心职责:
-
管理整个过滤器链的生命周期
-
负责请求解码和响应编码的过滤器迭代
-
处理过滤器链的创建和销毁
-
管理缓冲区和状态跟踪
-
协调过滤器间的数据传递和流程控制
2.2 过滤器链架构

处理阶段说明:
-
请求解码阶段:处理客户端发来的 HTTP 请求,包括头部、数据和尾部
-
响应编码阶段:处理向上游服务发送的 HTTP 响应
-
访问日志阶段:记录请求和响应的详细信息
3. 活动流过滤器基础
3.1 ActiveStreamFilterBase 结构体
struct ActiveStreamFilterBase : public virtual StreamFilterCallbacks,Logger::Loggable<Logger::Id::http>
核心功能:
-
为流解码器和编码器过滤器提供基础包装
-
负责状态更新和数据存储
-
处理过滤器迭代和延续逻辑
-
管理匹配和匹配数据更新
-
提供缓冲区管理接口
迭代状态管理:
enum classIterationState{Continue, // 迭代未停止StopSingleIteration, // 停止单次迭代StopAllBuffer, // 停止所有迭代并缓冲数据StopAllWatermark, // 停止所有迭代并缓冲到高水位};
3.2 活动解码器过滤器
struct ActiveStreamDecoderFilter : public ActiveStreamFilterBase,public StreamDecoderFilterCallbacks,LinkedObject<ActiveStreamDecoderFilter>
功能:
-
包装解码过滤器,处理请求解码
-
提供解码过滤器回调接口
-
管理解码过程中的缓冲和状态
-
支持请求数据的流式处理
3.3 活动编码器过滤器
struct ActiveStreamEncoderFilter : public ActiveStreamFilterBase,public StreamEncoderFilterCallbacks,LinkedObject<ActiveStreamEncoderFilter>
功能:
-
包装编码过滤器,处理响应编码
-
提供编码过滤器回调接口
-
管理编码过程中的缓冲和状态
-
支持响应数据的流式处理
4. 过滤器链创建
4.1 创建流程
boolFilterManager::createFilterChain(){if (state_.created_filter_chain_) {return false;}// 检查是否有升级请求if (upgrade != nullptr) {const Router::RouteEntry::UpgradeMap* upgrade_map =filter_manager_callbacks_.upgradeMap();if (filter_chain_factory_.createUpgradeFilterChain(upgrade->value().getStringView(), upgrade_map, *this)) {filter_manager_callbacks_.upgradeFilterChainCreated();return true;}}// 创建默认过滤器链filter_chain_factory_.createFilterChain(*this);return true;}
创建时机:
-
收到第一个请求头部时
-
检测到协议升级请求时
-
过滤器链尚未创建时
4.2 过滤器工厂回调
class FilterChainFactoryCallbacksImpl : public Http::FilterChainFactoryCallbacks {public:voidaddStreamDecoderFilter(Http::StreamDecoderFilterSharedPtr filter)override;voidaddStreamEncoderFilter(Http::StreamEncoderFilterSharedPtr filter)override;voidaddStreamFilter(Http::StreamFilterSharedPtr filter)override;voidaddAccessLogHandler(AccessLog::InstanceSharedPtr handler)override;Event::Dispatcher& dispatcher()override;};
回调类型:
-
解码过滤器:仅处理请求阶段
-
编码过滤器:仅处理响应阶段
-
完整过滤器:同时处理请求和响应
-
访问日志处理器:记录请求/响应信息
5. 请求解码流程
5.1 头部解码
voidFilterManager::decodeHeaders(ActiveStreamDecoderFilter* filter,RequestHeaderMap& headers, bool end_stream) {std::list<ActiveStreamDecoderFilterPtr>::iterator entry =commonDecodePrefix(filter, FilterIterationStartState::AlwaysStartFromNext);for (; entry != decoder_filters_.end(); entry++) {FilterHeadersStatus status =(*entry)->decodeHeaders(headers, (*entry)->end_stream_);const auto continue_iteration =(*entry)->commonHandleAfterHeadersCallback(status, end_stream);if (!continue_iteration) {maybeContinueDecoding(continue_data_entry);return;}}maybeContinueDecoding(continue_data_entry);}
处理流程:
-
确定起始过滤器位置
-
遍历解码过滤器链
-
调用每个过滤器的
decodeHeaders方法 -
根据返回值决定是否继续迭代
-
处理可能的缓冲数据延续
5.2 数据解码
void FilterManager::decodeData(ActiveStreamDecoderFilter* filter,Buffer::Instance& data, bool end_stream,FilterIterationStartState filter_iteration_start_state) {std::list<ActiveStreamDecoderFilterPtr>::iterator entry =commonDecodePrefix(filter, filter_iteration_start_state);for(; entry != decoder_filters_.end(); entry++) {FilterDataStatus status =(*entry)->handle_->decodeData(data, (*entry)->end_stream_);processNewlyAddedMetadata();if(!(*entry)->commonHandleAfterDataCallback(status, data,state_.decoder_filters_streaming_)) {break;}}}
数据状态处理:
-
Continue:继续处理后续过滤器 -
StopIterationAndBuffer:停止迭代并缓冲数据 -
StopIterationAndWatermark:停止迭代并触发水位控制
5.3 尾部解码
void FilterManager::decodeTrailers(ActiveStreamDecoderFilter* filter,RequestTrailerMap& trailers) {std::list<ActiveStreamDecoderFilterPtr>::iterator entry =commonDecodePrefix(filter, FilterIterationStartState::CanStartFromCurrent);for(; entry != decoder_filters_.end(); entry++) {FilterTrailersStatus status = (*entry)->handle_->decodeTrailers(trailers);processNewlyAddedMetadata();if(!(*entry)->commonHandleAfterTrailersCallback(status)) {return;}}}
6. 响应编码流程
6.1 头部编码
voidFilterManager::encodeHeaders(ActiveStreamEncoderFilter* filter,ResponseHeaderMap& headers, bool end_stream) {std::list<ActiveStreamEncoderFilterPtr>::iterator entry =commonEncodePrefix(filter, end_stream,FilterIterationStartState::AlwaysStartFromNext);for (; entry != encoder_filters_.end(); entry++) {FilterHeadersStatus status =(*entry)->handle_->encodeHeaders(headers, (*entry)->end_stream_);const auto continue_iteration =(*entry)->commonHandleAfterHeadersCallback(status, end_stream);if (!continue_iteration) {maybeContinueEncoding(continue_data_entry);return;}}filter_manager_callbacks_.encodeHeaders(headers, modified_end_stream);}
6.2 数据编码
void FilterManager::encodeData(ActiveStreamEncoderFilter* filter,Buffer::Instance& data, bool end_stream,FilterIterationStartState filter_iteration_start_state) {std::list<ActiveStreamEncoderFilterPtr>::iterator entry =commonEncodePrefix(filter, end_stream, filter_iteration_start_state);for(; entry != encoder_filters_.end(); entry++) {FilterDataStatus status =(*entry)->handle_->encodeData(data, (*entry)->end_stream_);if(!(*entry)->commonHandleAfterDataCallback(status, data,state_.encoder_filters_streaming_)) {return;}}filter_manager_callbacks_.encodeData(data, modified_end_stream);}
6.3 尾部编码
void FilterManager::encodeTrailers(ActiveStreamEncoderFilter* filter,ResponseTrailerMap& trailers) {std::list<ActiveStreamEncoderFilterPtr>::iterator entry =commonEncodePrefix(filter, true,FilterIterationStartState::CanStartFromCurrent);for(; entry != encoder_filters_.end(); entry++) {FilterTrailersStatus status = (*entry)->handle_->encodeTrailers(trailers);if(!(*entry)->commonHandleAfterTrailersCallback(status)) {return;}}filter_manager_callbacks_.encodeTrailers(trailers);}
7. 过滤器链状态管理
7.1 过滤器调用状态跟踪
struct FilterCallState {static constexpr uint32_t DecodeHeaders = 0x01;static constexpr uint32_t DecodeData = 0x02;static constexpr uint32_t DecodeTrailers = 0x04;static constexpr uint32_t EncodeHeaders = 0x08;static constexpr uint32_t EncodeData = 0x10;static constexpr uint32_t EncodeTrailers = 0x20;static constexpr uint32_t Encode1xxHeaders = 0x40;static constexpr uint32_t LastDataFrame = 0x80;};
状态位说明:
-
用于跟踪当前正在执行的过滤器操作
-
防止递归调用和重复处理
-
支持多个阶段的同时跟踪
7.2 流状态管理
struct State {uint32_t filter_call_state_{0};bool remote_encode_complete_ : 1;bool local_complete_ : 1;bool has_1xx_headers_ : 1;bool created_filter_chain_ : 1;bool is_head_request_ : 1;bool is_grpc_request_ : 1;bool non_100_response_headers_encoded_ : 1;bool under_on_local_reply_ : 1;bool decoder_filter_chain_aborted_ : 1;bool encoder_filter_chain_aborted_ : 1;bool saw_downstream_reset_ : 1;bool encoder_filters_streaming_{true};bool decoder_filters_streaming_{true};bool destroyed_{false};ActiveStreamEncoderFilter* latest_data_encoding_filter_{};ActiveStreamDecoderFilter* latest_data_decoding_filter_{};};
8. 过滤器链延续机制
8.1 共同延续方法
void ActiveStreamFilterBase::commonContinue() {if (!canContinue()) {return;}// 设置迭代状态if (stoppedAll()) {iterate_from_current_filter_ = true;}allowIteration();// 处理 1xx 响应if (has1xxHeaders()) {continued_1xx_headers_ = true;do1xxHeaders();}// 处理头部if (!headers_continued_) {headers_continued_ = true;doHeaders(complete() && !bufferedData() && !hasTrailers());}// 处理元数据doMetadata();// 处理数据if (bufferedData()) {doData(complete() && !had_trailers_before_data);}// 处理尾部if (had_trailers_before_data) {doTrailers();}iterate_from_current_filter_ = false;}
8.2 过滤器回调处理
bool ActiveStreamFilterBase::commonHandleAfterHeadersCallback(FilterHeadersStatus status, bool end_stream) {if(status == FilterHeadersStatus::StopIteration) {iteration_state_ = IterationState::StopSingleIteration;return false;} else if (status == FilterHeadersStatus::Continue) {headers_continued_ = true;return true;}// 处理其他状态return true;}bool ActiveStreamFilterBase::commonHandleAfterDataCallback(FilterDataStatus status, Buffer::Instance& provided_data,bool& buffer_was_streaming) {if(status == FilterDataStatus::Continue) {if(iteration_state_ == IterationState::StopSingleIteration) {commonHandleBufferData(provided_data);commonContinue();return false;}} else {iteration_state_ = IterationState::StopSingleIteration;if(status == FilterDataStatus::StopIterationAndBuffer ||status == FilterDataStatus::StopIterationAndWatermark) {buffer_was_streaming = status == FilterDataStatus::StopIterationAndWatermark;commonHandleBufferData(provided_data);}return false;}return true;}
9. 本地响应处理
void FilterManager::sendLocalReply(Code code, absl::string_view body,const std::function<void(ResponseHeaderMap& headers)>& modify_headers,const absl::optional<Grpc::Status::GrpcStatus> grpc_status,absl::string_view details) {// 停止过滤器链迭代if(state_.filter_call_state_ & (FilterCallState::DecodeHeaders |FilterCallState::DecodeData |FilterCallState::DecodeTrailers)) {state_.decoder_filter_chain_aborted_ = true;} else if (state_.filter_call_state_ &(FilterCallState::EncodeHeaders | FilterCallState::EncodeData |FilterCallState::EncodeTrailers)) {state_.encoder_filter_chain_aborted_ = true;}// 发送响应if(!filter_manager_callbacks_.responseHeaders().has_value()) {sendLocalReplyViaFilterChain(state_.is_grpc_request_, code, body, modify_headers,state_.is_head_request_, grpc_status, details);} else if (!state_.non_100_response_headers_encoded_) {sendDirectLocalReply(code, body, modify_headers, state_.is_head_request_, grpc_status);} else {filter_manager_callbacks_.resetStream();}}
本地响应场景:
-
过滤器检测到错误条件
-
速率限制触发
-
认证失败
-
健康检查响应
10. 缓冲区和水位管理
10.1 缓冲区管理
Buffer::InstancePtr ActiveStreamDecoderFilter::createBuffer() {auto buffer = dispatcher().getWatermarkFactory().createBuffer([this]() -> void { this->requestDataDrained(); },[this]() -> void { this->requestDataTooLarge(); },[]() -> void { /* 处理溢出水位 */ });buffer->setWatermarks(parent_.buffer_limit_);return buffer;}
10.2 水位回调
void ActiveStreamDecoderFilter::requestDataTooLarge() {if(parent_.state_.decoder_filters_streaming_) {onDecoderFilterAboveWriteBufferHighWatermark();} else {parent_.filter_manager_callbacks_.onRequestDataTooLarge();sendLocalReply(Code::PayloadTooLarge,CodeUtility::toString(Code::PayloadTooLarge),nullptr, absl::nullopt,StreamInfo::ResponseCodeDetails::get().RequestPayloadTooLarge);}}
水位管理策略:
-
低水位:缓冲区数据被处理,可以继续接收数据
-
高水位:缓冲区达到限制,停止接收数据
-
溢出:缓冲区超过限制,触发错误响应
11. 常见过滤器实现
11.1 路由过滤器(Router Filter)
路由过滤器是 Envoy 中最常用的 HTTP 过滤器,实现了 HTTP 请求的转发功能。
类型 URL:type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
核心功能:
-
HTTP 转发和重定向
-
请求重试机制
-
响应处理和缓冲
-
路由相关策略实现
统计指标:
-
http.<stat_prefix>.no_route:无路由匹配的请求数 -
http.<stat_prefix>.no_cluster:无集群可用的请求数 -
http.<stat_prefix>.rq_redirect:重定向的请求数 -
http.<stat_prefix>.rq_direct_response:直接响应的请求数
配置示例:
- name: envoy.filters.http.routertyped_config:"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Routerdynamic_stats: truesuppress_envoy_headers: falsestart_child_span: true
11.2 健康检查过滤器(Health Check Filter)
健康检查过滤器提供简单的健康状态检查功能。
类型 URL:type.googleapis.com/envoy.extensions.filters.http.health_check.v3.HealthCheck
管理端点:
-
/healthcheck/fail:将健康状态设置为失败 -
/healthcheck/ok:恢复健康状态
配置示例:
- name: envoy.filters.http.health_checktyped_config:"@type": type.googleapis.com/envoy.extensions.filters.http.health_check.v3.HealthCheckpass_through_mode: falseendpoint:path: "/healthz"cache_time: 0s
11.3 速率限制过滤器(Rate Limit Filter)
速率限制过滤器实现了请求速率限制功能。
类型 URL:type.googleapis.com/envoy.extensions.filters.http.ratelimit.v3.RateLimit
速率限制动作类型:
-
source_cluster:基于源集群限制 -
destination_cluster:基于目标集群限制 -
remote_address:基于远程地址限制 -
generic_key:基于通用键值限制 -
header_value_match:基于头部值匹配限制
配置示例:
- name: envoy.filters.http.ratelimittyped_config:"@type": type.googleapis.com/envoy.extensions.filters.http.ratelimit.v3.RateLimitdomain: "httpbin"stage: 0request_type: "both"rate_limiter:name: "envoy.ratelimit"typed_config:"@type": type.googleapis.com/envoy.extensions.common.ratelimit.v3.RateLimitServiceConfiggrpc_service:envoy_grpc:cluster_name: "ratelimit"
11.4 压缩过滤器(Compressor Filter)
压缩过滤器使 Envoy 能够在客户端请求时压缩来自上游服务的数据。
类型 URL:type.googleapis.com/envoy.extensions.filters.http.compressor.v3.Compressor
支持的压缩算法:
-
gzip:
envoy.extensions.compression.gzip.compressor.v3.Gzip -
brotli:
envoy.extensions.compression.brotli.compressor.v3.Brotli -
zstd:
envoy.extensions.compression.zstd.compressor.v3.Zstd
压缩条件:
-
响应内容长度 >= 最小长度配置
-
内容类型在允许列表中
-
客户端 Accept-Encoding 头部包含支持的算法
-
没有 Content-Encoding 头部
配置示例:
- name: envoy.filters.http.compressortyped_config:"@type": type.googleapis.com/envoy.extensions.filters.http.compressor.v3.Compressorresponse_direction_config:common_config:min_content_length: 100content_type:- text/html- application/jsondisable_on_etag_header: truecompressor_library:name: text_optimizedtyped_config:"@type": type.googleapis.com/envoy.extensions.compression.gzip.compressor.v3.Gzipmemory_level: 3window_bits: 10compression_level: BEST_COMPRESSION
11.5 外部授权过滤器(External Authorization Filter)
外部授权过滤器调用外部 gRPC 或 HTTP 服务来检查传入的 HTTP 请求是否被授权。
类型 URL:type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz
支持的协议:
-
gRPC:与外部授权服务器通信(推荐)
-
HTTP:与原始 HTTP 服务器通信
gRPC 配置示例:
- name: envoy.filters.http.ext_authztyped_config:"@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzgrpc_service:envoy_grpc:cluster_name: ext-authztimeout: 0.5sinclude_peer_certificate: truewith_request_body:max_request_bytes: 1024allow_partial_message: true
11.6 JWT 认证过滤器(JWT Authn Filter)
JWT 认证过滤器提供了 JSON Web Token(JWT)的认证和验证功能。
类型 URL:type.googleapis.com/envoy.extensions.filters.http.jwt_authn.v3.JwtAuthentication
配置示例:
- name: envoy.filters.http.jwt_authntyped_config:"@type": type.googleapis.com/envoy.extensions.filters.http.jwt_authn.v3.JwtAuthenticationproviders:my_jwt_provider:issuer: "https://example.com"local_jwks:inline_string: |{"keys": [{"kty": "RSA","e": "AQAB","n": "..."}]}rules:- match:prefix: "/api"requires:provider_name: my_jwt_provider
11.7 gRPC 相关过滤器
gRPC 统计过滤器:
-
类型 URL:
type.googleapis.com/envoy.extensions.filters.http.grpc_stats.v3.FilterConfig -
功能:收集 gRPC 调用的详细统计信息
gRPC Web 过滤器:
-
类型 URL:
type.googleapis.com/envoy.extensions.filters.http.grpc_web.v3.GrpcWeb -
功能:支持 gRPC Web 协议,允许浏览器直接调用 gRPC 服务
gRPC JSON 转码过滤器:
-
类型 URL:
type.googleapis.com/envoy.extensions.filters.http.grpc_json_transcoder.v3.GrpcJsonTranscoder -
功能:将 JSON API 请求转换为 gRPC 调用
11.8 其他重要过滤器
CORS 过滤器:
-
实现跨源资源共享(CORS)支持和验证
-
配置允许的源、方法和头部
-
支持预检请求处理
缓冲区过滤器:
-
提供请求和响应的缓冲功能
-
防止下游客户端接收响应过快导致的资源耗尽
故障注入过滤器:
-
允许在 HTTP 请求/响应路径中注入故障
-
支持延迟注入和错误响应注入
-
用于测试系统的弹性
Lua 过滤器:
-
通过 Lua 脚本定制 Envoy 行为
-
访问和修改 HTTP 头部和请求/响应体
12. 过滤器开发最佳实践
12.1 过滤器实现要点
class MyCustomFilter : public StreamFilterBase,public StreamDecoderFilter,public StreamEncoderFilter {public:// 请求处理FilterHeadersStatus decodeHeaders(RequestHeaderMap& headers,bool end_stream) override {// 处理请求头部// 注意事项:// 1. 避免长时间操作// 2. 只在必要时缓冲数据// 3. 正确返回状态码return FilterHeadersStatus::Continue;}FilterDataStatus decodeData(Buffer::Instance& data,bool end_stream) override {// 处理请求数据// 数据可能是分块的,需要注意完整性return FilterDataStatus::Continue;}FilterTrailersStatus decodeTrailers(RequestTrailerMap& trailers)override{// 处理请求尾部return FilterTrailersStatus::Continue;}// 响应处理FilterHeadersStatus encodeHeaders(ResponseHeaderMap& headers,bool end_stream) override {// 处理响应头部return FilterHeadersStatus::Continue;}FilterDataStatus encodeData(Buffer::Instance& data,bool end_stream) override {// 处理响应数据return FilterDataStatus::Continue;}FilterTrailersStatus encodeTrailers(ResponseTrailerMap& trailers)override{// 处理响应尾部return FilterTrailersStatus::Continue;}};
12.2 过滤器配置工厂
class MyCustomFilterConfigFactory : public NamedHttpFilterConfigFactory {public:HttpFilterFactoryCb createFilterFactoryFromProto(const Protobuf::Message& proto_config,const std::string&,Server::Configuration::FactoryContext& context) override {const auto& config = dynamic_cast<const MyCustomFilterConfig&>(proto_config);return [config](Http::FilterChainFactoryCallbacks& callbacks) {callbacks.addStreamFilter(std::make_shared<MyCustomFilter>(config));};}ProtobufTypes::MessagePtr createEmptyConfigProto()override{return std::make_unique<MyCustomFilterConfig>();}std::string name()constoverride{ return "my_custom_filter"; }};
12.3 性能优化建议
避免不必要的缓冲:
// 错误做法:总是缓冲FilterDataStatus decodeData(Buffer::Instance& data, bool end_stream) {return FilterDataStatus::StopIterationAndBuffer;}// 正确做法:按需缓冲FilterDataStatus decodeData(Buffer::Instance& data, bool end_stream) {if(needToProcessLater(data)) {return FilterDataStatus::StopIterationAndBuffer;}return FilterDataStatus::Continue;}
优化过滤器顺序:
# 优化前:效率低下http_filters:- name: envoy.filters.http.router- name: envoy.filters.http.ratelimit- name: envoy.filters.http.health_check# 优化后:快速失败优先http_filters:- name: envoy.filters.http.health_check # 快速拒绝不健康请求- name: envoy.filters.http.ratelimit # 提前进行速率限制- name: envoy.filters.http.router # 最后处理路由
12.4 错误处理
class RobustFilter : public StreamDecoderFilter {public:FilterHeadersStatus decodeHeaders(RequestHeaderMap& headers,bool end_stream) override {try {// 可能抛出异常的操作processHeaders(headers);return FilterHeadersStatus::Continue;} catch (const std::exception& e) {// 发送本地错误响应decoder_callbacks_->sendLocalReply(Http::Code::InternalServerError,"Internal Error", nullptr, absl::nullopt,"filter.processing_error");return FilterHeadersStatus::StopIteration;}}};
13. 性能优化
13.1 缓冲区策略优化
http_connection_manager:http_filters:- name: envoy.filters.http.routertyped_config:"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Routerdynamic_stats: truesuppress_envoy_headers: falsestream_idle_timeout: 300srequest_timeout: 60s# 缓冲区配置buffer_limit: 1048576 # 1MB
13.2 并发处理优化
-
使用异步处理避免阻塞
-
合理设置线程池大小
-
利用连接池复用连接
-
启用 HTTP/2 多路复用
13.3 内存管理优化
-
及时释放不再使用的缓冲区
-
使用对象池减少内存分配
-
避免不必要的数据拷贝
-
合理设置缓冲区大小限制
14. 监控与调试
14.1 关键监控指标
过滤器执行指标:
-
过滤器执行时间分布
-
过滤器拒绝率
-
缓冲区使用率
-
过滤器链长度
系统资源指标:
-
CPU 使用率
-
内存使用量
-
网络 I/O
-
文件描述符使用
14.2 调试方法
启用调试日志:
# 在 Envoy 配置中启用调试级别日志admin:access_log_path: /tmp/admin_access.logaddress:socket_address:address: 127.0.0.1port_value: 9901# 动态调整日志级别# curl -X POST http://localhost:9901/logging?filter=debug
使用追踪功能:
-
启用请求追踪
-
分析过滤器执行时间
-
定位性能瓶颈
夜雨聆风