1. Envoy

envoy

Envoy 是一个开源的云原生高性能边缘/中间/服务代理。

Envoy 是专为大型现代 SOA(面向服务架构)架构设计的 L7 代理和通信总线。该项目源于以下理念:网络对应用程序来说应该是透明的。当网络和应用程序出现问题时,应该很容易确定问题的根源

Envoy 最初是在 Lyft 上构建的,是一种高性能 C++ 分布式代理,专为单个服务和应用程序而设计,以及为大型微服务“服务网格”架构设计的通信总线和“通用数据平面”。

基于对 NGINX,HAProxy,硬件负载平衡器和云负载平衡器等解决方案的学习,Envoy与每个应用程序一起运行,并通过与平台无关的方式提供通用功能来抽象化网络。

当基础架构中的所有服务流量都通过 Envoy 网格流动时,通过一致的可观察性,调整整体性能以及在单个位置添加基板功能,即可轻松可视化问题区域。

该项目在 CNCF 托管:

  • CNCF 分层:编排和管理
  • CNCF 分类:服务代理
  • CNCF 成熟度:已毕业

1.1. 产品特性

  • 进程外架构:Envoy 是一个独立进程,设计为伴随每个应用程序服务运行。所有的 Envoy 形成一个透明的通信网格,每个应用程序发送消息到本地主机或从本地主机接收消息,但不知道网络拓扑。
  • 现代 C++11 代码库:Envoy 是用 C++11 编写的。之所以选择(系统)原生代码是因为我们认为像 Envoy 这样的基础架构组件应该尽可能避让(资源争用)。由于在共享云环境中部署以及使用了非常有生产力但不是特别高效的语言(如 PHP、Python、Ruby、Scala 等),现代应用程序开发人员已经难以找出延迟的原因。原生代码通常提供了优秀的延迟属性,不会对已混乱的系统增加额外负担。与用 C 编写的其他原生代码代理的解决方案不同,C++11 具有出色的开发生产力和性能。
  • L3/L4 filter 架构:Envoy 的核心是一个 L3/L4 网络代理。可插入 filter 链机制允许开发人员编写 filter 来执行不同的 TCP 代理任务并将其插入到主体服务中。现在已有很多用来支持各种任务的 filter,如原始 TCP 代理、HTTP 代理、TLS 客户端证书认证等。
  • HTTP L7 filter 架构: HTTP 是现代应用程序体系结构的关键组件,Envoy 支持额外的 HTTP L7 filter 层。可以将 HTTP filter 插入执行不同任务的 HTTP 连接管理子系统,例如缓存,速率限制,路由/转发,嗅探 Amazon 的 DynamoDB 等等。
  • 顶级 HTTP/2 支持: 当以 HTTP 模式运行时,Envoy 同时支持 HTTP/1.1 和 HTTP/2。Envoy 可以作为 HTTP/1.1 和 HTTP/2 之间的双向透明代理。这意味着它可以桥接 HTTP/1.1 和 HTTP/2 客户端以及目标服务器的任意组合。建议配置所有服务之间的 Envoy 使用 HTTP/2 来创建持久连接的网格,以便可以复用请求和响应。随着协议的逐步淘汰,Envoy 将不支持 SPDY。
  • HTTP L7 路由:当以 HTTP 模式运行时,Envoy 支持一种路由子系统,能够根据路径、权限、内容类型、运行时及参数值等对请求进行路由和重定向。这项功能在将 Envoy 用作前端/边缘代理时非常有用,同时,在构建服务网格时也会使用此功能。
  • gRPC支持:gRPC 是一个来自 Google 的 RPC 框架,它使用 HTTP/2 作为底层多路复用传输协议。Envoy 支持被 gRPC 请求和响应的作为路由和负载均衡底层的所有 HTTP/2 功能。这两个系统是非常互补的。
  • MongoDB L7 支持:MongoDB 是一种用于现代 Web 应用程序的流行数据库。Envoy 支持对 MongoDB 连接进行 L7 嗅探、统计和日志记录。
  • DynamoDB L7 支持:DynamoDB 是亚马逊的托管键/值 NOSQL 数据存储。Envoy 支持对 DynamoDB 连接进行 L7 嗅探和统计。
  • 服务发现和动态配置: Envoy 可以选择使用动态配置 API 的分层集合实现集中管理。这些层为Envoy 提供了以下内容的动态更新:后端集群内的主机、后端集群本身、HTTP 路由、监听套接字和加密材料。对于更简单的部署,可以通过DNS 解析(甚至完全跳过)发现后端主机,静态配置文件将替代更深的层。
  • 健康检查:推荐使用将服务发现视为最终一致的过程的方式来建立 Envoy 网格。Envoy 包含了一个健康检查子系统,可以选择对上游服务集群执行主动健康检查。然后,Envoy 联合使用服务发现和健康检查信息来确定健康的负载均衡目标。Envoy 还通过异常检测子系统支持被动健康检查。
  • 高级负载均衡:负载均衡是分布式系统中不同组件之间的一个复杂问题。由于 Envoy 是一个独立代理而不是库,因此可以独立实现高级负载均衡以供任何应用程序访问。目前,Envoy 支持自动重试 、熔断、通过外部速率限制服务的全局速率限制、请求映射和异常点检测。未来还计划支持请求竞争。
  • 前端/边缘代理支持:尽管 Envoy 主要设计用来作为一个服务间的通信系统,但在系统边缘使用相同的软件也是大有好处的(可观察性、管理、相同的服务发现和负载均衡算法等)。Envoy 包含足够多的功能,使其可作为大多数现代 Web 应用程序的边缘代理。这包括 TLS 终止、HTTP/1.1 和 HTTP/2 支持,以及 HTTP L7 路由。
  • 最佳的可观察性: 如上所述,Envoy 的主要目标是使网络透明。但是,问题在网络层面和应用层面都可能会出现。Envoy 包含对所有子系统强大的统计功能支持。目前支持 statsd(和兼容的提供程序)作为统计信息接收器,但是插入不同的接收器并不困难。统计信息也可以通过管理端口查看。Envoy 还通过第三方提供商支持分布式追踪。

1.2. 适用场景

  • 服务网格(ServiceMesh)数据面代理
  • 云原生 API 网关
  • L3/L4/L7 代理

1.3. 网站/代码

Copyright © 温玉 2021 | 浙ICP备2020032454号 all right reserved,powered by Gitbook该文件修订时间: 2025-02-08 11:34:15

results matching ""

    No results matching ""