サーバーレス
サーバの管理をせずにコードを動かす形態。 サーバが無いのではなく、意識しなくてよいという意味。
特徴#
| 特徴 | 内容 |
|---|---|
| イベント駆動 | 要求が来たときだけ動く |
| 自動スケール | 0 から数千同時実行まで |
| 従量課金 | 実行時間 × メモリ。待機中は無料 |
| ステートレス | 実行間で状態を保てない |
| 実行時間の上限 | 数分〜15 分程度 |
向く / 向かない#
| 向く | 向かない |
|---|---|
| 断続的な処理 | 常時高負荷 |
| 負荷の変動が大きい | 長時間の処理 |
| イベント処理(アップロード、Webhook) | WebSocket のような持続的接続 |
| 定期実行 | 低レイテンシが必須 |
負荷が常に高いなら、常時起動のサーバの方が安い。 サーバレスの経済性は「使わない時間が長い」ことに依存する。
コールドスタート#
しばらく呼ばれないとインスタンスが破棄され、 次の呼び出しで起動からやり直す。
ウォーム … 数ミリ秒
コールド … 数百ミリ秒〜数秒(ランタイムと依存の大きさ次第)対処。
- ランタイムを軽くする(Go、Rust、小さい依存)
- 事前準備された同時実行数を確保する(有料)
- 初期化をハンドラの外に出して再利用する
設計上の制約#
| 制約 | 対処 |
|---|---|
| 状態を持てない | 外部ストアへ |
| DB 接続が枯渇する | 接続プールのプロキシを使う |
| 実行時間の上限 | 分割、非同期化 |
| 局所的なファイル | 一時領域のみ、消える |
DB 接続の枯渇は典型的な落とし穴。 1000 同時実行が各々接続すると DB が耐えられない。
参考文献#
- Eric Jonas et al. Cloud Programming Simplified: A Berkeley View on Serverless Computing. 2019. https://arxiv.org/abs/1902.03383
- AWS. Serverless Application Lens (Well-Architected). https://docs.aws.amazon.com/wellarchitected/latest/serverless-applications-lens/welcome.html
- Betsy Beyer et al. (eds.). Site Reliability Engineering. O’Reilly, 2016.(全文公開) https://sre.google/sre-book/table-of-contents/