总体来说,Envoy为现代服务架构提供了独特而引人注目的功能集合,充分扮演了一个面向应用程序或服务的代理角色。Envoy通过代理也促进了应用程序之间的相互通信,并解决了可靠性和可观察性问题。下面我们将Envoy与其他相关系统进行比较。虽然在某些特定领域,Envoy可能不像以下某些解决方案那样功能丰富,但总的来说,没有其他解决方案可以像Envoy这样提供一套功能完备且高性能的解决方案。下面主要选择几个代表性软件做对比介绍。
1.Finagle
Finagle是Twitter的基于Scala/JVM开发的服务通信库,在Twitter和其他主要基于JVM架构的很多公司中得到广泛使用。它具有许多与Envoy相同的功能,例如服务发现、负载平衡、过滤器等。然而,Envoy在负载均衡器和服务发现方面提供了以下优势:
·通过分布式主动健康检查最终实现一致的服务发现。
·所有指标(内存消耗、CPU使用率和P99延迟属性)的性能都提高了一个数量级。
·与进程无关的架构,对应用平台的不可知性的架构,使得Envoy适用于任何应用程序堆栈。
2.Linkerd
Linkerd是一个独立的开源的RPC路由代理,构建于Netty和Finagle(Scala/JVM)之上。Linkerd提供了许多类似于Finagle的特性,包括对延时感知的负载均衡、连接池管理、熔断器、重试、超时、追踪、细粒度的检测,以及用于请求的流量路由层。但值得注意的是,Linkerd的内存消耗以及CPU的要求都远远高于Envoy。与Envoy相比,Linkerd仅仅提供了一个最小可用的配置语言,并且不支持热重新加载,而是依赖于动态配置和服务抽象。
3.Nginx
Nginx是一个经典的现代Web服务器,支持静态内容展示、HTTP七层反向代理负载均衡、HTTP/2以及其他许多特性。在边缘代理方面,Envoy提供了以下主要优势:
·完整的HTTP/2透明代理。Envoy支持包括HTTP/2上游连接以及下游连接在内的双向通信。而Nginx仅仅支持HTTP/2下游连接。
·免费的高级负载功能。而在Nginx的版本中,只有付费的Nginx Plus服务器才能提供类同于Envoy的高级负载功能。
·能够在边缘以及每个服务节点上运行相同的软件。许多基础设施都运行Nginx和haproxy。从运营的角度来看,一个独立的代理解决方案会更有利于后续的运维维护。
总之,其他代理通常从它们的起源目标发展为负载均衡器和Web服务器,转变为功能更强、性能更高的代理。其中一些社区发展并没有那么快,或者改为了封闭源代码运营方式,并且需要一段时间才能发展到可以在应用程序之间使用的程度。Envoy与这些其他代理相比具备如下优势:
·开放社区。
·为维护和扩展而构建的模块化代码库。
·HTTP/2上游和下游支持。
·单实例能够提供较高性能。
·配置重新热加载/动态配置。
·自身无状态,能够方便扩缩容。
·提供插件扩展机制,同时内置了非常丰富的插件可以直接使用。