Envoy架構(2):HTTP過濾器,HTTP路由,gRPC,WebSocket,集群管理器

2021-01-15 CXO助手

HTTP過濾器

就像網絡級別的過濾堆棧一樣,Envoy在連接管理器中支持HTTP級別的過濾堆棧。可以編寫過濾器,在不知道底層物理協議(HTTP / 1.1,HTTP / 2等)或多路復用功能的情況下,對HTTP層消息進行操作。有三種類型的HTTP級別過濾器:

解碼器:解碼器過濾器在連接管理器正在解碼請求流的部分(頭部,正文和尾部)時被調用。

編碼器:編碼器過濾器在連接管理器即將編碼部分響應流(標題,正文和預告片)時被調用。

解碼器/編碼器:解碼器/編碼器過濾器在連接管理器正在解碼請求流的部分時以及連接管理器將要對部分響應流進行編碼時被調用。

HTTP級別篩選器的API允許篩選器在不知道底層協議的情況下運行。像網絡級別的過濾器一樣,HTTP過濾器可以停止並繼續迭代到後續的過濾器。這可以實現更複雜的場景,例如運行狀況檢查處理,調用速率限制服務,緩衝,路由,為應用程式流量(例如DynamoDB等)生成統計信息。Envoy已經包含了幾個HTTP級別的過濾器,配置參考。

HTTP路由

Envoy包含一個HTTP路由器過濾器,可以安裝它來執行高級路由任務。這對於處理邊緣流量(傳統的反向代理請求處理)以及構建服務以服務Envoy網格(通常經由主機/權威HTTP頭部上的路由以到達特定的上遊服務集群)是有用的。Envoy也有能力配置為正向代理。在轉發代理配置中,網狀客戶端可以通過將他們的http代理適當地配置為Envoy來參與。在高層次上,路由器接收一個傳入的HTTP請求,將其與上遊集群進行匹配,獲取到上遊集群中主機的連接池,並轉發該請求。路由器過濾器支持以下功能:

將域/權限映射到一組路由規則的虛擬主機。

前綴和精確路徑匹配規則(區分大小寫和不區分大小寫)。正則表達式/ slug匹配當前不被支持,主要是因為它使編程難以/不可能確定路由規則是否相互衝突。由於這個原因,我們不建議在反向代理級別使用正則表達式/段落路由,但是我們可能會根據需求添加支持。

在虛擬主機級別的TLS重定向。

在路由級別的路徑/主機重定向。

顯式主機重寫。

根據所選上遊主機的DNS名稱自動重寫主機。

前綴重寫。

Websocket在路由級別升級。

通過HTTP頭或通過路由配置請求重試。

通過HTTP頭或通過路由配置指定的請求超時。

通過運行時間值將流量從一個上遊群集轉移到另一個上(請參閱流量轉移/分流)。

使用基於權重/百分比的路由(請參閱流量轉移/拆分)跨多個上遊群集進行流量分流。

任意頭匹配路由規則。

虛擬集群規範。虛擬群集在虛擬主機級別指定,由Envoy用於在標準群集級別之上生成附加統計信息。虛擬群集可以使用正則表達式匹配。

基於優先級的路由

基於哈希策略的路由。

非轉發代理支持絕對url。

路由表

HTTP連接管理器的配置擁有所有配置的HTTP過濾器使用的路由表。雖然路由器過濾器是路由表的主要使用者,但是如果他們想根據請求的最終目的地做出決定,其他過濾器也可以訪問。例如,內置的速率限制過濾器參考路由表來確定是否應該基於路由來調用全局速率限制服務。即使決策涉及隨機性(例如,在運行時配置路由規則的情況下),連接管理器也確保所有獲取路由的呼叫對於特定請求是穩定的。

重試語義

Envoy允許在路由配置中以及通過請求頭對特定請求配置重試。以下配置是可能的:

最大重試次數:Envoy將繼續重試任意次數。在每次重試之間使用指數退避算法。此外,所有重試都包含在整個請求超時內。由於大量的重試,這避免了很長的請求時間。

重試條件:Envoy可以根據應用要求在不同類型的條件下重試。例如,網絡故障,所有5xx響應碼,冪等4xx響應碼等

請注意,重試可能被禁用,取決於x-envoy重載的內容。

優先路由

Envoy支持路由級別的優先路由。當前的優先級實現針對每個優先級別使用不同的連接池和斷路設置。這意味著即使對於HTTP / 2請求,兩個物理連接也將被用於上遊主機。未來,Envoy可能會支持真正的HTTP / 2優先級。

目前支持的優先級是默認和高。

gRPC

gRPC是來自Google的RPC框架。它使用協議緩衝區作為基礎的序列化/ IDL格式。在傳輸層,它使用HTTP / 2進行請求/響應復用。Envoy在傳輸層和應用層都有一流的gRPC支持:

gRPC使用HTTP / 2預告片來傳送請求狀態。 Envoy是能夠正確支持HTTP / 2預告片的少數幾個HTTP代理之一,因此是少數可以傳輸gRPC請求和響應的代理之一。

某些語言的gRPC運行時相對不成熟。 Envoy支持gRPC網橋過濾器,允許gRPC請求通過HTTP / 1.1發送給Envoy。然後,Envoy將請求轉換為HTTP / 2傳輸到目標伺服器。該響應被轉換回HTTP / 1.1。

安裝後,網橋過濾器除了統計全局HTTP統計數據之外,還會根據RPC統計信息進行收集。

gRPC-Web由過濾器支持,它允許gRPC-Web客戶端通過HTTP / 1.1向Envoy發送請求並代理到gRPC伺服器。目前正處於積極的發展階段,預計將成為gRPC橋式濾波器的後續產品。

gRPC-JSON代碼轉換器由一個過濾器支持,該過濾器允許RESTful JSON API客戶端通過HTTP向Envoy發送請求並代理到gRPC服務。

WebSocket支持

Envoy支持將HTTP / 1.1連接升級到WebSocket連接。僅當下遊客戶端發送正確的升級頭並且匹配的HTTP路由顯式配置為使用WebSocket(use_websocket)時才允許連接升級。如果一個請求到達啟用了WebSocket的路由而沒有必要的升級頭,它將被視為任何常規的HTTP / 1.1請求。

由於Envoy將WebSocket連接視為純TCP連接,因此它支持WebSocket協議的所有草稿,而與其格式無關。 WebSocket路由不支持某些HTTP請求級別的功能,如重定向,超時,重試,速率限制和陰影。然而,支持前綴重寫,顯式和自動主機重寫,流量轉移和分離。

連接語義

儘管WebSocket升級是通過HTTP / 1.1連接進行的,但是WebSockets代理與普通的TCP代理類似,即Envoy不會解釋websocket框架。下遊客戶端和/或上遊伺服器負責正確終止WebSocket連接(例如,通過發送關閉幀)和底層TCP連接。

當連接管理器通過支持WebSocket的路由接收到WebSocket升級請求時,它通過TCP連接將請求轉發給上遊伺服器。特使不知道上遊伺服器是否拒絕了升級請求。上遊伺服器負責終止TCP連接,這將導致Envoy終止相應的下遊客戶端連接。

集群管理器

Envoy的集群管理器管理所有配置的上遊集群。就像Envoy配置可以包含任意數量的偵聽器一樣,配置也可以包含任意數量的獨立配置的上遊集群。

上遊集群和主機從網絡/ HTTP過濾器堆棧中抽象出來,因為上遊集群和主機可以用於任意數量的不同代理任務。集群管理器向過濾器堆棧公開API,允許過濾器獲得到上遊集群的L3 / L4連接,或者到上遊集群的抽象HTTP連接池的句柄(無論上遊主機是支持HTTP / 1.1還是HTTP / 2被隱藏)。篩選器階段確定是否需要L3 / L4連接或新的HTTP流,並且集群管理器處理所有知道哪些主機可用且健康的負載平衡,上遊連接數據的線程本地存儲的複雜性(因為大多數Envoy代碼被寫為單線程),上遊連接類型(TCP / IP,UDS),適用的上遊協議(HTTP / 1.1,HTTP / 2)等

群集管理器已知的群集可以靜態配置,也可以通過群集發現服務(CDS)API動態獲取。動態集群提取允許將更多配置存儲在中央配置伺服器中,因此需要更少的Envoy重新啟動和配置分配。

集群管理器配置。

CDS配置。

相關焦點

  • H2O 1.4.0 發布, HTTP 伺服器
    支持的協議有:HTTP/1.0 (http and https)HTTP/1.1 (http and https)Websocket (RFC6455, both ws and wss)HTTP/2.0 (draft 14, via Upgrade, NPN,
  • gRPC Python 入門到生產環境
    三、gRPC學習1、安裝參考:https://grpc.io/docs/quickstart/python.html# Install gRPCsudo pip3 install grpcio# Install gRPC tools sudo pip3 install grpcio-tools2、運行1) hello
  • 雲原生時代的流量入口:Envoy Gateway
    支持路由、流量複製、分流等功能。治理特性。支持健康檢查、熔斷、限流、超時、重試、故障注入。多協議支持。支持 HTTP/1.1,HTTP/2,GRPC,WebSocket 等協議代理與治理。負載均衡。加權輪詢、加權最少請求、Ring hash、Maglev、隨機等算法支持。支持區域感知路由、故障轉移等特性。
  • Airbnb 的數據基礎架構|數據|基礎架構|集群_網易科技
    這裡就是 Airbnb 以 AWS 作為基礎搭建數據架構中走過的坑和經驗分享,由於筆者也剛好做過,同是天涯淪落人,難度 2 星,供做數據的朋友學習。第 1 部分:數據基礎設施的背後哲學在 Airbnb 我們提倡數據文化並使用數據作為關鍵輸入去決策。
  • WebSocket能幹些啥?
    例如:websockethttp協議是什麼工作模式呢分版本,版本不同,工作模式不同1.http1.0:單工。因為是短連接,客戶端發起請求之後,服務端處理完請求並收到客戶端的響應後即斷開連接。2.http1.1:半雙工。默認開啟長連接keep-alive,開啟一個連接可發送多個請求。3.http2.0:全雙工,允許服務端主動向客戶端發送數據。TCP三次握手四次揮手WebSocket:WebSocket和HTTP什麼關係?
  • websocket項目 搭建node專題及常見問題 - CSDN
    前提:需要安裝的包koa 由 Express 幕後的原班人馬打造,使用起來比Node更優雅簡潔 https://koa.bootcss.com/koa-router 是路由導航,實際應用中可以認為node接口https://www.npmjs.com/package/koa-routerkoa-websocket koa的中間件對websocket的封裝 https://www.npmjs.com
  • HTTP代理ip協議都有什麼特點和原理
    這樣就完成了不同網段的Ping的請求1.7 websocket全雙工通信,特點:推送功能:支持伺服器向客戶端推送數據的推送功能減少通信量:一直保持連接HTTP連接建立後,需要完成一次握手動作握手---請求:用到HTTP的upgrade欄位告知伺服器通信協議發生變化握手---響應:對於之前的請求返回狀態碼
  • 八問WebSocket協議:為你快速解答WebSocket熱門疑問
    端即時通訊:不用WebSocket也一樣能搞定消息的即時性》《開源Comet伺服器iComet:支持百萬並發的Web端即時通訊方案》更多WebSocket的詳細介紹請參見:《新手快速入門:WebSocket簡明教程》《Socket.IO介紹:支持WebSocket、用於WEB端的即時通訊的框架》《socket.io和websocket
  • gRPC首頁、文檔和下載 - RPC 框架 - OSCHINA - 中文開源技術交流...
    gRPC 是一個高性能、開源和通用的 RPC 框架,面向移動和 HTTP/2目前提供 C、Java 和 Go 語言版本,分別是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持.
  • Envoy - Envoy: 外交使節,特使-英語點津
    7月2日,埃及派往伊拉克的最高外交官哈卜·謝裡夫在巴格達遭綁架,目前尚沒有組織宣稱對此負責。據悉,謝裡夫遭綁架當天晚上去買報紙,突然有武裝分子乘坐兩輛寶馬車攔住了他的去路,並綁架了他。外電報導如下:Gunmen seized Egypt's top envoy to Iraq, officials and witnesses said Sunday, in an apparent bid to discourage the country's Arab neighbors from bolstering ties to the embattled U.S.
  • 直觀講解一下 RPC 調用和 HTTP 調用的區別!
    本文簡單地介紹一下兩種形式的C/S架構,先說一下他們最本質的區別,就是RPC主要是基於TCP/IP協議的,而HTTP服務主要是基於HTTP協議的,我們都知道HTTP協議是在傳輸層協議TCP之上的,所以效率來看的話,RPC當然是要更勝一籌啦!下面來具體說一說RPC服務和HTTP服務。
  • HTTP和HTTPS是什麼?
    HTTPS協議是由SSL/TLS+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比http協議安全,很多大型網際網路網站,如百度、淘寶、騰訊很早就已經把HTTP換成HTTPS了。2.網站申請流程不同https協議需要到CA申請證書,一般免費證書很少,需要交費,Web伺服器啟用SSL需要獲得一個伺服器證書並將該證書與要使用SSL的伺服器綁定。3.默認埠不同http和https使用的是完全不同的連接方式,同時使用的埠也不同,http使用的是80埠,https使用的是443埠。
  • 華為Wi-Fi 6+路由來了 華為路由AX3、5G CPE Pro2及華為5G工業模組...
    北京時間2019年2月24日21時,華為終端產品與戰略線上發布會正式舉行。搭載最新Wi-Fi 6技術的華為路由AX3、華為5G CPE Pro 2、以及華為5G工業模組均在發布會上亮相。      華為5G工業模組的下行速率高達2Gbps,上行速率高達230Mbps,滿足行業應用的高帶寬要求;工作溫度範圍廣至-40℃~+85℃,採用高可靠性器件以及工業獨特設計,完全適應工業環境的多樣化;微內核加持TrustZone的雙重安全機制,讓工業環境使用真正安全可靠;自帶高性能的應用處理器,其算力達14400DMPIS,是業界行業水平的5倍,同時採用OpenCPU架構,方便開發豐富的第三方應用
  • 分布式與集群分久必合,淺析Filecoin集群架構優化方向
    關於Filecoin集群的探索,由來已久、從未停歇。如果把Filecoin挖礦比作建造高樓大廈,那麼,集群就像打地基,地基的架構、材料質量、施工方案等都影響著這棟房子能蓋多高、多寬、最多可承載多少人,能否在颱風、暴雨、地震等自然以及人為因素侵擾之際依舊巋然不動、屹立不倒。
  • 通過WebDAV服務在Windows10資源管理器遠程訪問文件
    雖然有網頁版的Filestation和新版的應用程式Drive,大多數人都仍舊習慣使用Windows自帶的資源管理器來管理文件。Windows一直以來都支持映射網絡驅動器這一功能,除了FTP之外,下面通過WebDAV服務映射群暉NAS,實現遠程訪問。
  • 物聯網應用層協議選擇和分析--MQTT、CoAP 、HTTP、XMPP、SoAP
    QoS 2:「只有一次」,確保消息只到達一次。例如,這個等級可用在一個計費系統中,這裡如果消息重複或丟失會導致不正確的收費。因此,IETF的CoRE工作組提出了一種基於REST架構、傳輸層為UDP、網絡層為6LowPAN(面向低功耗無線區域網的IPv6)的CoAP協議。 CoAP採用與HTTP協議相同的請求響應工作模式。CoAP協議共有4中不同的消息類型。 CON——需要被確認的請求,如果CON請求被發送,那麼對方必須做出響應。
  • solr之http請求查詢記錄兩點
    今天犯了兩個很傻的錯誤,特此記錄一下,避免日後再犯:(1) solr提供http請求相關API:平常通過瀏覽器直接訪問:http://192.168.133.129:8983/solr/#/test/query,輸入查詢條件即可,但是由於request
  • 如何在集群中高效地部署和使用 AI 晶片? | 分享總結
    Hadoop YARN 資源管理框架,它主要管理集群中的 CPU 和內存。YARN(Yet Another Resource Negotiator)是一個通用的資源管理平臺,可為各類計算框架提供資源的管理和調度。
  • 【讀書筆記】1.2、基於HTTP協議的RPC
    1.2.1HTTP協議棧HTTP協議Hypertext Transfer Protocol的縮寫(超文本傳輸協議)屬於應用層協議,構建在TCP與IP協議之上,處於TCP/IP體系架構頂端無需處理丟包補發、握手及數據的分段和重新組裝等細節