サーバーレス

サーバーレス

執筆済 ソフトウェア開発インフラ

サーバの管理をせずにコードを動かす形態。 サーバが無いのではなく、意識しなくてよいという意味。

特徴#

特徴 内容
イベント駆動 要求が来たときだけ動く
自動スケール 0 から数千同時実行まで
従量課金 実行時間 × メモリ。待機中は無料
ステートレス 実行間で状態を保てない
実行時間の上限 数分〜15 分程度

向く / 向かない#

向く 向かない
断続的な処理 常時高負荷
負荷の変動が大きい 長時間の処理
イベント処理(アップロード、Webhook) WebSocket のような持続的接続
定期実行 低レイテンシが必須

負荷が常に高いなら、常時起動のサーバの方が安い。 サーバレスの経済性は「使わない時間が長い」ことに依存する。

コールドスタート#

しばらく呼ばれないとインスタンスが破棄され、 次の呼び出しで起動からやり直す。

ウォーム … 数ミリ秒
コールド … 数百ミリ秒〜数秒(ランタイムと依存の大きさ次第)

対処。

  • ランタイムを軽くする(Go、Rust、小さい依存)
  • 事前準備された同時実行数を確保する(有料)
  • 初期化をハンドラの外に出して再利用する

設計上の制約#

制約 対処
状態を持てない 外部ストアへ
DB 接続が枯渇する 接続プールのプロキシを使う
実行時間の上限 分割、非同期化
局所的なファイル 一時領域のみ、消える

DB 接続の枯渇は典型的な落とし穴。 1000 同時実行が各々接続すると DB が耐えられない。

参考文献#

ノート一覧を閉じる