迁移到分布式架构时出现的大多数操作问题最终都基于两个方面:网络和可观察性。与单个单片应用程序相比,网络和调试一组交织在一起的分布式服务只是一个数量级更大的问题。
envoy与每个应用程序一起运行,并通过以平台无关的方式提供通用功能来抽象网络。当基础设施中的所有服务流量通过Envoy网格流动时,通过一致的可观察性,调整整体性能以及在单个位置添加基板功能,可以轻松地显示问题区域。
背景
Envoy 最初是在Lyft构建的,是一种高性能C++分布式代理,专为单一服务和应用而设计,以及为大型微服务“服务网格”架构设计的通信总线和“通用数据平面”。
Envoy与每个应用程序一起运行,并通过以平台无关的方式提供通用功能来抽象网络。所有的Envoys形成一个透明的通信网格,其中每个应用程序向localhost发送消息和从localhost接收消息,并且不知道网络拓扑。
当基础设施中的所有服务流量通过Envoy网格流动时,通过一致的可观察性,调整整体性能以及在单个位置添加基板功能,可以轻松地显示问题区域。
Envoy特性
- 低耦合:Envoy是一款独立的高性能服务器,内存占用少。它与任何应用程序语言或框架一起运行。
- HTTP2和GRPC支持:Envoy为传入和传出连接提供HTTP/2和gRPC的一流支持。它是一个透明的HTTP/1.1到HTTP/2代理。
- 高级负载平衡:Envoy支持高级负载均衡功能,包括自动重试,断路,全局速率限制,请求阴影,区域本地负载平衡等。
- 提供强大的API:Envoy提供强大的API,用于动态管理其配置。
- 可观测性:在L7层流量的深度可观察性,分布式跟踪的本机支持以及MongoDB,DynamoDB等的线级可观察性。
其他方面
- 流程外架构
- Envoy适用于任何应用程序语言(面向服务的体系结构使用多个应用程序框架和语言变得越来越普遍。特使透明地弥合了这一差距。)
- 任何使用大型面向服务架构的人都知道,部署库升级可能会非常痛苦。
- 现代C++11代码库
- L3/L4过滤器架构
- L3/L4过滤器架构:可插入的过滤器链机制允许编写过滤器以执行不同的TCP代理任务并插入主服务器。(TCP代理, HTTP代理,TLS客户端证书身份验证)
- HTTP L7过滤器架构
- 支持额外的HTTP L7过滤器层。(如缓冲,速率限制,路由/转发,嗅探亚马逊的DynamoDB等)
- 支持HTTP/1.1和HTTP/2,可以在两个方向上作为透明的HTTP/1.1到HTTP/2代理运行
- HTTP/2支持
- 能够根据路径,权限,内容类型,运行时值等路由和重定向请求
- gRPC支持
- MongoDB L7支持
- MongoDB是现代Web应用程序中使用的流行数据库,Envoy支持L7嗅探,统计生成和MongoDB连接的日志记录。
- DynamoDB L7支持
- DynamoDB是亚马逊的托管密钥/值NOSQL数据存储。Envoy支持为DynamoDB连接进行L7嗅探和统计生成。
- 服务发现和动态配置
- 健康检查
- 高级负载平衡
- 分布式系统中不同组件之间的负载平衡是一个复杂的问题。因为Envoy是一个自包含代理而不是库,所以它能够在一个地方实现高级负载平衡技术,并使任何应用程序都可以访问它们。( 请求阴影和 异常值检测支持自动重试,断电, 全局速率限制)
- 前端/边缘代理支持
- 虽然Envoy主要设计为服务通信系统的服务,但在边缘使用相同的软件(可观察性,管理,相同的服务发现和负载平衡算法等)是有好处的。
- 边缘代理:包括TLS终止,HTTP/1.1和HTTP/2 支持,以及HTTP L7路由。
- 可观察性
- Envoy的主要目标是使网络透明化
- 在网络级别和应用程序级别都会出现问题,Envoy为所有子系统提供强大的统计支持,支持(statsd、通过第三方)
Envoy设计目标
虽然Envoy绝对不是很慢(我们花了相当多的时间优化某些快速路径),但代码编写成模块化且易于测试,而不是针对最大可能的绝对值性能。
我们认为,这是一种更有效的时间使用,因为典型的部署将与语言和运行时相比慢很多倍,并且内存使用量会大很多倍。
Envoy架构
模块涉及
- Listeners:监听器
- Listeners
- Listener filters
- Network (L3/L4) filters
- TCP proxy
- HTTP:
- HTTP connection management
- HTTP filters
- HTTP routing
- WebSocket and HTTP upgrades
- HTTP dynamic forward proxy
- Upstream clusters:
- Cluster manager
- Service discovery
- Health checking
- Connection pooling
- Load Balancing
- Outlier detection
- Circuit breaking
- Observability:
- Statistics
- Access logging
- Tracing
- Security:
- TLS
- External Authorization:认证
- Role Based Access Control:RBAC
- Operations & configuration
- Dynamic configuration
- Initialization
- Draining
- Runtime configuration
- Hot restart
- Overload manager
- Other features
- Global rate limiting
- Scripting
- IP Transparency
- Other protocols
- gRPC
- MongoDB
- DynamoDB
- Redis
- Advanced
- Sharing data between filters