了解Envoy proxy

前言:由于面试过程中遇到的前端服务代理的工具 Envoy proxy,借此先浅浅的学习一下
官方文档:https://www.envoyproxy.io/

Envoy is an open source edge and service proxy, designed for cloud-native applications
Envoy是一个开源边缘和服务代理,专为云原生应用而设计。最初由 Lyft 公司开发,现已成为 CNCF (Cloud Native Computing Foundation) 下的一个重要项目。
(注: “Open Source Edge” (开源边缘) 是指在边缘计算领域中使用开源软件和技术来构建和管理边缘计算基础设施和服务。)

它主要用于以下场景:
服务网格:Envoy 作为服务网格的关键组件,负责服务间的网络通信、负载均衡、熔断等功能。
API 网关:Envoy 可以作为微服务架构中的 API 网关,提供路由、认证、监控等功能。
边缘代理:Envoy 可以部署在网络边缘,负责处理入站和出站流量,提供安全、可观测性等能力。

Envoy 的主要特点包括:
高性能:基于 C++ 开发,具有出色的性能和可扩展性。
可扩展性:支持通过 xDS API 动态配置和扩展功能。
可观测性:内置丰富的监控和日志功能,方便故障定位和性能优化。
多语言支持:可与各种编程语言集成,支持 gRPC、REST 等协议。
安全性:支持 mTLS、JWT 等安全特性,保护服务间通信。

在前端开发中,Envoy 主要用于以下场景:
服务发现和负载均衡:Envoy 能够自动发现并管理后端服务实例,提供智能的负载均衡策略。
熔断与重试:Envoy 能够检测并隔离故障服务,提供断路器、重试等功能。
安全和认证:Envoy 能够提供 mTLS、JWT 等安全特性,保护前后端通信。
监控和可观测性:Envoy 内置丰富的监控指标和日志功能,方便前端团队进行故障排查和性能优化。

想要深入学习 Envoy,可以从以下几个方面着手:
1、阅读 Envoy 的官方文档,了解其基本原理和使用场景。
2、实践部署 Envoy 作为 API 网关或服务网格的一部分。
3、学习 Envoy 的配置语法和 xDS API,掌握动态配置的方法。
4、熟悉 Envoy 的监控和故障诊断功能,提高可观测性。
5、关注 Envoy 在云原生环境中的最佳实践。

两道面试题

问题一:Envoy中,哪个过滤器用于实现断路器功能? 答:Circuit Breaker。

在 Envoy 中,实现断路器功能的过滤器是 envoy.filters.network.http_connection_manager 中的 ratelimit 和 ext_authz 过滤器结合使用,最常用的功能是通过 envoy.filters.http.router 和 envoy.filters.http.ext_authz 进行故障注入和熔断。

主要概念
熔断器 (Circuit Breaker):
通过监控服务响应时间和错误率来决定是否切断请求到后端服务的流量。
如果错误率超过设定阈值,Envoy 将阻止到该服务的请求,从而减少错误传播,给后端服务恢复的时间。

以下是一个简单的配置示例,用于启用熔断器功能:

static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address: { address: 0.0.0.0, port_value: 10000 }
    filter_chains:
    - filters:
      - name: envoy.filters.network.http_connection_manager
        config:
          codec_type: AUTO
          stat_prefix: ingress_http
          route_config:
            name: local_route
            virtual_hosts:
            - name: backend
              domains: 
              - "*"
              routes:
              - match: { prefix: "/" }
                route:
                  cluster: service_backend
                  timeout: 0s  // 关键配置:设置请求超时时间。
                  retry_policy: // 关键配置:定义重试策略,包括重试次数和可重试的状态码。
                    num_retries: 3
                    per_try_timeout: 2s
                    retriable_status_codes:
                    - 429
                    - 500
                    - 503
                  max_concurrent_requests: 100 // 关键配置:限制并发请求数量,有助于控制流量。
              ...
          http_filters:
          - name: envoy.filters.http.router
  clusters:
  - name: service_backend
    connect_timeout: 0.25s
    lb_policy: ROUND_ROBIN
    load_assignment:
      ...

总结:Envoy 的断路器功能通过监控服务的健康状况和响应性能来实现,确保在服务出现故障时能够及时切断请求,从而保护后端服务并提高系统的整体稳定性。

问题二:在Envoy中,用于定义动态路由配置的资源类型是什么? 答:RouteConfiguration。

在 Envoy 中,用于定义动态路由配置的资源类型是 RouteConfiguration。具体来说,它是通过 xDS API(如 RDS,即路由发现服务)进行管理的。

关键概念
1、RouteConfiguration:
RouteConfiguration 用于定义路由规则,包括如何将请求路由到后端服务。
它包含一个或多个虚拟主机(virtual hosts),每个虚拟主机可以定义多个路由规则。
2、RDS (Route Discovery Service):
RDS 是 Envoy 提供的一个 API,允许动态更新路由配置。
通过 RDS,Envoy 可以在运行时接收更新的路由配置,而无需重启或重新加载。

资源结构
在 Envoy 的配置中,RouteConfiguration 的基本结构如下:

static_resources:
  listeners:
  - name: listener_0
    ...
    filter_chains:
    - filters:
      - name: envoy.filters.network.http_connection_manager
        config:
          route_config:
            name: local_route
            virtual_hosts: // 主要组成部分:定义虚拟主机,支持多个域名和路由规则。
            - name: backend
              domains: ["*"]
              routes: // 主要组成部分:每个虚拟主机下可以有多个路由规则,包括匹配条件和目标集群。
              - match: { prefix: "/" }
                route:
                  cluster: service_backend

总结:通过 RouteConfiguration 和 RDS,Envoy 可以实现灵活的动态路由配置,支持微服务架构中的复杂流量管理需求。这种动态路由能力使得 Envoy 能够高效地处理流量并适应不断变化的服务环境。

posted @ 2024-11-22 17:18  席超  阅读(20)  评论(0编辑  收藏  举报