Envoy基本概念
Downstream & Upstream
downstream/upstream与nginx中的上下游概念一致。下游(downstream)可以理解为envoy的客户端,下游主机连接到 Envoy,发送请求并接收响应;上游(upstream)则可以理解为envoy的服务端,上游主机接收来自 Envoy 的连接和请求,并返回响应。
Cluster
集群(cluster)是指 Envoy 连接到的逻辑上相似的一组上游(upstream)集合。Envoy 通过服务发现来发现集群的成员;通过主动健康检查来确定集群成员的健康状态;通过负载均衡策略决定将请求路由到哪个集群成员。
Endpoint
端点(Endpoint)来表示一个应用实例,对应一个IP+Port的组合。
Listener
监听器(listener)是可以由下游客户端(downstream)连接的命名网络位置(例如,端口、unix domain socket等)。Envoy 暴露一个或者多个监听器给下游主机连接。在Envoy中,Listener可以绑定到端口上直接对外服务,也可以不绑定到端口上,而是接收其他listener转发的请求。一般是每台主机运行一个 Envoy,使用单进程运行,但是每个进程中可以启动任意数量的 Listener(监听器),目前只监听 TCP,每个监听器都独立配置一定数量的(L3/L4)网络过滤器。Listenter 也可以通过 Listener Discovery Service(LDS)动态获取。
Filter
envoy中的插件概念,主要可以分为几种:
Listener Filter:Listener Filter在连接建立之后,首先被执行处理,但是由于Listener Filter只能获得极少数的信息(remote address),所以在此进行的操作极少。
Network Filter:Network Filter是在Listener Filter处理完成之后开始执行的插件。其工作在四层,Network Filter可以获取相对更加丰富的信息,但是也非常有限。Network Filter是envoy管理各种协议和流量的基础,通过扩展Network Filter,可以实现envoy对各种不同类型流量的治理,如Dubbo、redis、MQ等等。
在所有的四层插件之中,HttpConnectionManager负责处理HTTP协议的四层流量。该插件是Envoy强大的能力的基础,可以说是整个Envoy中最为重要的插件。
Http Filter: Http Filter是HttpConnectionManager插件下的一系列子插件,HttpConnectionManager插件在完成HTTP数据解析之后,会依次调用Http Filter提供的接口,对HTTP数据做进一步处理(如替换header、限流、错误注入、缓存等等)。Envoy丰富而强大的功能,很多都是依赖Http Filter插件来实现。大部分情况下,在对Envoy做扩展增强时,也是通过扩展Http Filter来做到。
ROUTER是HttpConnectionManager不可缺少的一个插件,是HTTP路由的基础,所有的HTTP请求都最终由Router插件向上游服务发送。Router支持常见的路由匹配(前缀匹配、精确匹配、正则匹配)、前缀重写、重定向、直接返回、分流、header添加与移除等等。
Access log filters: 对access log做一些个性化定制处理。
Filter-Chains
从 socket 中收取的请求先经过 listener_filters处理,然后再由 filter_chains 处理。每个插件就像是链条上的小铜球,所以之后的 filter 称为 Filter-Chains。
XDS
xDS 协议是 “X Discovery Service”的简写,这里的 “X” 表示它不是指具体的某个协议,是一组基于不同数据源的服务发现协议的总称,包括 CDS、LDS、EDS、RDS 和 SDS 等。客户端可以通过多种方式获取数据资源,比如监听指定文件、订阅 gRPC stream 以及轮询相应的 REST API 等。
服务简写 | 全称 | 描述 |
---|---|---|
LDS | Listener Discovery Service | 监听器发现服务 |
RDS | Route Discovery Service | 路由发现服务 |
CDS | Cluster Discovery Service | 集群发现服务 |
EDS | Endpoint Discovery Service | 集群成员发现服务 |
SDS | Service Discovery Service | v1 时的集群成员发现服务,后改名为 EDS |
ADS | Aggregated Discovery Service | 聚合发现服务 |
HDS | Health Discovery Service | 健康度发现服务 |
SDS | Secret Discovery Service | 密钥发现服务 |
MS | Metric Service | 指标发现服务 |
RLS | Rate Limit Service | 限流发现服务 |
xDS | 以上各种 API 的统称 |
WebAssembly
原本 WASM (WebAssembly)作为前端技术,只被嵌入在浏览器内核中,用于加速 Web 应用。但是 Envoy社区提出将 WASM 技术引入到后端代理中,使得 WASM 的种种优异特性也能够为 API 网关,为 Service Mesh 编写插件,增强其可扩展性。
data-plane-api
github传送门,定义了envoy 的 REST API 和配置下发时使用的通信协议 xDS REST and gRPC protocol
go-control-plane
github传送门, envoy提供的控制面开发框架,使用该框架可以快速开发一个控制平面(也就是 xDS 服务),框架已经实现了通信过程,不需要自行实现通信协议。