| 阅读 |,阅读约 5 分钟
| 复制链接:

Envoy介绍

本文摘自 这里,记录的学习笔记,如果阅读,建议阅读原始文稿。

Envoy是什么

对比nginx

  • nginx缺乏有效的热变更机制
  • nginx缺乏很好的可观察性
  • nginx很多微服务功能需要买 nginx plus 才有

核心功能

  • 非侵入式架构
  • C++11实现,性能优越
  • L3/L4过滤器架构
  • http L7过滤器架构
  • http2作为一等公民
  • gRPC支持
  • 服务发现
  • 健康检查
  • 高级负载均衡
  • 追踪
  • 统计监控
  • 动态配置

架构概览

介绍

术语

  • 主机(Host):能够进行网络通信的实体,是一个逻辑概念,一块物理硬件可能包括多个主机,只要他们是可独立寻址的。
  • 下游(Downstream):下游主机连接到envoy,发送请求并接受响应
  • 上游(Upstream):上游主机接收来自envoy的连接和请求,并返回响应
  • 监听器(Listener):被命名的网络地址(如端口、套接字等),它可以被下游客户端连接。envoy 给下游客户端暴露多个监听器来连接
  • 集群(Cluster):指envoy连接到的逻辑上相同的一组上游主机。envoy通过服务发现来发现集群的成员,通过负载均衡决定将请求路由到哪个集群成员
  • 网格(Mesh):一组协调提供一致网络拓扑的主机。envoy网格是一组envoy代理,构成分布式消息传递的基础
  • 运行时配置(Runtime configuration):外置实时配置系统与envoy一起部署。可以更改配置设置来影响运行,而无需重启envoy

线程模型

envoy使用单进程,多线程架构。主线程协调任务,多个worker线程处理监听、过滤、转发。一个连接的生命周期被绑定在一个worker线程上,使得enovy类似于单线程

监听器

监听器

envoy支持单个进程中配置任意数量的监听器。envoy同时支持tcp和udp监听器

TCP监听器:
  • 每个监听器都独立配置了多个过滤器链,根据匹配条件选择某个过滤器链。
  • 过滤器链由多个网络过滤器组成
  • 监听器还可以配置一些监听过滤器,这些过滤器在网络过滤器之前处理
  • 还可以通过监听器服务发现(LDS)动态获取监听器
UDP监听器:
  • Envoy 还支持 UDP 监听器和 UDP 监听过滤器
  • 每个工作线程都会实例化一次 UDP 监听过滤器,并且 UDP 监听过滤器对于工作线程来讲是全局可见的
  • 每个工作线程监听端口接收到的 UDP 数据报文由监听过滤器处理

监听器过滤器

  • 监听器过滤器可以用于操作元数据,主要目的是更加方便的添加系统集成功能,而无需更改envoy的核心功能,并使彼此之间交互更明确。

  • 这些过滤器是在新接收的套接字上操作的。可停止链中的过滤器并继续执行后续的过滤器。它允许去运作更复杂的业务场景,例如调用 限速服务]等

网络过滤器

网络层(L3/L4)过滤器构成了envoy连接处理的核心,过滤器允许混合不同的过滤器组合,并匹配和附加到给定的监听器。包括三种不同的网络过滤器:

  • 读取:当envoy从下游连接接收数据时,会调用读取过滤器
  • 写入:当envoy向下游发送数据时,会调用写入过滤器
  • 读取/写入:上述两种情况

过滤器最终会对原始字节和少量连接事件进行操作(比如 TLS 握手完成、本地或远程断开连接)。

TCP代理

由于 Envoy 本质上是一个 L3/L4 服务器,因此它很容易实现基本的 L3/L4 网络代理功能。 TCP 代理过滤器可以在下游客户端和上游集群之间进行最基本的 1:1 网络连接代理。

UDP代理

Envoy 通过 UDP 代理监听器 filter支持 UDP 代理。

HTTP

Http连接管理

envoy内置了一个叫 http管理器的网络层过滤器,此过滤器功能如下:

  • 将原始字节转换为http协议的消息和事件
  • 处理http连接和请求的通用功能:访问日志、请求id生成与追踪、请求响应头操作、统计

Http过滤器

envoy支持连接管理器中的http层过滤器,可以开发过滤器处理http层的消息,http过滤器有3种类型:

  • 解码器:用于链接管理器解码部分请求流
  • 编码器:用于链接管理器编码部分响应流
  • 解码器/编码器:上述两种情况

Http路由

envoy包含一个用来执行高级路由任务的 HTTP 路由过滤器

Http升级

Http动态转发代理

上游集群

集群管理器

  • Envoy集群管理器管理所有配置的上游集群,可以任意数量的、独立配置的上游集群
  • 获取集群的方式可以是静态配置,也可以是动态配置(通过集群发现服务CDS api动态获取)
  • 动态集群获取允许将更多配置存储在中央配置服务器中,这样就可以减少重启 Envoy 和重新分配配置的次数。

服务发现

在envoy配置中定义了一个上游集群时,envoy需要知道如何解析集群的成员,这被称为服务发现。

动态的服务发现机制:EDS(endpoint discovery service),是一个基于grpc或restful json的xDS管理服务器。

可观察性

统计

envoy的主要目标之一是使网络易于理解,envoy根据不同配置生成大量统计数据,包括三类:

  • Downstream:传入的连接、请求
  • Upstream:传出的连接、请求
  • Server:envoy服务器实例工作方式相关,如运行时间、分配内存等

日志

追踪

envoy支持三个系统范围内的追踪的特性:

  • 生成 Request ID:填充 x-request-id 的 http 请求头
  • 客户端跟踪id连接:x-client-trace-id
  • 集成外部跟踪服务:
    • 基于代码级别的外部跟踪服务:zipkin、jaeger、datadog
    • 外部跟踪服务作为第三方插件

安全

操作与配置

请求的生命周期

部署类型