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

ebpfとWASMに思いを馳せる2022 / techfeed-conference-2022...

ebpfとWASMに思いを馳せる2022 / techfeed-conference-2022-ebpf-wasm-amsy810

https://techfeed.io/events/techfeed-conference-2022#containers-trend

TechFeed Conference 2022
「エンジニアの祭典」へようこそ。エキスパート50名による大LT大会、全セッション永久保存版!
前代未聞、日本を代表するテックエキスパート50名による大LT大会、全セッション書き起こし!
コロナ禍でもエンジニアコミュニティを元気にすべく、TechFeedが総力を上げて実現する「エンジニアの祭典」、ここに開催!

【BIO】
『Kubernetes完全ガイド』著者。Cloud Native Days TokyoのCo-chair。Kubernetes Meetup TokyoのOrganizer。CyberAgentのDeveloper ExpertsKubernetes/CloudNative 領域

【セッション概要】
eBPFやWASMも徐々に成熟し、新たなプロダクトも出てきています。このセッションではそれらのプロダクトを紹介し、2022年に思いを馳せたいと思います。

More Decks by Masaya Aoyama (@amsy810)

Other Decks in Programming

Transcript

  1. !BNTZ - Co-chair ੨ࢁ ਅ໵ + CREATIONLINE - 技術アドバイザ +

    SAKURA Internet Research Center – 客員研究員 + 3-shake 技術顧問 + PLAID - Organizer - KaaS Product Owner - Publications Twitter: @amsy810
  2. !BNTZ WASM(WebAssembly) WebAssembly はもともと Web ブラウザ向けに作られたバイナリフォーマット 様々な⾔語で関数を実装し、WASM binaryとしてビルドする Browser WASM

    binary 様々な⾔語(+SDK)から ビルド可能 WASI Host System WASM binary WASM Runtime Proxy Proxy-WASM WASM binary WASM (WebAssembly) WASI (WebAssembly System Interface) Proxy-WASM WASM Runtime (VM)
  3. !BNTZ # tinygo build -o ./my-filter.wasm -target=wasi ./main.go Proxy-WASM interface

    で定義された WASM 関数の override Proxy-WASM interface で定義された Host 関数の利用 WASM Runtime Proxy Proxy-WASM WASM binary tiny-go + proxy-wasm-go-sdk の実装例
  4. !BNTZ Proxy 側から WASM 側が呼び出される関数 @TUBSU QSPYZ@BCJ@WFSTJPO@9@:@; QSPYZ@PO@NFNPSZ@BMMPDBUF QSPYZ@PO@DPOUFYU@DSFBUF QSPYZ@PO@EPOF

    QSPYZ@PO@MPH QSPYZ@PO@EFMFUF QSPYZ@PO@WN@TUBSU QSPYZ@PO@DPOGJHVSF QSPYZ@PO@UJDL QSPYZ@PO@OFX@DPOOFDUJPO QSPYZ@PO@EPXOTUSFBN@EBUB QSPYZ@PO@EPXOTUSFBN@DMPTF QSPYZ@PO@VQTUSFBN@EBUB QSPYZ@PO@VQTUSFBN@DMPTF QSPYZ@PO@IUUQ@SFRVFTU@IFBEFST QSPYZ@PO@IUUQ@SFRVFTU@CPEZ QSPYZ@PO@IUUQ@SFRVFTU@USBJMFST QSPYZ@PO@IUUQ@SFRVFTU@NFUBEBUB QSPYZ@PO@IUUQ@SFTQPOTF@IFBEFST QSPYZ@PO@IUUQ@SFTQPOTF@CPEZ QSPYZ@PO@IUUQ@SFTQPOTF@USBJMFST QSPYZ@PO@IUUQ@SFTQPOTF@NFUBEBUB QSPYZ@PO@IUUQ@DBMM@SFTQPOTF QSPYZ@PO@HSQD@DBMM@SFTQPOTF@IFBEFS@NFUBEBUB QSPYZ@PO@HSQD@DBMM@SFTQPOTF@NFTTBHF QSPYZ@PO@HSQD@DBMM@SFTQPOTF@USBJMFS@NFUBEBUB QSPYZ@PO@HSQD@DBMM@DMPTF QSPYZ@PO@RVFVF@SFBEZ WASM Runtime Proxy Proxy-WASM WASM binary 関数が呼び出されるタイミング • イベントの発⽣時 • Proxyが特定のステータスに遷移時 Ref: https://github.com/proxy-wasm/spec/tree/master/abi-versions/vNEXT
  5. !BNTZ WASM 側から Proxy 側を呼び出す関数 QSPYZ@MPH QSPYZ@HFU@DVSSFOU@UJNF QSPYZ@TFU@FGGFDUJWF@DPOUFYU QSPYZ@EPOF QSPYZ@TFU@UJDL@QFSJPE

    QSPYZ@HFU@CVGGFS QSPYZ@TFU@CVGGFS QSPYZ@HFU@NBQ QSPYZ@TFU@NBQ QSPYZ@HFU@NBQ@WBMVF QSPYZ@TFU@NBQ@WBMVF QSPYZ@BEE@NBQ@WBMVF QSPYZ@SFNPWF@NBQ@WBMVF QSPYZ@HFU@QSPQFSUZ QSPYZ@TFU@QSPQFSUZ QSPYZ@SFTVNF@EPXOTUSFBN QSPYZ@SFTVNF@VQTUSFBN QSPYZ@SFTVNF@IUUQ@SFRVFTU QSPYZ@SFTVNF@IUUQ@SFTQPOTF QSPYZ@TFOE@IUUQ@SFTQPOTF QSPYZ@EJTQBUDI@IUUQ@DBMM QSPYZ@EJTQBUDI@HSQD@DBMM QSPYZ@PQFO@HSQD@TUSFBN QSPYZ@TFOE@HSQD@DBMM@NFTTBHF QSPYZ@DBODFM@HSQD@DBMM QSPYZ@DMPTF@HSQD@DBMM QSPYZ@HFU@TIBSFE@EBUB QSPYZ@TFU@TIBSFE@EBUB QSPYZ@SFHJTUFS@TIBSFE@RVFVF QSPYZ@SFTPMWF@TIBSFE@RVFVF QSPYZ@EFRVFVF@TIBSFE@RVFVF QSPYZ@FORVFVF@TIBSFE@RVFVF QSPYZ@SFNPWF@TIBSFE@RVFVF QSPYZ@EFGJOF@NFUSJD QSPYZ@HFU@NFUSJD QSPYZ@SFDPSE@NFUSJD QSPYZ@JODSFNFOU@NFUSJD QSPYZ@SFNPWF@NFUSJD QSPYZ@DBMM@GPSFJHO@GVODUJPO WASM Runtime Proxy Proxy-WASM WASM binary 関数を呼び出すタイミング • Proxy に対して命令を⾏う場合 • Proxy 側の機能を利⽤する場合 Ref: https://github.com/proxy-wasm/spec/tree/master/abi-versions/vNEXT
  6. !BNTZ • 唯⼀ CNCF の Sandbox プロジェクトに採択された WASM ランタイム •

    ネットワーク機能や外部連携機能を持ち、実質的には WASM 向けプラットフォーム • 開発者がデフォルトで安全なビジネスロジックをすばやく実装できるように作られている Wasmcloud とは︖
  7. !BNTZ • ⾮機能要件は Capability Provider を利⽤し、ビジネスロジックのみを実装 • Capability Provider の実装は

    Redis, Memcached など変更可能 • Contract model sql blobstore httpclient 8"4. NPEVMF DBQBCJMJUZ QSPWJEFS redis … psql … JNQM s3 … keyvalue httpserver http server Bussiness logic 外部連携機能(Capability Provider)
  8. !BNTZ NATS を利⽤した Actor model での実装 NATS (Queue) Actor A3

    Actor B2 Actor D1 Actor D2 Actor E1 Actor A1 Actor B1 Actor C1 Actor A2 Actor C2 Wasmcloud Networking
  9. !BNTZ NATS Supercluster による Mesh Lattice Network Actor A1 Actor

    A3 Actor B2 Actor D1 Actor D Actor E1 Actor B1 Actor C1 ctor A2 Actor C2 3FGIUUQTXXXZPVUVCFDPNXBUDI WJ9%LQ(MJTU1-KIZ[:.0,O48TO[)S600W%,:,
  10. !BNTZ eBPF の活⽤プロダクト Networking Calico CNI – kube-proxy 不要で Kubernetes

    Service の実現 Cillium CNI / Sidecar-less Service Mesh – Service Mesh の機能を eBPF で実現(⼀部機能のために Per-node Envoy も併⽤) Observability Pixie – カーネル空間とユーザ空間双⽅のデータ取得による O11y の確保 Security Falco – カーネル空間のイベントをフックしてアラート発報