3. 连接生命周期:TCP连接建立、TLS握手、HTTP/1.1与HTTP/2连接复用
在Envoy代理的性能调优中,连接生命周期管理是决定延迟、吞吐量和资源消耗的核心因素。一个完整的连接生命周期从TCP三次握手开始,经过可选的TLS加密握手,最终进入应用层协议的数据交换阶段。Envoy作为L7代理,必须高效管理这些阶段,以支撑大规模微服务通信。
3.1 TCP连接建立:三次握手与延迟分析
TCP连接建立是连接生命周期的起点。Envoy作为客户端(上游)或服务器(下游)时,都需要经历标准的TCP三次握手过程。每次握手都会引入一个RTT(Round-Trip Time)的延迟,对于跨区域或高延迟网络,这一开销尤为显著。
connect_timeout 控制等待握手完成的最大时间。
Envoy的TCP连接建立参数直接影响性能:
| 参数 | 默认值 | 调优建议 |
|---|---|---|
connect_timeout |
10s | 内网环境建议 1-3s;跨区域建议 5-10s |
tcp_keepalive |
禁用 | 建议启用,间隔 30s,探测次数 3 次 |
tcp_fast_open |
禁用 | 低延迟场景可启用,减少1个RTT |
upstream_tcp_fast_open 配置支持。
3.2 TLS握手:加密协商与性能权衡
TLS握手在TCP连接建立之后进行,为通信提供加密和身份验证。Envoy支持TLS 1.2和TLS 1.3,两者在握手延迟和安全性上有显著差异。TLS 1.3通过减少握手往返次数(1-RTT vs 2-RTT)和简化密码套件,显著降低了连接建立延迟。
Envoy中TLS配置的关键参数:
- 密码套件选择: 优先使用TLS 1.3的AEAD套件(如TLS_AES_128_GCM_SHA256),避免使用老旧且计算开销大的套件。
- 会话复用: 启用TLS会话缓存或会话票据(Session Ticket),避免重复握手。Envoy通过
tls_session_ticket_keys和session_timeout控制。 - 证书链长度: 证书链过长会增加握手数据量,建议控制在3层以内(根CA、中间CA、服务器证书)。
| 特性 | TLS 1.2 | TLS 1.3 |
|---|---|---|
| 握手RTT | 2 RTT | 1 RTT(0-RTT可选) |
| 密码套件数量 | 37+ | 5(仅AEAD) |
| 会话复用支持 | Session ID + Ticket | Session Ticket + PSK |
| Envoy默认支持 | 是 | 是(推荐) |
3.3 HTTP/1.1连接复用:Keep-Alive与连接池
HTTP/1.1通过Keep-Alive机制实现连接复用,允许在同一个TCP连接上发送多个请求-响应。Envoy的连接池管理是性能调优的关键环节,直接影响上游连接的利用率和延迟。
Envoy的HTTP/1.1连接池配置:
- 最大连接数(
max_connections): 限制到单个上游主机的最大连接数,防止资源耗尽。 - 最大请求数(
max_requests_per_connection): 单个连接处理的最大请求数,达到后关闭连接以释放资源。 - 空闲超时(
idle_timeout): 连接空闲超过该时间后关闭,避免僵尸连接。
# Envoy HTTP/1.1连接池配置示例
static_resources:
clusters:
- name: upstream_cluster
connect_timeout: 3s
type: STRICT_DNS
lb_policy: ROUND_ROBIN
http_protocol_options:
# 启用HTTP/1.1 Keep-Alive
allow_connect: true
circuit_breakers:
thresholds:
- priority: DEFAULT
max_connections: 1024
max_pending_requests: 1024
max_requests: 1024
max_retries: 3
max_requests_per_connection: 100
idle_timeout: 3600s
max_requests_per_connection 建议设置为50-200,避免单个连接长期占用导致负载不均。同时,idle_timeout 建议设置为300-600秒,平衡资源释放与复用效率。
3.4 HTTP/2连接复用:多路复用与流控制
HTTP/2通过多路复用(Multiplexing)在单个TCP连接上并行处理多个请求-响应流,彻底解决了HTTP/1.1的队头阻塞问题。Envoy原生支持HTTP/2,并在上游和下游均可启用。
HTTP/2的核心优势:
- 流优先级: 允许为不同请求设置优先级,Envoy支持依赖树和权重两种模式。
- 头部压缩(HPACK): 减少重复头部开销,降低带宽消耗。
- 服务器推送: 服务器可主动推送资源,减少客户端请求次数。
Envoy中HTTP/2的关键配置参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
max_concurrent_streams |
100 | 单个连接上最大并发流数 |
initial_stream_window_size |
65535 bytes | 流级别初始流量控制窗口 |
initial_connection_window_size |
1048576 bytes | 连接级别初始流量控制窗口 |
max_frame_size |
16384 bytes | 单个帧的最大大小 |
3.5 连接生命周期管理策略
Envoy通过连接池和断路器(Circuit Breakers)管理连接生命周期,确保系统在高负载下仍能稳定运行。以下是核心管理策略:
- 预热连接: 通过
preconnect策略在流量到达前建立连接,减少冷启动延迟。 - 连接 draining: 在连接关闭前,等待正在处理的请求完成,避免请求中断。Envoy通过
drain_timeout控制。 - 健康检查: 主动健康检查(Active Health Check)定期探测上游连接状态,自动剔除异常连接。
max_concurrent_streams 设置为100-200,initial_stream_window_size 调整为256KB-1MB,以平衡并发与内存占用。同时启用 circuit_breakers 防止连接池耗尽。
Envoy的连接生命周期管理是一个持续优化的过程,需要根据实际流量模式、网络延迟和资源限制动态调整参数。通过合理配置TCP、TLS和应用层参数,可以显著提升代理性能,降低端到端延迟。