今日說服務代理——高性能服務代理軟件Envoy

今天在公衆號發現的高性能服務代理軟件Envoy,之後立馬在百度搜索了關於該軟件(Envoy)與nginx、ocelot等的區別,發現相關強悍。

同時也發現eShopOnContainers事例項目中也將ocelot換成Envoy。

以下引用官方介紹,週末一定搞一下試試。

>引用官方介紹,地址:https://www.servicemesher.com/envoy/

>大概看了下文檔,理論方面介紹的還是相當全,可以折騰一下試試,萬一好用呢~~~

 

LOGO:

 

 

官方微信公衆號:

 

 

Envoy 是什麼?

Envoy 是專爲大型現代 SOA(面向服務架構)架構設計的 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 filter 架構:Envoy 的核心是一個 L3/L4 網絡代理。可插入 filter 鏈機制允許開發人員編寫 filter 來執行不同的 TCP 代理任務並將其插入到主體服務中。現在已有很多用來支持各種任務的 filter,如原始 TCP 代理HTTP 代理TLS 客戶端證書認證等。

HTTP L7 filter 架構: HTTP 是現代應用程序體系結構的關鍵組件,Envoy 支持額外的 HTTP L7 filter 層。可以將 HTTP filter 插入執行不同任務的 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 支持對 MongoDB 連接進行 L7 嗅探、統計和日誌記錄。

DynamoDB L7 支持:DynamoDB 是亞馬遜的託管鍵/值 NOSQL 數據存儲。Envoy 支持對 DynamoDB 連接進行 L7 嗅探和統計。

服務發現和動態配置: Envoy 可以選擇使用動態配置 API 的分層集合實現集中管理。這些層爲Envoy 提供了以下內容的動態更新:後端集羣內的主機、後端集羣本身、HTTP 路由、監聽套接字和加密材料。對於更簡單的部署,可以通過DNS 解析(甚至完全跳過)發現後端主機,靜態配置文件將替代更深的層。

健康檢查:推薦使用將服務發現視爲最終一致的過程的方式來建立 Envoy 網格。Envoy 包含了一個健康檢查子系統,可以選擇對上游服務集羣執行主動健康檢查。然後,Envoy 聯合使用服務發現和健康檢查信息來確定健康的負載均衡目標。Envoy 還通過異常檢測子系統支持被動健康檢查。

高級負載均衡:負載均衡是分佈式系統中不同組件之間的一個複雜問題。由於 Envoy 是一個獨立代理而不是庫,因此可以獨立實現高級負載均衡以供任何應用程序訪問。目前,Envoy 支持自動重試 、熔斷、通過外部速率限制服務的全局速率限制請求映射異常點檢測。未來還計劃支持請求競爭。

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

最佳的可觀察性: 如上所述,Envoy 的主要目標是使網絡透明。但是,問題在網絡層面和應用層面都可能會出現。Envoy 包含對所有子系統強大的統計功能支持。目前支持 statsd(和兼容的提供程序)作爲統計信息接收器,但是插入不同的接收器並不困難。統計信息也可以通過管理端口查看。Envoy 還通過第三方提供商支持分佈式追蹤

設計目標

關於 Envoy 本身設計目標的簡短說明:儘管 Envoy 絕對不慢(我們用了大量的時間來優化某些快速路徑),我們的代碼是按照模塊化和易於測試的方式來編寫的,而不是最大限度地實現最佳性能。我們認爲這會更有效的利用時間,因爲 Envoy 通常會和比它自身慢數倍、內存佔用高數倍的語言和運行時部署在一起。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章