Upgrade to Pro — share decks privately, control downloads, hide ads and more …

EnvoyのWasm filterを体験する

EnvoyのWasm filterを体験する

2025-01-18に開催された「北陸三県.rb Lightning Talks in Kanazawa」で発表した資料です。
https://meetup.kzrb.org/149/

サンプルコード
https://github.com/TAKAyukiatkwsk/proxy-wasm-ab-testing-header

TAKAyukiatkwsk

January 18, 2025
Tweet

More Decks by TAKAyukiatkwsk

Other Decks in Programming

Transcript

  1. 自己紹介 • Takayuki Takagi (髙木貴之 / ニボシーニョ) • @TAKAyuki_atkwsk /

    takayukiatkwsk • SRE @ ZOZO • AWS, Kubernetes, Scala, Ruby, Go, etc. • ビール、餃子、サッカー観戦が好き • Kanazawa.rbから来ました 2
  2. 今日の話 • EnvoyのWasm filterを触ってみたので紹介したい ◦ Envoyとは ◦ HTTP filter ◦

    Wasm filter ◦ デモ ※機能自体は目新しい話ではなく、個人的にようやく触れたという報告ということで...
  3. Wasm filter • WebAssembly(Wasm)としてコンパイルされた処理をHTTP filterとして実行できる ◦ Envoyを安全に拡張できる ◦ 比較)C++で組み込む、Lua filter、External

    Processing • proxy-wasmという仕様に基づいた実装 ◦ https://github.com/proxy-wasm/spec ◦ Nginxでも実装されている ◦ SDKはいくつかの言語に対応 • WasmランタイムはEnvoyに組み込まれている ◦ デフォルトではv8
  4. Wasm filter体験 • A/Bテスト用のリクエストヘッダーを付与するフィルター ◦ ヘッダー名、ヘッダー値、ウエイトを設定する ◦ 例えば、X-Example-AB-Testing: aaaa と

    X-Example-AB-Testing: bbbb が同じ確率で付与されるものを仕込める client Wasm filter router Envoy X-Example-AB-Testing: * ヘッダー値に応じたレスポンス
  5. Wasm filter体験 • 今回はRustで実装 ◦ コンパイル先としてWasmがサポートされている ◦ proxy-wasm-rust-sdkを利用 ▪ https://github.com/proxy-wasm/proxy-wasm-rust-sdk

    ▪ exampleディレクトリを参考にさせてもらった • ソースコードはこちら ◦ https://github.com/TAKAyukiatkwsk/proxy-wasm-ab-testing-hea der
  6. まとめ • EnvoyのWasm filterを簡単に紹介した • HTTP filterとして拡張できる • proxy-wasm仕様に沿った実装でWasmにコンパイル •

    個人的使いどころ候補 ◦ Lua filterではカバーできない処理 ◦ 共通処理をWasm filterとして実装し、組織内やpublicで共有 ◦ Wasmが普及すれば熱を帯びるかも?
  7. (余談)私とEnvoy • 仕事で利用している • Envoyに関するブログを過去に書いた ◦ ZOZOSUITからZOZOMATへ - Envoy gRPC-JSON

    transcoderによる部分的モダ ン化の実践 ▪ https://techblog.zozo.com/entry/zozomat-envoy-grpc-json-transco der ◦ Envoy の gRPC-JSON transcoder を利用する場合のアクセスログで元の HTTP method を出力したい ▪ https://www.blogaomu.com/entry/envoy-access-log-original-http-m ethod ◦ EnvoyのイメージをDistrolessベースに替えたときの失敗談 ▪ https://www.blogaomu.com/entry/failure-of-switching-envoy-distr oless