Envoy和类似的系统比较

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: Envoy和类似的系统比较

总的来说,我们相信Envoy为现代服务导向架构提供了独特且引人注目的功能。下面我们比较一下Envoy和其他相关的系统。尽管在任何特定的领域(边缘代理,软件负载平衡器,服务消息传递层),特使可能不像下面的一些解决方案那样具有丰富的功能,但是总体而言,没有其他解决方案将相同的整体特征提供到单个自包含的高性能套餐。


注:以下大部分项目正在积极开发中。因此有些信息可能会过时。如果是这种情况,请让我们知道,我们会解决它。


nginx

nginx是规范的现代Web服务器。它支持服务静态内容,HTTP L7反向代理负载均衡,HTTP / 2和许多其他功能。尽管我们认为大多数现代的面向服务的体系结构通常不使用它们,但nginx比Envoy更具有整体特性作为边缘反向代理。与nginx相比,Envoy提供了以下主要优势作为边缘代理:


  • 完整的HTTP / 2透明代理。 Envoy支持下行和上行通信的HTTP / 2。 nginx仅支持HTTP / 2用于下游连接。
  • 自由提供高级负载均衡。只有nginx plus(付费服务器)支持与Envoy类似的高级负载均衡功能。
  • 能够在边缘以及每个服务节点上运行相同的软件。许多基础设施运行nginx和haproxy的混合。从操作的角度来看,每一跳的单一代理解决方案都要简单得多。

HAProxy

haproxy是规范的现代软件负载平衡器。它也支持基本的HTTP反向代理功能。作为负载均衡器,Envoy提供了比haproxy更多的主要优势:


  • HTTP / 2支持。
  • 可插拔的架构。
  • 与远程服务发现服务集成。
  • 与远程全球限速服务集成。
  • 基本上更详细的统计。

AWS ELB

Amazon的ELB是用于EC2应用程序的服务发现和负载平衡的标准解决方案。 Envoy提供了ELB作为负载平衡器和服务发现系统的以下主要优势:


  • 统计和日志记录(CloudWatch的统计数据是延迟的,并且极其缺乏细节,日志必须从S3中检索并且具有固定的格式)。
  • 稳定性(使用ELB时偶尔会出现不稳定情况,最终无法调试)。
  • 先进的负载平衡和节点之间的直接连接。 Envoy网格通过可变的弹性硬件避免了额外的网络跳跃。负载平衡器可以做出更好的决策,并根据区域,金丝雀状态等收集更有趣的统计信息。负载平衡器还支持诸如重试等高级功能。
  • AWS最近发布了应用程序负载均衡器产品。本产品将HTTP / 2支持以及基本HTTP L7请求路由添加到多个后端群集。与Envoy相比,这个功能还是很小的,性能和稳定性是未知的,但显然AWS将来会继续在这个领域进行投资。


SmartStack

SmartStack是一个有趣的解决方案,它提供了额外的haproxy之上的服务发现和健康检查支持。在高层次上,SmartStack与Envoy(out of process架构,应用程序平台不可知论等)具有大部分相同的目标。作为负载平衡器和服务发现软件包,Envoy相对于SmartStack提供了以下主要优势:


  • 与haproxy相比,前面提到的所有优点。
  • 集成的服务发现和主动健康检查。 Envoy在一个单一的高性能包中提供了一切。

Finagle

Finagle是Twitter的Scala / JVM服务,用于服务通信库。 Twitter和许多其他公司主要使用基于JVM的体系结构。它具有许多与Envoy相同的功能,例如服务发现,负载平衡,过滤器等。与Finagle相比,Envoy作为负载平衡器和服务发现软件包提供了以下主要优势:


  • 通过分布式主动健康检查最终一致的服务发现。
  • 所有度量标准(内存消耗,CPU使用率和P99延迟属性)的性能级别都较好。
  • 超出流程和应用程序不可知的架构。特使与任何应用程序堆栈。
  • proxygen和wangle
  • proxygen是Facebook的高性能C ++ 11 HTTP代理库,写在一个叫做wangle的Finagle之类的C ++库之上。从代码角度来看,Envoy使用与proxygen大部分相同的技术来获得作为HTTP库/代理的高性能。除此之外,这两个项目并没有真正的可比性,因为Envoy是一个完整的包含大型功能的独立服务器,而不是每个项目都需要单独构建的库。


GRPC

gRPC是一种新的多平台消息传递系统。它使用IDL来描述RPC库,然后为各种不同的语言实现特定于应用程序的运行时。底层传输是HTTP / 2。尽管gRPC可能有将来实现许多类似于Envoy的特性(负载平衡等)的目标,但是到目前为止,各种运行时并不成熟,主要侧重于序列化/反序列化。我们认为gRPC是特使与竞争对手的伙伴。这里描述了Envoy如何与gRPC集成。


linkerd

linkerd是构建在Netty和Finagle(Scala / JVM)上的独立的开源RPC路由代理。 linkerd提供了许多Finagle的功能,包括延迟感知负载平衡,连接池,断路,重试预算,截止日期,跟踪,细粒度检测以及用于请求级路由的流量路由层。 linkerd提供了一个可插拔的服务发现接口(标准支持Consul和ZooKeeper以及Marathon和Kubernetes API)。


linkerd的内存和CPU要求明显高于Envoy的。与Envoy相比,linkerd提供了极简主义的配置语言,并且明确地不支持热重载,而是依靠动态配置和服务抽象。 linkerd支持HTTP / 1.1,Thrift,ThriftMux,HTTP / 2(实验)和gRPC(实验)。


nghttp2

nghttp2是一个包含几个不同的东西的项目。它主要包含一个实现HTTP / 2协议的库(nghttp2)。 Envoy使用这个库(顶部有一个非常薄的包装)来支持HTTP / 2。该项目还包含一个非常有用的负载测试工具(h2load)以及一个反向代理(nghttpx)。从比较的角度来看,Envoy与nghttpx最为相似。 nghttpx是一个透明的HTTP / 1 HTTP / 2反向代理,支持TLS终止,正确支持gRPC代理以及其他各种功能。有了这个说法,我们认为nghttpx是各种代理功能的一个很好的例子,而不是一个强大的生产就绪解决方案。特使的重点更多地集中在可观察性,一般操作敏捷性和高级负载平衡功能上。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
11月前
|
运维 负载均衡 监控
服务网格技术对比:深入比较Istio、Linkerd和Envoy等服务网格解决方案的优缺点
服务网格技术对比:深入比较Istio、Linkerd和Envoy等服务网格解决方案的优缺点
496 0
|
负载均衡 Kubernetes 网络协议
Istio:xDS协议解析
Istio:xDS协议解析
3706 0
Istio:xDS协议解析
|
1月前
|
Kubernetes 负载均衡 网络协议
Istio的流量管理(概念)
Istio的流量管理(概念)
36 2
|
1月前
|
Prometheus 网络协议 Cloud Native
Istio中的流量配置
Istio中的流量配置
42 1
|
4月前
|
缓存 监控 安全
Istio架构及工作原理
【2月更文挑战第17天】从 Istio 的设计和实现原理可以看出,它是采用模块化设计,并且各个模块之间高度解耦,Proxy 专注于负责服务之间的通信,Pilot 专注于流量控制,Mixer 专注于策略控制以及监控日志功能,而 Citadel 专注于安全。
|
4月前
|
网络协议 Unix 调度
Envoy 监听管理
【2月更文挑战第29天】Envoy使用监听器管理网络请求,支持多个监听器处理不同类型的请求。监听器分为虚拟监听器(需绑定端口和Iptables规则)和真实监听器(处理实际流量,不需绑定端口)。
|
11月前
|
监控 Cloud Native Go
部署Envoy Sidecar代理:演示如何将Envoy作为Sidecar代理注入到应用容器中
部署Envoy Sidecar代理:演示如何将Envoy作为Sidecar代理注入到应用容器中
115 0
|
Kubernetes Shell iOS开发
Istio 网络:深入了解流量和架构
像 Istio 这样的服务网格项目为我们的架构引入了许多功能和优势,包括更安全地管理集群微服务之间的流量、服务发现、请求路由以及服务之间的可靠通信。
229 0
|
Prometheus Kubernetes Cloud Native
一文带你了解 Istio 流量路由
当我们尝试在 Kubernetes 中使用 NodePort 或 LoadBalancer 类型的服务设施配置进行通信时,Istio 或许是一个非常流行、新兴的开源服务网格产品,其能够用于通信管理、可观察性、错误处理及安全性等。作为微服务架构体系的一部分,为了无需过多地使用重复的逻辑填充每个微服务代码,我们可以利用 Istio 服务网格在一个地方完成所有这些事情。
151 0
|
负载均衡 Kubernetes Java
【服务网格架构】Envoy和类似的系统比较
【服务网格架构】Envoy和类似的系统比较