| 阅读 | 共 2121 字,阅读约
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
- 外部跟踪服务作为第三方插件