Envoy 介绍

发布时间: 更新时间: 总字数:1833 阅读时间:4m 作者: IP上海 分享 网址

Envoy 是一个 L7 代理(L7 proxy)通信总线(communication bus),专为大型的现代 面向服务架构(Service Oriented Architectures, SOA) 而设计。

什么是 Envoy

Envoy 由 云原生计算基金会 (CNCF) 托管。有关哪些公司参与以及 Envoy 在其中扮演何种角色的详细信息,请阅读 CNCF 的**公告**。

该项目源于一种信念:

The network should be transparent to applications. When network and application problems do occur it should be easy to determine the source of the problem.
网络对于应用程序应该是透明的。当网络和应用问题确实发生时,应该很容易确定问题的来源。

在实践中,实现上述目标非常困难。Envoy 试图通过提供以下高级功能来达成这一目标:

进程外架构(Out of process architecture)

Envoy 是一个独立运行的进程,设计用于与每个应用程序服务器并肩运行。所有的 Envoy 实例共同形成一个透明的通信网格,其中每个应用程序都通过 localhost(本地主机) 发送和接收消息,并且对网络拓扑一无所知

进程外架构相比传统的用于服务间通信的库(library) 方法具有两个实质性的优势:

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

L3/L4 过滤器架构

Envoy 的核心是一个 L3/L4 网络代理。可插拔的 过滤器 链机制允许编写过滤器来执行不同的 TCP/UDP 代理任务 并插入到主服务器中。已经编写了过滤器来支持各种任务,例如

HTTP L7 过滤器架构

HTTP 是现代应用架构的关键组成部分,因此 Envoy 支持 一个额外的 HTTP L7 过滤层。HTTP 过滤器可以插入到 HTTP 连接管理子系统 中,执行各种任务,例如

一等的 HTTP/2 支持

在 HTTP 模式下运行时,Envoy 支持 HTTP/1.1HTTP/2。Envoy 可以作为 透明的 HTTP/1.1 到 HTTP/2 代理 双向运行。这意味着任何 HTTP/1.1 和 HTTP/2 客户端和目标服务器的组合都可以桥接。推荐的服务间配置是在所有 Envoy 之间使用 HTTP/2,以创建一个持久连接的网格,请求和响应可以在其上进行多路复用

HTTP/3 支持(目前处于 Alpha 阶段)

1.19.0 版本开始,Envoy 现在支持 HTTP/3 上游和下游,并可以在 HTTP/1.1、HTTP/2 和 HTTP/3 的任意组合之间进行双向转换。

HTTP L7 路由

在 HTTP 模式下运行时,Envoy 支持一个 路由子系统,能够根据 路径、权威机构(authority)、内容类型、运行时 等来路由和重定向请求。此功能在使用 Envoy 作为 前端/边缘代理 时最为有用,但在构建服务间网格时也会被利用。

gRPC 支持

gRPC 是 Google 的一个 RPC 框架,它使用 HTTP/2 或更高版本 作为底层多路复用传输。Envoy 支持 作为 gRPC 请求和响应的路由和负载均衡基础 所需的所有 HTTP/2 功能。这两个系统是高度互补的。

服务发现和动态配置

Envoy 可选择使用一组分层的 动态配置 API 进行集中管理。这些层为 Envoy 提供关于以下方面的动态更新:

  • 后端集群中的主机
  • 后端集群本身
  • HTTP 路由
  • 监听套接字
  • 加密材料

对于更简单的部署,后端主机的发现可以通过 DNS 解析(甚至完全跳过),而更深的配置层则可以由静态配置文件替代。

健康检查

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

高级负载均衡

在分布式系统中,不同组件之间的 负载均衡 是一个复杂的问题。由于 Envoy 是一个独立的代理而不是一个库,它能够在一个地方实现高级负载均衡技术,并让任何应用程序都可以使用它们。目前,Envoy 支持:

前端/边缘代理支持

边缘使用相同的软件具有实质性的优势(可观察性、管理、相同的服务发现和负载均衡算法等)。Envoy 的功能集使其非常适合作为大多数现代 Web 应用程序用例的边缘代理。这包括:

一流的可观察性

如上所述,Envoy 的主要目标是使网络透明。然而,网络层面和应用层面都会出现问题。Envoy 为所有子系统提供了强大的 统计信息支持statsd(以及兼容的提供商)是目前支持的统计信息接收器,尽管接入其他接收器也不困难。统计信息也可以通过 管理端口 查看。Envoy 还通过第三方提供商支持分布式 追踪

扩展

参考

  1. http://github.com/envoyproxy/envoy/
  2. https://www.envoyproxy.io/
  3. https://www.envoyproxy.io/docs/envoy/latest/intro/intro
  4. https://www.envoyproxy.io/docs/envoy/latest/intro/what_is_envoy
  5. https://istio.io/latest/zh/blog/2021/istiomeetups-china-report/IstioMeetupChina-EnvoyPrincipleIntroductionAndOnlineProblemPit.pdf
本文总阅读量 次 本站总访问量 次 本站总访客数
Home Archives Categories Tags Statistics