Envoy官网笔记

什么是 Envoy — envoy tag-v1.29.1 文档 (envoyproxy.io)

什么是Envoy

Envoy为大型现代面向服务架构设计的L7级代理和通信总线。这个项目诞生于这样的看法:

网络对应用程序应该是透明的。当网络和应用问题发生应该能够被简单的确定问题的源头

在实践中,实现之前所说的目标非常困难。Envoy试图提供以下高级功能来做到这一点:

进程外体系结构:Envoy是一个独立的进程他旨在与每个程序服务运行在一起。所有的Envoy都形成了一个透明的通信网格其中,每个应用程序想向本地发送消息和接收消息,并且不知道网络的拓扑。与传统的库方式进行服务之间的通信相比进程外体系结构有俩个重大的好处

  • Envoy可以和任何语言一起工作。单个Envoy部署可以再Java、C++、Go、PHP、Python 等之间形成网格。面向服务的体系结构使用多种应用程序框架和语言正在变得越来越普遍。Envoy透明的填补了这一缺口。
  • 任何使用过大型面向服务体系架构的人都知道,部署和升级可能非常痛苦。Envoy可以透明地在整个基础设施中快速部署和升级。

L3/L4过滤器架构:在其核心,Envoy是L3/L4网络代理。可插拔的过滤器链机制允许编写过滤器以执行不同的TCP、UDP代理任务,并将其插入主服务器。已经编写了支持各种任务的过滤器如TCP proxy, UDP proxy, HTTP proxy, TLS client certificate authentication, Redis, MongoDB, Postgres,等。

HTTP L7过滤器架构:HTTP是现代应用架构的重要组成部分,Envoy支持额外的HTTP L7过滤层。http过滤器能够插入到不同任务的HTTP链接管理系统中如缓存,速率限制,路由转发,等

一流的HTTP/2支持:当在HTTP模式下操作时,Envoy同时支持HTTP1.1和HTTP2。Envoy能够操作透明的在HTTP1.1到HTTP2代理之间进行操作。这意味着任意的HTTP1和HTTP2客户端和服务器组合都可以桥接。建议服务到服务之间配置在所有Envoy之间使用HTTP2来创建一个持久网络连接,请求和响应可以通过网络进行多路传输。

HTTP3支持(目前处于alpha版本)在1.19.0。Envoy支持HTTP3上下游,即在HTTP1.1、HTTP2、HTTP3的任意方向上进行转换。

HTTP L7路由:当在HTTP模式下操作时,envoy支持路由子系统能进行路由和重定向请求根据路径、权限、内容类型、运行时的值等。当使用Envoy作为前端/边缘代理时此功能最有用,但是在构建服务网格时也会用到此功能。

gRPC支持:gRPC是来自谷歌的RPC框架,使用HTTP2,或更高版本作为底层多路传输。Envoy支持作用gRPC请求和响应的路由负载均衡底层所需的所有HTTP2功能。这来个系统是相辅相成的。

服务发现和动态配置:Envoy可选地使用一组分层的动态配置API进行集中管理。这些层为envoy提供有关以下的动态更新:后端集群中的主机,后端集群本身,HTTP路由,监听套接字和加密材料。为了更简单的部署,后端主机可以通过DNS解析完成(甚至可以完全跳过),其他层由静态配置文件替换。

健康检查:推荐的构建方式是将服务发现视为最终一致的过程,Envoy包含了一个健康检查子系统,该子系统可以选择性执行上游服务集群主动健康检查。然后Envoy使用服务发现和健康检查信息的联合来确定健康的负载均衡目标。Envoy还支持通过异常值检测子系统进行被动健康检查。

高级负载均衡:分布式系统重不同组件之间发负载均衡是一个复杂的问题。因为Envoy是一个独立的的代理而不是库。他能在一个地方够使用高级负载均衡技术并且在任何应用程序都可以访问这些技术。目前envoy包括支持了自动重试,断路器,通过外部速率限制服务进行全局速率限制,请求镜像和异常值检测。计划在未来为请求竞争提供支持。

前端和边缘代理支持:在边缘使用相同的软件有很大的好处(客观测性、管理、想通服务发现和负载均衡算法等)。envoy有一个功能集,非常适合作作为大多数现代WEb应用程序用例的边缘代理。这包括TLS终端,HTTP/1.1HTTP/2和HTTP/3支持,以及HTTPL7路由。

一流的可观测性:综上所述,Envoy的主要目标是让网络变得透明,然而,问题同时出现在网络級別和应用程序級別。envoy包含了所有子系统的强大支持。statsd(和兼容的提供程序)是当前支持的统计接收器,尽管插入不同的统计接收器并不困难。还可以通过管理端口查看统计信息。Envoy还支持通过第三方提供商进行分布式跟踪。

请求的生命周期

下面我们介绍通过代理传递的请求生命周期中的事件。我们首先描述Envoy如何适应请求的路径,然后描述请求从下游到达Envoy代理后发生内部的事件。我们跟着请求直到对应的上行和响应路径。

术语

Envoy在其代码库和文档中使用了以下术语:

  • 集群Cluster:具有一组断点的逻辑服务,Envoy将请求转发到这些端点。
  • 下游Downstream:连接到Envoy的实体。他们可能是一个本地应用(在sidecar模式中)或者网络节点在不是sidecar模式中,他们是远程客户端。
  • 终端Endpoints:实现逻辑服务的网络节点。它们被分组为集群。集群中的端点位于Envoy代理的上游。
  • 过滤器Filter:链接或请求处理管道中的一个模块,提供请求处理的某些方面。Unix的一个类比是小型应用程序(filters)与Unix管道(过滤器链)的组合。
  • 过滤器链:一系列过滤器
  • 监听器:负责绑定到IP/端口的Envoy模块,接受新的TCP链接(或UDP数据报)并协调面向下游的请求处理。
  • 上游Upstream:Envoy在转发服务请求时连接到的终端(网络节点)。他们可能是一个本地应用(在sidecar模式中)或者网络节点在不是sidecar模式中,他们是远程客户端。

网络拓扑

请求如何通过网络中的组件(包括Envoy)取决于网络的拓扑结构。Envoy可以用于各种各样的网络拓扑。下面重点介绍Envoy的内部运作,但在本节中我们将简要介绍Envoy与网络其他部分的关系。

Envoy起源于一个服务网格sidecar代理。从应用程序中分界处负载均衡,路由,客观测下,安全性,和服务发现。在服务网格模型中,请求通过Envoys作为网关流到网络。请求通过入口或出口侦听器到达Envoy。

  • 入口监听器:接受来自在网格中其他节点的请求同事转发他们到本地应用。来自本地应用程序的响应通过Envoy流回下游。
  • 出口监听器:接受来自本地应用程序的请求,并将其转发到网络中的其他节点。这个接受节点通常也会运行Envoy,并通过其入口侦听器接受请求。

Envoy用于服务网格外的各种配置。举个例子,它还可以充当内部负载均衡器。

或者作为网络边缘上的入口/出口代理:

在实践中,通常使用这些功能的混合,其中Envoy在服务网格、边缘和内部负载均衡器中具有功能。一个请求路径可以遍历多个特使。

Envoy可以配置在多层拓扑中以实现可扩展性和可靠性,请求首先通过边缘Envoy,然后通过第二Envoy层:

再所有上述情况下,请求将通过TCP,UDP或Unix域套接字从下游到达特定的Envoy。Envoy将通过TCP、UDP或Unix域套接字向上游转发请求。下面我们将重点介绍一个Envoy代理。

懒得翻译了ORZ,大家自己看吧

请求的生命周期 — envoy tag-v1.29.1 文档 (envoyproxy.io)

Last modification:February 17, 2024
如果觉得我的文章对你有用,请随意赞赏