Slide 1

Slide 1 text

Edgeコンピューティング 入門 怒田 晟也 NIKKEI Tech Talk (Oct 2023) ぬた

Slide 2

Slide 2 text

一般的なWebサービスの設計 ユーザ CDN バックエンド 10 ms 50 ms

Slide 3

Slide 3 text

ユーザに近いCDNを活用した高速化 ユーザ CDN バックエンド 10 ms ユーザのより近くから キャッシュを返す 一般的なWebサービスの設計 50 ms

Slide 4

Slide 4 text

CDNで色々したい ユーザ CDN バックエンド 10 ms キャッシュが返せるなら リダイレクションしたい A/Bテストしたい 認証したい rewriteしたい 一般的なWebサービスの設計 50 ms

Slide 5

Slide 5 text

Edge コンピューティング

Slide 6

Slide 6 text

「Edgeコンピューティング」の2つの見方 ⬩ 「CDNのプラグイン」としてのEdgeコンピューティング ⬩ 「バックエンド実行環境」としてのEdgeコンピューティング

Slide 7

Slide 7 text

CDNの機能を「自分で」拡張できる (ミドルウェア) 「CDNのプラグイン」としての Edgeコンピューティング ユーザ CDN CDN上のバックエンド (認証、A/Bテストなど) バックエンド リクエスト内容 CDNの振る舞い変更 (リダイレクトなど)

Slide 8

Slide 8 text

「バックエンド実行環境」としての Edgeコンピューティング ユーザ (󰑔 米国リージョン) バックエンド (󰏦 日本リージョン) 150 ms

Slide 9

Slide 9 text

ユーザにより近い部分でアプリを実行できる 10 ms ユーザ (󰑔 米国リージョン) CDN上の バックエンド (󰑔 米国リージョン) 「バックエンド実行環境」としての Edgeコンピューティング ⬩ Edge SSR (Server Side Rendering) ⬩ API エンドポイント ⬩ OGイメージ動的生成 + CDNキャッシュ

Slide 10

Slide 10 text

注意点

Slide 11

Slide 11 text

バックエンドのリージョンに注意 10 ms ユーザ (󰑔 米国リージョン) CDN上の バックエンド (󰑔 米国リージョン) 導入すれば速くなるわけではない PostgreSQL データベース (󰏦 日本リージョン) 150 ms

Slide 12

Slide 12 text

バックエンドのリージョンに注意 導入すれば速くなるわけではない 10 ms ユーザ (󰑔 米国リージョン) CDN上の バックエンド (󰑔 米国リージョン) 分散 データベース (󰑔 米国リージョン) 10 ms 分散 データベース (󰏦 日本リージョン) 裏で同期

Slide 13

Slide 13 text

CPU・メモリバウンドの処理には不向き 限られた計算資源 Cloudflare Workers Fastly Compute@Edge Vercel Edge Functions

Slide 14

Slide 14 text

アプリケーションはできるだけ小さく 大きいアプリではコールドスタート時間が発生する (場合もある) https://blog.cloudflare.com/better-micro-frontends/

Slide 15

Slide 15 text

実行環境

Slide 16

Slide 16 text

旧来のサーバーレス Edgeなサーバーレス Ser ハードウェア Ser ホストOS Ser Hardware アプリ (プロセス) OS Ser 言語処理系 (V8/Wasmtimeなど) Serアプリ (グリーンスレッド ) アプリ (プロセス) ユーザー 空間 より軽量・より細かい隔離技術への移行 HW仮想化 Serアプリ (グリーンスレッド ) Ser ゲストOS Ser ゲストOS

Slide 17

Slide 17 text

Cloudflare Workers / Vercel Edge API JavaScript主体のAPIデザイン ⬩ V8 JavaScriptエンジンベース ⬩ 言語処理系レベル (V8 Isolate) で隔離 ⬩ 同じインスタンスを使い回してコールドスタート (msオーダー) を回避 ⬩ JavaScriptメイン + WebAssembly (C, C++, Rust) ⬩ API は Webブラウザから拝借: fetch, Request, …

Slide 18

Slide 18 text

WinterCG: Web-interoperable Runtimes Community Group JavaScriptメインなプラットフォーマーたち

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

Fastly Compute@Edge API 言語に依存しないAPIデザイン ⬩ WebAssembly エンジンベース (JavaScriptインタプリタ丸ごとコンパイル) ⬩ 言語処理系レベルで隔離 ⬩ 毎回新しいインスタンスで実行される (μsオーダーで起動できる) ⬩ JavaScript, Rust, Go 用の公式SDK ⬩ API は Webブラウザから拝借: fetch, Request, …

Slide 21

Slide 21 text

Bytecode Alliance WebAssemblyメインなプラットフォーマーたち

Slide 22

Slide 22 text

“Edge” な環境 vs. コンテナ コンテナに比べると制約がある ⬩ Node.jsでもWebブラウザでもない独特なJavaScriptの世界 ⬩ コンテナの方が自由自在 ⬩ “Edge” な環境はスケーラビリティのための一種の妥協 ⬩ 早い起動時間・スケールアウトの面倒を任せたい場合に “Edge” が便利