天天看點

envoy 特性

文章目錄

  • ​​什麼是envoy?​​
  • ​​程序外架構​​
  • ​​L3/L4 濾波器架構​​
  • ​​L7 濾波器架構​​
  • ​​一流的 HTTP/2 支援​​
  • ​​HTTP 路由​​
  • ​​gRPC 就緒​​
  • ​​服務發現和動态配置​​
  • ​​健康檢查​​
  • ​​進階負載平衡​​
  • ​​前端/邊緣代理支援​​
  • ​​TLS 終止​​
  • ​​一流的可觀察性​​
  • ​​HTTP/3(阿爾法)​​
envoy 特性
envoy 特性
envoy 特性
envoy 特性
envoy 特性
envoy 特性
envoy 特性
envoy 特性
envoy 特性
envoy 特性
envoy 特性
envoy 特性
envoy 特性

什麼是envoy?

該行業正在轉向微服務架構和雲原生解決方案。随着使用不同技術開發的成百上千的微服務,這些系統可能變得複雜且難以調試。

作為應用程式開發人員,您正在考慮業務邏輯——購買産品或生成發票。但是,任何類似的業務邏輯都會導緻不同服務之間的多次服務調用。每個服務都可能有其逾時、重試邏輯和其他可能需要調整或微調的特定于網絡的代碼。

如果在任何時候初始請求失敗,将很難通過多個服務對其進行跟蹤,查明失敗發生的位置,并了解失敗的原因。網絡不可靠嗎?我們是否需要調整重試或逾時?還是業務邏輯問題或錯誤?

增加調試複雜性的是服務可能使用不一緻的跟蹤和日志記錄機制。這些問題使得很難确定問題、問題發生的位置以及如何解決問題。如果您是應用程式開發人員并且調試網絡問題超出了您的核心技能範圍,則尤其如此。

使調試這些網絡問題更容易的是将網絡問題排除在應用程式堆棧之外,并讓另一個元件處理網絡部分。這就是 Envoy 可以做到的。

在其部署模式之一中,我們在每個服務執行個體旁邊運作一個 Envoy 執行個體。這種類型的部署也稱為邊車部署。Envoy 可以很好地使用的另一種模式是edge-proxy,它用于建構 API 網關。

Envoy 和應用程式形成一個原子實體,但仍然是獨立的程序。應用程式處理業務邏輯,Envoy 處理網絡問題。

如果發生故障,分離關注點可以更容易地确定故障是來自應用程式還是來自網絡。

為了幫助進行網絡調試,Envoy 提供了以下進階功能:

程序外架構

Envoy 是一個獨立的程序,旨在與每個應用程式一起運作——我們之前提到的 ​

​Sidecar​

​ 部署模式。集中配置的 Envoy 集合形成了一個透明的網格。

路由和其他網絡功能的責任被推給了 Envoy。應用程式将請求發送到虛拟位址 (localhost) 而不是真實位址(如公共 IP 位址或主機名),不知道網絡拓撲。應用程式不再承擔路由的責任,因為該任務被委派給外部程序。

網絡配置不是讓應用程式管理其網絡配置,而是在 Envoy 級别獨立于應用程式進行管理。在組織中,這可以讓應用程式開發人員專注于應用程式的業務邏輯。

Envoy 适用于任何程式設計語言。您可以使用 Go、Java、C++ 或任何其他語言編寫應用程式,Envoy 可以彌合它們之間的差距。無論應用程式的程式設計語言或它們運作的作業系統如何,它的行為都是相同的。

Envoy 還可以在整個基礎架構中透明地部署和更新。這與為每個單獨的應用程式部署庫更新相比,這可能非常痛苦和耗時。

程序外架構是有益的,因為它為我們提供了跨程式設計語言/應用程式堆棧的一緻性,并且我們免費獲得了獨立的生命周期和所有 Envoy 網絡功能,而無需在每個應用程式中單獨處理它們。

L3/L4 濾波器架構

Envoy 是一個 L3/L4 網絡代理,它根據 IP 位址和 TCP 或 UDP 端口做出決策。它具有可插入的過濾器鍊來編寫過濾器以執行不同的 TCP/UDP 任務。

過濾器鍊來自 shell 思想,其中一個操作的輸出通過管道傳輸到另一個操作。例如:

ls -l | grep "Envoy*.cc" | wc -l      

Envoy 可以通過堆疊形成過濾器鍊的所需過濾器來建構邏輯和行為。存在許多過濾器并支援諸如原始 TCP 代理、UDP 代理、HTTP 代理、TLS 用戶端證書認證等任務。Envoy 也是可擴充的,我們可以編寫我們的過濾器。

L7 濾波器架構

Envoy 支援額外的 HTTP L7 過濾層。我們可以将 HTTP 過濾器插入到 HTTP 連接配接管理子系統中,該子系統執行不同的任務,例如緩沖、速率限制、路由/轉發等。

一流的 HTTP/2 支援

Envoy 同時支援 HTTP/1.1 和 HTTP/2,并且可以在兩個方向上作為透明的 HTTP/1.1 到 HTTP/2 代理運作。這意味着可以橋接 HTTP/1.1 和 HTTP/2 用戶端和目标伺服器的任意組合。即使您的遺留應用程式不通過 HTTP/2 進行通信,如果您将它們與 Envoy 代理一起部署,它們最終也會通過 HTTP/2 進行通信。

推薦的服務到服務配置在所有 Envoy 之間使用 HTTP/2 來建立一個持久連接配接的網格,請求和響應可以多路複用。

HTTP 路由

在 HTTP 模式下運作并使用 REST 時,Envoy 支援路由子系統,該子系統能夠根據路徑、權限、内容類型和運作時值路由和重定向請求。此功能在使用 Envoy 作為前端/邊緣代理來建構 API 網關時非常有用,并在建構服務網格(sidecar 部署模式)時加以利用。

gRPC 就緒

Envoy 支援用作 gRPC 請求和響應的路由和負載平衡基礎所需的所有 HTTP/2 功能。

gRPC 是一個開源的遠端過程調用 (RPC) 系統,它使用 HTTP/2 進行傳輸和協定緩沖區作為接口描述語言 (IDL),并提供身份驗證、雙向流和流控制、阻塞/非阻塞等功能綁定,取消和逾時。

服務發現和動态配置

我們可以使用描述服務以及如何與它們通信的靜态配置檔案來配置 Envoy。

對于靜态配置 Envoy 不切實際的進階場景,Envoy 支援動态配置并在運作時自動重新加載配置。一組稱為 xDS 的發現服務可用于通過網絡動态配置 Envoy,并提供有關主機、叢集 HTTP 路由、偵聽套接字和加密材料的 Envoy 資訊。屆時,Envoy 将嘗試優雅地耗盡所有連接配接。

健康檢查

與負載平衡器相關的一項功能是将流量僅路由到健康且可用的上遊服務。Envoy 支援健康檢查子系統,該子系統執行上遊服務叢集的主動健康檢查。Envoy 然後使用服務發現和健康檢查資訊的聯合來确定健康的負載平衡目标。Envoy 還可以通過異常值檢測子系統支援被動健康檢查。

進階負載平衡

Envoy 支援自動重試、斷路、全局速率限制(使用外部速率限制服務)、請求影子(或流量鏡像)、異常值檢測和請求對沖。

前端/邊緣代理支援

Envoy 具有使其非常适合作為邊緣代理運作的功能。此類功能包括 TLS 終止、HTTP/1.1、HTTP/2 和 HTTP/3 支援,以及 HTTP L7 路由。

TLS 終止

應用程式和代理的解耦啟用了網格部署模型中所有服務之間的 TLS 終止(互相 TLS)。

一流的可觀察性

HTTP/3(阿爾法)