您的位置:首頁>正文

服務網格:什麼是Envoy(特使)

Envoy是專為大型現代服務導向架構設計的L7代理和通訊匯流排。 該項目源于以下信念:

網路應該對應用程式是透明的。 當網路和應用程式出現問題時,

應該很容易確定問題的根源。

在實踐中, 實現上述目標是非常困難的。 Envoy試圖通過提供以下高級功能來做到這一點:

進程外架構:Envoy是一個獨立的進程, 旨在與每個應用程式伺服器並行運行。 所有的Envoy形成一個透明的通信網格, 每個應用程式發送和接收來自本地主機的消息, 並且不知道網路的拓撲結構。 與傳統的庫方法服務於服務通信相比, 進程外架構有兩個實質性的好處:

Envoy可以使用任何應用程式語言。 單一的Envoy部署可以在Java, C ++, Go, PHP, Python等之間形成一個網格。 面向服務的體系結構使用多個應用程式框架和語言已經越來越普遍。 Envoy透明地彌合了這一差距。

正如任何一個與大型面向服務架構合作的人都知道,

部署庫升級可能會非常痛苦。 Envoy可以透明地在整個基礎設施上快速部署和升級。

現代C ++ 11代碼庫:Envoy是用C ++ 11編寫的。 選擇原生代碼是因為我們相信像Envoy這樣的架構組件應該盡可能地避開它。 現代應用程式開發人員已經處理由於在共用雲環境中的部署而導致的尾部延遲, 以及使用諸如PHP, Python, Ruby, Scala等高效但不是特別好的語言。 本地代碼通常提供優秀的延遲屬性不會增加對已經混亂的情況的額外混淆。 與用C編寫的其他本地代碼代理解決方案不同, C ++ 11提供了出色的開發人員生產力和性能。

L3 / L4篩檢程式架構:Envoy的核心是L3 / L4網路代理。 可插入的過濾鏈機制允許編寫篩檢程式來執行不同的TCP代理任務並插入到主要伺服器中。 已經編寫篩檢程式來支持各種任務,

如原始TCP代理, HTTP代理, TLS用戶端證書認證等。

HTTP L7篩檢程式體系結構:HTTP是現代應用程式體系結構的關鍵元件, Envoy支援額外的HTTP L7篩檢程式層。 HTTP篩檢程式可以插入HTTP連接管理子系統, 執行不同的任務, 如緩衝, 速率限制, 路由/轉發, 嗅探Amazon的DynamoDB等。

優先HTTP / 2支援:在HTTP模式下運行時, Envoy支援HTTP / 1.1和HTTP / 2。 Envoy可以在兩個方向上作為透明的HTTP / 1.1到HTTP / 2代理運行。 這意味著可以橋接HTTP / 1.1和HTTP / 2用戶端和目標伺服器的任意組合。 建議的服務配置服務使用所有Envoy之間的HTTP / 2來創建持久連接的網格, 請求和回應可以被多工。 協定正在逐步淘汰, Envoy不支持SPDY。

HTTP L7路由:在HTTP模式下運行時, Envoy支持一個路由子系統, 該路由子系統能夠根據路徑, 許可權, 內容類別型, 運行時值等路由和重定向請求。 當使用Envoy作為前端/邊緣時,

此功能非常有用代理伺服器, 但在構建服務網格服務時也會使用它。

gRPC支持:gRPC是一個來自Google的RPC框架, 它使用HTTP / 2作為基礎複用傳輸。 Envoy支援所有需要用作gRPC請求和回應的路由和負載平衡基板的HTTP / 2功能。 這兩個系統是非常互補的。

MongoDB L7支持:MongoDB是在現代Web應用程式中使用的流行資料庫。 Envoy支援L7嗅探, 統計生產和日誌記錄MongoDB連接。

DynamoDB L7支持:DynamoDB是Amazon託管的鍵/值NOSQL資料存儲。 Envoy支持L7嗅探和DynamoDB連接的統計生產。

服務發現:服務發現是面向服務體系結構的關鍵元件。 Envoy支援多種服務探索方法, 包括通過服務發現服務進行非同步DNS解析和基於REST的查找。

健康檢查:建議創建Envoy網格的建議方法是將服務發現視為最終一致的過程。 Envoy包括一個健康檢查子系統, 可以選擇執行上游服務集群的主動健康檢查。

然後, Envoy使用服務發現和健康檢查資訊的聯合來確定健康的負載平衡目標。 特使還支持通過異常檢測子系統進行被動健康檢查。

高級負載均衡:分散式系統中不同元件之間的負載平衡是一個複雜的問題。 因為Envoy是一個獨立的代理而不是一個庫, 所以它能夠在一個地方實現高級的負載平衡技術, 讓他們可以被任何應用程式訪問。 目前Envoy支持自動重試, 斷路, 通過外部速率限制服務的全球速率限制, 請求遮蔽和異常值檢測。 未來的支持計畫要求賽車。

前端/邊緣代理支援:儘管Envoy主要被設計為服務通信系統的服務, 但在邊緣使用相同的軟體(可觀察性, 管理, 相同的服務發現和負載平衡演算法等)也是有好處的。 Envoy包含足夠的功能,使其可用作大多數現代Web應用程式用例的邊緣代理。這包括TLS終止,HTTP / 1.1和HTTP / 2支持,以及HTTP L7路由。

最佳的可觀察性:如上所述,Envoy的主要目標是使網路透明。但是,在網路層面和應用層面都會出現問題。Envoy包括強大的統計支持所有子系統。 statsd(和相容的提供者)是當前支援的統計資訊接收器,儘管插入不同的資訊並不困難。統計資料也可以通過管理埠查看。Envoy還支持通過協力廠商供應商進行分散式追蹤。

動態配置:Envoy可以選擇使用一組分層的動態配置API。如果需要,實現者可以使用這些API來構建複雜的集中管理的部署。

設計目標

關於代碼本身的設計目標的一個簡短說明:儘管Envoy並不是很慢(我們已經花費了相當多的時間來優化某些快速路徑),但代碼已經被編寫成模組化並且易於測試,而不是針對最大可能的絕對性能。我們認為,這是一個更有效的時間使用的時間,因為典型的部署將與語言和執行時間一起慢許多倍,並且有更多的記憶體使用。

Envoy包含足夠的功能,使其可用作大多數現代Web應用程式用例的邊緣代理。這包括TLS終止,HTTP / 1.1和HTTP / 2支持,以及HTTP L7路由。

最佳的可觀察性:如上所述,Envoy的主要目標是使網路透明。但是,在網路層面和應用層面都會出現問題。Envoy包括強大的統計支持所有子系統。 statsd(和相容的提供者)是當前支援的統計資訊接收器,儘管插入不同的資訊並不困難。統計資料也可以通過管理埠查看。Envoy還支持通過協力廠商供應商進行分散式追蹤。

動態配置:Envoy可以選擇使用一組分層的動態配置API。如果需要,實現者可以使用這些API來構建複雜的集中管理的部署。

設計目標

關於代碼本身的設計目標的一個簡短說明:儘管Envoy並不是很慢(我們已經花費了相當多的時間來優化某些快速路徑),但代碼已經被編寫成模組化並且易於測試,而不是針對最大可能的絕對性能。我們認為,這是一個更有效的時間使用的時間,因為典型的部署將與語言和執行時間一起慢許多倍,並且有更多的記憶體使用。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示