健康检查机制
健康检查是保障微服务系统高可用的关键手段。Envoy 支持主动和被动健康检查,能够自动剔除异常实例,提升整体稳定性和弹性。
主动健康检查
Envoy 支持多种主动健康检查方式:
- HTTP 健康检查:定期向后端发送 HTTP 请求,响应 2xx/3xx 视为健康。
- TCP 健康检查:建立 TCP 连接并可选发送/接收特定数据包。
- gRPC 健康检查:遵循 gRPC Health Checking 协议。
- Redis 健康检查:发送 PING/EXISTS 命令,响应正常视为健康。
典型配置片段:
health_checks:
- timeout: 1s
interval: 5s
unhealthy_threshold: 3
healthy_threshold: 2
http_health_check:
path: "/healthz"
expected_statuses:
- start: 200
end: 399
timeout
:单次健康检查超时时间。interval
:健康检查周期。unhealthy_threshold
:连续失败多少次判定为不健康。healthy_threshold
:连续成功多少次判定为健康。
被动健康检查(异常检测)
被动健康检查通过 Outlier Detection 机制,自动检测并剔除响应异常的实例。
常见检测类型:
- 连续 5xx 错误:连续返回 5xx 响应即剔除。
- 连续本地错误:如连接超时、重置等。
- 成功率异常:统计周期内成功率低于阈值即剔除。
典型配置片段:
outlier_detection:
interval: 10s
base_ejection_time: 30s
max_ejection_percent: 50
consecutive_5xx: 5
success_rate_minimum_hosts: 5
success_rate_request_volume: 100
success_rate_stdev_factor: 1900
interval
:异常检测周期。base_ejection_time
:剔除实例的基础时长。max_ejection_percent
:最大可被剔除实例比例。consecutive_5xx
:连续 5xx 错误阈值。success_rate_*
:成功率异常检测相关参数。
工程实践建议
- 所有生产集群建议开启主动健康检查,优先 HTTP/gRPC。
- 配合被动异常检测,自动剔除故障实例,防止雪崩。
- 合理设置阈值,兼顾敏感性与误判容忍度。
- 健康检查接口应轻量、幂等,避免业务副作用。
- 监控健康检查与异常检测相关指标,及时发现和优化配置。
健康检查与异常检测是微服务高可用的基石,建议在设计之初就纳入服务治理体系。