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是各種代理功能的一個很好的例子,而不是一個強大的生產就緒解決方案。特使的重點更多地集中在可觀察性,一般操作敏捷性和高級負載平衡功能上。
※Envoy 架構概覽(1):術語,線程模型,監聽器和網路(L3/L4)過濾器和HTTP連接管理
TAG:智能時刻 |