envoy proxy nginx haproxy等比较

与类似系统的比较

总体而言,我们相信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反向代理功能。与haproxy相比,Envoy提供了以下主要优势作为负载平衡器:

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

AWS ELB 

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

  • 统计信息和日志记录(CloudWatch统计信息延迟并且极其缺乏细节,日志必须从S3中检索并具有固定格式)。
  • 稳定性(使用ELB时偶尔会出现不稳定情况,最终无法调试)。
  • 先进的负载平衡和节点之间的直接连接。Envoy网格通过可变的弹性硬件避免了额外的网络跳跃。负载平衡器可以做出更好的决策并根据区域,金丝雀状态等收集更有趣的统计数据。负载平衡器还支持高级功能,如重试。

AWS最近发布了应用程序负载平衡器产品。该产品将HTTP / 2支持以及基本的HTTP L7请求路由添加到多个后端群集。与Envoy相比,功能集仍然很小,性能和稳定性未知,但显然AWS将在未来继续投资该领域。

SmartStack 

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

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

Finagle

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

  • 通过分布式主动健康检查最终一致的服务发现。
  • 所有度量标准(内存消耗,CPU使用率和P99延迟属性)的性能级别都较好。
  • 超出流程和应用程序不可知的体系结构。Envoy可与任何应用程序堆栈协同工作。

ProxyGenwangle

proxygen是Facebook的高性能C ++ 11 HTTP代理库,写在Finagle之类的称为wangle的C ++库之上。从代码角度来看,Envoy使用与proxygen大部分相同的技术来获得作为HTTP库/代理的高性能。除此之外,这两个项目并没有真正的可比性,因为Envoy是一个完整的自包含服务器,具有大型功能集,而每个项目需要单独构建一个库。

GRPC 

gRPC是一种新的多平台消息传递系统。它使用IDL来描述RPC库,然后为各种不同的语言实现特定于应用程序的运行时。底层传输是HTTP / 2。虽然gRPC很可能有未来实现许多类似Envoy的特性(负载平衡等),但在撰写本文时,各种运行时间都有些不成熟,主要关注序列化/反序列化。我们认为gRPC是Envoy与竞争对手的伙伴。这里描述 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 HTTP / 2反向代理,支持TLS终止,正确支持gRPC代理以及其他各种功能。有了这个说法,我们认为nghttpx是各种代理功能的一个很好的例子,而不是一个强大的生产就绪解决方案。特使的重点更多地针对可观察性,一般操作敏捷性和高级负载平衡功能。

你可能感兴趣的:(中间件)