Envoy 调试流量的常用技巧直播分享及问答整理
作者:周禮贊,Tetrate[1]創始工程師,Envoy 維護者,Istio Networking/Security WG Lead。
本文是我在云原生學院第七期直播分享的內容整理,本期是 Envoy 系列分享的第一期,在本次分享開始前云原生社區中進行了關于 Envoy 的問卷調查,從問卷結果來看大多數同學都希望了解調試流量這個主題,所以就選了這個主題作為第一次分享。而且大多數同學都是剛開始看 Envoy,所以本次分享也會涉及到很多 Envoy 入門的內容,未來我也會在社區中給大家分享更多 Envoy 的內容。視頻回放見?B 站?[2],你也可以掃描下面圖片中的二維碼觀看視頻回放。
此次分享由三部分組成:
1.?歷史和設計理念:這部分主要是 Envoy 入門,介紹為什么 Envoy 被開發出來,有哪些設計理念,擴展點。2.Envoy 如何處理一個請求:這部分講解了一下 Envoy 如何處理一個請求,在其中 Listener、Transport Socket、Filter、Cluster 這些概念分別起到什么作用。3.?如何用調試流量:分享了以下幾種調試流量的方法:日志、stats、TAP。演示了如何用日志和 TAP 來調試流量。
Envoy AMA(Ask Me Anything)環節的問答主要圍繞著:Wasm、Istio 支持、性能方面,還有一些社區相關的問題。以下是對問答內容的整理。
WASM 相關的問題
WASM 在后端其它領域有哪些應用?
起源于瀏覽器,安全高性能執行 Native Code。衍生了 WASI 規格支持單獨執行文件。微軟基于此做了 WASM 容器 (Krustlet)。
Envoy WASM 性能不是很理想,社區對這塊有什么優化的方向嗎?
WASM 還相對早期,合并到官方的倉庫里在本月初已實現(還在 alpha 階段),性能優化還沒重點改進,有很大的改進空間,歡迎貢獻。WASM 有很多 runtime,如 V8 (Chrome)、WAVM、Cranelift (Firefox) 等等。
WASM 會主要支持哪些語言?
理論上各種語言都可以支持,但是需要社區跟進。上個月 Tetrate 發布了?GetEnvoy[3]?Toolkit,目前支持 Go、Rust。
Envoy 中使用 WASM 實現的 filter 和原生在 Envoy 里面的 C++ 實現的 filter 性能差多大?預計什么時候 Envoy 的 WASM 模塊可以上生產使用?
已經有實際落地,實際案例,如 American Express 和 Yahoo 美國。EnvoyCon 分別有演講。在理想情況下,2-3 倍的性能差異。
Istio 相關的問題
Istio/Envoy 未來的計劃?是否會在以后可以直接使用 envoyproxy/envoy?
是的,去年底就在開始往這個方向做。正在把現有的 Istio 的擴展功能轉換成 WebAssembly。
Envoy 或者 Istio 對于第三方協議擴展未來有什么計劃?
Envoy 由社區主導,沒有明確的未來計劃。需要維護者來 cover 這些事情。第三方協議范圍很廣,其中 Tetrate 在做一些數據庫協議的集成。其他協議例如 Dubbo 或者 Thrift 需要貢獻者幫助。
性能方面的問題
對比 NGINX、traefik 等的性能差異如何?
因為 Envoy 默認開啟很多可觀測性會影響壓測性能,對此 Envoy 官方文檔里有個 benchmark 文檔解說如何壓測 Envoy。有些壓測場景 Envoy 比 NGINX 好,有些相反。Traefik 不知道。
如何利用硬件加速 Envoy HTTPS?
官方有擴展點,需要自行擴展而實現。
在哪里可以了解 Envoy 的最佳配置,以及如何高效可靠的維護 Envoy?
取決于具體案例。官方文檔,第三方文檔有相關資料,
Envoy 的性能如何調優?
取決于具體案例。需要 Profiling。
為什么一開始選擇 C++,感覺性能比較差
C++ 比絕大多數語言性能都好。當時沒有更好的語言選擇。有 GC 的語言會有大的 tail-latency。C 可能可以性能更好,但對內存管理更為苛刻,難維護。
關于 xDS 的問題
關于 on-demand,目前已經有了 VHDS,其他 xDS 會陸續支持嗎?比如 on-demand CDS/EDS?
VHDS 并不是 on-demand。現在主要是把 Delta xDS 做好。
Envoy 如何根據請求參數的值,動態過濾 endpoint 實例?
金絲雀發布 / 藍綠發布。可以參照官方 Subset LB 資料。
單 Envoy 能否同時連接多個 xDS server 以合并 CDS、EDS 數據,例如 Istiod + consul,以適配混合環境。
CDS 服務器需要給出對應的 EDS 服務。取決于 CDS 數據。Tetrate Istio Cloud Map[4]?支持連 Consul 到 Istio。
其他問題
對于新手學習 Envoy 有哪些建議?
首先根據自己的用例和方向性來確定目標,Envoy 本身功能強大范圍廣,官網資料相對齊全。社區(Slack、GitHub)提問一般可以得到回答。
ListenerFilter 前后順序有影響嗎?
有的沒有(如 HTTP),有的有影響(如 Proxy Protocol )
ListenerFilter 沖突會和時間有關嗎?現在有 debug 方案和過濾驗證機制嗎?
超時機制跟時間有關(server 主動發起的消息場景需要超時機制)
Envoy 的運行時的動態配置為什么不做持久化處理(動態更新的配置落盤)?
這是一個常見問題,持久話動態配置是錯誤補丁,應該提升控制面的可靠性。
Tetrate 對 Envoy 都在哪些方面做了增強?
包括以下幾點:
?GetEnvoy:?https://www.getenvoy.io[5]?PostgreSQL Filter?WASM 擴展
大家可以關注 Tetrate 的微信公眾號,了解 Tetrate 對 Envoy 支持的更多信息。
為什么不基于 Nginx 改造?
在做網關的時候已經調查過很多產品,Envoy 的可擴展性強,XDS 可以動態配置 service mesh,有很大的優勢,這個與其他網關產品不同。社區文化與 HAProxy、Nginx 不同,他們都是商業公司的背景開發的,增加功能的時候與他們的商業版本會有沖突。Envoy 還沒有商業公司完全控制其開源,更社區化一些。
如何提交 PR 和 feature 給 Envoy 社區?
首先提交 GitHub issue,擴展需要維護者 sponsor,參加社區會議討論(每月 2 次,一次西海岸時間早上,一次亞太時間早上)
Envoy 后續支持 graphQL 的計劃
需要維護者提交。
EnvoyCon 視頻什么時候有?
EnvoyCon 10 月 15 號剛開完,下個月即可有視頻。
引用鏈接
[1]?Tetrate:?https://tetrate.io
[2]?B 站:?https://www.bilibili.com/video/BV1Qa411A7hF
[3]?GetEnvoy:?https://www.getenvoy.io
[4]?Tetrate Istio Cloud Map:?https://github.com/tetratelabs/istio-cloud-map
[5]?https://www.getenvoy.io:?https://www.getenvoy.io/
云原生社區成立于 2020 年 5 月 12 日,作為中立的云原生終端用戶社區,致力于推廣云原生技術,構建開發者生態。點擊了解我們。
點擊下方“閱讀原文”查看更多
↓↓↓
總結
以上是生活随笔為你收集整理的Envoy 调试流量的常用技巧直播分享及问答整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【从零开始学习深度学习】34. Pyto
- 下一篇: 计算机硬件与软件教学反思,计算机硬件教学