找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

39

积分

0

好友

6

主题
发表于 前天 23:21 | 查看: 5| 回复: 0
Envoy_Logo_Final_PANTONE.png

服务重启时用户连接中断?故障节点还在接收流量导致大量超时?这些是微服务架构运维中的常见问题。今天介绍的Envoy项目,专门用来解决这类流量管理难题。

项目背景

Envoy是Lyft在2016年开源的网络代理,用C++编写,现在是CNCF毕业项目。它的定位是处理微服务之间的网络通信,可以部署为边缘代理、API网关或服务网格的数据面。

目前在GitHub上有26.8k星标,被Uber、Apple、Netflix等公司用于生产环境。

核心功能

1. 热重启机制
配置变更时,新进程启动并接管连接,老进程处理完现有请求后退出,整个过程用户无感知。这解决了传统代理reload时连接中断的问题。

2. 动态配置
通过xDS协议(包括LDS、RDS、CDS、EDS等)实时下发配置,运维人员修改路由规则、调整后端节点,都不需要重启服务。

3. 故障自动处理  

  • 健康检查:定期探测后端服务,自动摘除故障节点
  • 熔断器:当错误率超过阈值时快速失败,避免雪崩
  • 重试机制:可配置重试次数和退避策略

4. 完整的监控数据
内置Prometheus指标导出,记录请求延迟、状态码分布、连接池状态等。通过Admin接口(默认9901端口)可以查看实时统计:

curl localhost:9901/stats/prometheus

配置示例

一个基础的HTTP代理配置:

static_resources:
  listeners:
  - address:
      socket_address:
        address: 0.0.0.0
        port_value: 10000
    filter_chains:
    - filters:
      - name: envoy.filters.network.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
          stat_prefix: ingress_http
          route_config:
            name: local_route
            virtual_hosts:
            - name: backend
              domains: ["*"]
              routes:
              - match:
                  prefix: "/"
                route:
                  cluster: backend_service
                  timeout: 5s
          http_filters:
          - name: envoy.filters.http.router
            typed_config:
              "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router

  clusters:
  - name: backend_service
    type: STRICT_DNS
    lb_policy: ROUND_ROBIN
    connect_timeout: 2s
    load_assignment:
      cluster_name: backend_service
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: backend.example.com
                port_value: 8080
    health_checks:
    - timeout: 1s
      interval: 10s
      unhealthy_threshold: 3
      healthy_threshold: 2
      http_health_check:
        path: "/health"

这个配置实现了:

  • 监听10000端口接收HTTP请求
  • 将流量转发到backend.example.com:8080
  • 每10秒检查一次后端健康状态
  • 请求超时时间5秒

Docker启动命令:

docker run -d \
  -p 10000:10000 \
  -p 9901:9901 \
  -v $(pwd)/envoy.yaml:/etc/envoy/envoy.yaml \
  envoyproxy/envoy:v1.28-latest

实际应用场景

灰度发布
通过配置路由权重,将10%流量导向新版本服务,观察指标正常后逐步放量。

API网关
统一处理认证、限流、路由分发,后端服务只需关注业务逻辑。

服务网格数据面
配合Istio或Consul使用,以Sidecar模式部署在每个Pod中,接管服务间通信。

边缘代理
替代Nginx作为入口网关,利用动态配置能力简化运维。

运维要点

  1. 监控配置
    部署后接入Prometheus,重点关注这些指标:

    • envoy_cluster_upstream_rq_time:请求延迟分布
    • envoy_cluster_upstream_cx_active:活跃连接数
    • envoy_cluster_health_check_failure:健康检查失败次数
  2. 熔断参数设置
    根据后端服务容量合理配置:

    circuit_breakers:
    thresholds:
    - priority: DEFAULT
    max_connections: 1024
    max_requests: 1024
    max_retries: 3
  3. 日志格式
    使用JSON格式便于日志系统解析:

    access_log:
    - name: envoy.access_loggers.file
    typed_config:
    "@type": type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog
    path: /dev/stdout
    log_format:
      json_format:
        start_time: "%START_TIME%"
        method: "%REQ(:METHOD)%"
        path: "%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%"
        response_code: "%RESPONSE_CODE%"
        duration: "%DURATION%"
  4. Admin接口使用
    常用命令:

    • /config_dump:导出当前完整配置
    • /clusters:查看集群状态和健康检查结果
    • /stats:查看所有统计指标
    • /drain_listeners:优雅下线

适用场景判断

适合使用Envoy的情况:

  • 微服务架构需要统一的流量管理
  • 需要频繁调整路由规则但不能中断服务
  • 需要详细的请求级别监控数据
  • 准备部署服务网格

可能不需要Envoy的情况:

  • 单体应用或服务数量很少
  • 对性能要求不高且配置变更频率低
  • 团队对C++调试和问题排查经验不足

学习资源

官方文档写得比较详细,建议按这个顺序学习:

  1. Introduction - Architecture overview(了解整体架构)
  2. Configuration reference(学习配置语法)
  3. Operations - Admin interface(掌握运维工具)

社区提供了envoy-filter-example项目,演示如何开发自定义Filter扩展功能。

总结

Envoy解决的是微服务架构中流量管理的具体问题:零宕机配置变更、自动故障处理、详细监控数据。它不是必需品,但如果你的系统正在经历服务拆分,或者在为流量管理发愁,可以尝试在测试环境部署验证效果。

关注「云栈运维云原生」,获取更多云原生技术实践经验


项目地址:
https://github.com/envoyproxy/envoy

官方文档:
https://www.envoyproxy.io/docs

CNCF项目页:
https://www.cncf.io/projects/envoy


标签:#Envoy #Github #微服务 #ServiceMesh #云原生 #流量管理 #CNCF #运维工具

您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-10-18 02:35 , Processed in 0.081551 second(s), 50 queries .

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表