FaaS(Function as a Service)
wikiより
クラウドコンピューティングにおけるサービスの種類の一つ。関数や機能といった小さな粒度でサービスを提供すること。サーバーレス・コンピューティング。
- 例 : AWS Lambda は、大規模なパブリッククラウドベンダーによる最初のFaaS
エッジ系FaaS
最近Lambdaのような1リージョンで動作するFaaSとは異なり。 CDNを提供している会社からCDNエッジで動作するFaaSサービスが増えてきました。
https://yusukebe.com/posts/2021/functions-at-edge/
- Cloudflare Workers
- Fastly Compute@Edge
- AWS CloudFront Functions
- AWS Lambda@Edge
- Vercel Edge Functions
Lambda@EdgeはLambdaをエッジで動作させるものなので、Lambda@Edgeを除外します。
これ以外のエッジ系FaaS系
上記は基本的にEdge Webサーバー側で動作するサーバーサイドService Workerなのが特徴です。
PWAのService Workerはクライアント側で動作するものですが、サーバーサイド版Service Workerというもので、Cloudflare WorkersのWorkersはService Workerから来ています。
上記をEdge系サーバーサイドService Workerとしてこのブログでは扱います。
また、未確定情報ですがVercel Edge FunctionsはCloudflare Workers上で動作してるという指摘もあります。
Edge系サーバーサイドService Worker
特徴
エッジwebサーバー上で動作するService Workerという実装。
後発なのに何故Lmabdaではなく違う実装にするのでしょうか?
Lmabdaには以下の問題があります。
- コールドスタート : 実行するまでの時間が長い
- コンピュータ資源が多く必要
- コストがかかる。
- エッジに無いので、リージョンから遠い場合ラグが発生する。
結果としてリクエスト毎の実行には使いづらい面があり。
対してEdge系サーバーサイドService Workerはリクエスト毎での実行に向いた実装といった所かと思います。
このため、幾つかLambdaより劣る箇所もあります。
cons
- Lambdaのような多数の言語には対応していない。(Service Workerとほおぼ同じ制限)
- 基本的に各ベンダーが用意している環境
- javascript + web assembly
- javascriptへのコンバーターを各ベンダーで用意している事もある、ベンダー毎に用意している言語に相違がある可能性がある。
- 仕様上Lambda等より制限や機能の範囲が限られている。
- 実行時間
- 他サービスへのアクセス制限
- コンピュータ資源(メモリ・実行時間が少ない)
- ファイルシステム等各種リソースへの制限
pros
- 省コンピュータ資源リソース
- 低価格 : Cloudflare Workersに至っては無料枠でも十分な実行時間がある。
- webサーバーのリクエス毎に実行に耐えうるコールドスタート時間
- エッジにあるため、どのリージョンでも低レイテンシ
- エッジにあるため、他エッジサービスとの連携ができる。
ユースケース
- Basic 認証
- ヘッダの書き換え
- Geo IP による処理
- Cookie のパース
- A/B テスト
- IP でのブロック
- リダイレクト
等もありますが、最近のトレンドとしてjamstackとの相性が良くISR等のEdge系サーバーサイドService Workerならではの便利な実装ができるようになってきています。
また、ベンダー毎に他エッジサービスAPI等、互換性が無いAPIもあるものもあります。
- CloudflareのエッジKVS DB : Cloudflare Workers KV のAPI
- platform API 一覧
- platform API例 : Routes
Cloudflare Workers
CloudflareのEdge系サーバーサイドService Worker 仕様詳細
無料・有料Planはworers KVストレージのplanとコミコミ。
Free | 有料plan | |
---|---|---|
料金 | $0 | $5/mo |
リクエスト/日 | 10万件 | 〜100万件 +リクエスト100万件毎に0.15$/mo加算 |
リクエストあたりのCPU時間 | リクエストあたりのCPU時間:10ミリ秒以内 | リクエストあたりの実時間:30秒以内 |
遅延 | 最小遅延は最初のリクエスト後 | 常時最小遅延 |
worers KV 読み込み操作/日 | 10万件 | 1000万件 |
worers KV 書き込み操作、削除操作、列挙操作/日 | 1,000件 | 100万件 |
- 無料planのリクエストあたりのCPU時間はCPU実時間で、リソース非同期読み込み等の時間は入らない。
- worers KVやAPI読み込み待ちの非同期時間は計算の対象外。
- 有料planは全てコミコミ30秒タイムアウト(2022/3/23現在)
- エッジサーバー更新によりCPU速度は順次改善
JavaScriptモジュール
Cloudflare WorkersでJavaScriptモジュールのサポートを開始
標準化::Web-interoperable Runtimes Community Group (WinterCG)
workersは標準化を進めており、WinterCGによってベンダーロック箇所が減る模様。
2022/06時点の標準化団体
- Cloudflare
- Vercel
- Shopify
- Node.js
- Deno
- igalia
The next chapter for Cloudflare Workers: open source
Web相互運用性JavaScriptランタイムコミュニティグループ
CloudflareはVercel、Shopify、およびNode.jsとDenoの両方の中心的な個々のコントリビューターと協力して、Webブラウザではない、JavaScriptベース開発環境で標準化Web APIを相互運用できる実装に焦点を当てた、新しいコミュニティグループの設立を発表いたします。
Cloudflare pages functions
Cloudflare pages で直接workersを使う仕組みとしてCloudflare pages functionsが2022/07現在ベータ公開されました。
これでworkers込でpagesをデプロイでるようになり**(faas + jamastack)**、cloudflareのみで動的ページを作成できるようになりました。
ローカル開発環境でもworker込みでpagesをテストできます。