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

处理阶段说明:
-
请求解码阶段:处理客户端发来的 HTTP 请求,包括头部、数据和尾部
-
响应编码阶段:处理向上游服务发送的 HTTP 响应
-
访问日志阶段:记录请求和响应的详细信息
3. 活动流过滤器基础
3.1 ActiveStreamFilterBase 结构体
ruby
struct ActiveStreamFilterBase : public virtual StreamFilterCallbacks, Logger::Loggable<Logger::Id::http>
核心功能:
-
为流解码器和编码器过滤器提供基础包装
-
负责状态更新和数据存储
-
处理过滤器迭代和延续逻辑
-
管理匹配和匹配数据更新
-
提供缓冲区管理接口
迭代状态管理:
perl
enum class IterationState { Continue, // 迭代未停止 StopSingleIteration, // 停止单次迭代 StopAllBuffer, // 停止所有迭代并缓冲数据 StopAllWatermark, // 停止所有迭代并缓冲到高水位};
3.2 活动解码器过滤器
swift
struct ActiveStreamDecoderFilter : public ActiveStreamFilterBase, public StreamDecoderFilterCallbacks, LinkedObject<ActiveStreamDecoderFilter>
功能:
-
包装解码过滤器,处理请求解码
-
提供解码过滤器回调接口
-
管理解码过程中的缓冲和状态
-
支持请求数据的流式处理
3.3 活动编码器过滤器
swift
struct ActiveStreamEncoderFilter : public ActiveStreamFilterBase, public StreamEncoderFilterCallbacks, LinkedObject<ActiveStreamEncoderFilter>
功能:
-
包装编码过滤器,处理响应编码
-
提供编码过滤器回调接口
-
管理编码过程中的缓冲和状态
-
支持响应数据的流式处理
4. 过滤器链创建
4.1 创建流程
cpp
bool FilterManager::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 过滤器工厂回调
cpp
class FilterChainFactoryCallbacksImpl : public Http::FilterChainFactoryCallbacks {public: void addStreamDecoderFilter(Http::StreamDecoderFilterSharedPtr filter) override; void addStreamEncoderFilter(Http::StreamEncoderFilterSharedPtr filter) override; void addStreamFilter(Http::StreamFilterSharedPtr filter) override; void addAccessLogHandler(AccessLog::InstanceSharedPtr handler) override; Event::Dispatcher& dispatcher() override;};
回调类型:
-
解码过滤器:仅处理请求阶段
-
编码过滤器:仅处理响应阶段
-
完整过滤器:同时处理请求和响应
-
访问日志处理器:记录请求/响应信息
5. 请求解码流程
5.1 头部解码
cpp
void FilterManager::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 数据解码
php
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 尾部解码
php
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.1 头部编码
cpp
void FilterManager::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 数据编码
php
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 尾部编码
php
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.1 过滤器调用状态跟踪
cpp
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 流状态管理
cpp
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.1 共同延续方法
javascript
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 过滤器回调处理
php
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;}
- 本地响应处理
php
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 缓冲区管理
javascript
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 水位回调
php
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:直接响应的请求数
配置示例:
bash
- name: envoy.filters.http.router typed_config: "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router dynamic_stats: true suppress_envoy_headers: false start_child_span: true
11.2 健康检查过滤器(Health Check Filter)
健康检查过滤器提供简单的健康状态检查功能。
类型 URL :type.googleapis.com/envoy.extensions.filters.http.health_check.v3.HealthCheck
管理端点:
-
/healthcheck/fail:将健康状态设置为失败 -
/healthcheck/ok:恢复健康状态
配置示例:
bash
- name: envoy.filters.http.health_check typed_config: "@type": type.googleapis.com/envoy.extensions.filters.http.health_check.v3.HealthCheck pass_through_mode: false endpoint: 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:基于头部值匹配限制
配置示例:
bash
- name: envoy.filters.http.ratelimit typed_config: "@type": type.googleapis.com/envoy.extensions.filters.http.ratelimit.v3.RateLimit domain: "httpbin" stage: 0 request_type: "both" rate_limiter: name: "envoy.ratelimit" typed_config: "@type": type.googleapis.com/envoy.extensions.common.ratelimit.v3.RateLimitServiceConfig grpc_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 头部
配置示例:
bash
- name: envoy.filters.http.compressor typed_config: "@type": type.googleapis.com/envoy.extensions.filters.http.compressor.v3.Compressor response_direction_config: common_config: min_content_length: 100 content_type: - text/html - application/json disable_on_etag_header: true compressor_library: name: text_optimized typed_config: "@type": type.googleapis.com/envoy.extensions.compression.gzip.compressor.v3.Gzip memory_level: 3 window_bits: 10 compression_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 配置示例:
bash
- name: envoy.filters.http.ext_authz typed_config: "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz grpc_service: envoy_grpc: cluster_name: ext-authz timeout: 0.5s include_peer_certificate: true with_request_body: max_request_bytes: 1024 allow_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
配置示例:
python
- name: envoy.filters.http.jwt_authn typed_config: "@type": type.googleapis.com/envoy.extensions.filters.http.jwt_authn.v3.JwtAuthentication providers: 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 过滤器实现要点
cpp
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 过滤器配置工厂
cpp
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() const override { return "my_custom_filter"; }};
12.3 性能优化建议
避免不必要的缓冲:
php
// 错误做法:总是缓冲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;}
优化过滤器顺序:
makefile
# 优化前:效率低下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 错误处理
cpp
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.1 缓冲区策略优化
bash
http_connection_manager: http_filters: - name: envoy.filters.http.router typed_config: "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router dynamic_stats: true suppress_envoy_headers: false stream_idle_timeout: 300s request_timeout: 60s # 缓冲区配置 buffer_limit: 1048576 # 1MB
13.2 并发处理优化
-
使用异步处理避免阻塞
-
合理设置线程池大小
-
利用连接池复用连接
-
启用 HTTP/2 多路复用
13.3 内存管理优化
-
及时释放不再使用的缓冲区
-
使用对象池减少内存分配
-
避免不必要的数据拷贝
-
合理设置缓冲区大小限制
14. 监控与调试
14.1 关键监控指标
过滤器执行指标:
-
过滤器执行时间分布
-
过滤器拒绝率
-
缓冲区使用率
-
过滤器链长度
系统资源指标:
-
CPU 使用率
-
内存使用量
-
网络 I/O
-
文件描述符使用
14.2 调试方法
启用调试日志:
apache
# 在 Envoy 配置中启用调试级别日志admin: access_log_path: /tmp/admin_access.log address: socket_address: address: 127.0.0.1 port_value: 9901
# 动态调整日志级别# curl -X POST http://localhost:9901/logging?filter=debug
使用追踪功能:
-
启用请求追踪
-
分析过滤器执行时间
-
定位性能瓶颈