サーバレス
メリット
リクエスト数に応じたオートスケーリング
利用した分だけの課金になるので安価でスケーラブルなコンピューティングサービスを手に入れられる
キャパシティプランニング不要
サーバー管理が不要
高可用性
デメリット
コールドスタート(実行時の遅延)
FaaS(Function as a service)かCaaS(Container as as service)かで傾向が変わります。
- FaaSの遅延は言語により異なり、Goのようにネイティブコードが直接出力できる言語は、JavaのようなJITコンパイラで動く言語より速度面のアドバンテージがある
- FaaSはCaaSより遅延の最小値が低いという計測結果になったが、パッケージサイズに依存するという欠点がある。記事の例では、1KB→35MBのケースで0.4→4.0秒前後と約10倍増加。
- 一方CaaSはFaaSと異なり、コンテナサイズが100MB増えようが5GB増えようが、遅延に影響がない
最長実行時間
GPUが使えない
ベンダーロックされる
ベンダーのクラウド上のコンポーネントを組み合わせることになるから(複雑な構成になるほど)かなり強力にロックインされる
ベンダーロックイン避けるならk8s上でミドルウェアとかほぼ全て展開するしかないな
モノリシックなアプリケーション全体を運用できない
既存のモノリシックアプリをサーバレスにするには書き換えることになる
AppEngine的なPaaSはそのまま載せられるが
FaaS
サーバーサイド処理をイベントハンドラ関数という小さな単位で実装、プロビジョニング、実行するモデル
JVMとはVM起動、メモリ使用量とで相性が悪い