# サーバーレスアーキテクチャ
## 定義
**サーバーレスコンピューティング = FaaS + BaaS**(CNCF Serverless Whitepaper, 2019; Berkeley View on Serverless Computing, 2019)。「利用課金かつ自動スケーリング」が必須条件(Berkeley View)。本質は「**サーバという単位を意識しない**」こと([[Yuuki Tsubouchi]] による定義の敷衍)。
**サーバーの二義性と対応関係**:
- **マシンサーバー**(物理・仮想マシン)を意識しなくさせるのが **BaaS**。アプリケーション指標(クエリ数・データ量)でキャパシティ計画が可能になり、インスタンス台数・スペックが隠蔽される
- **ネットワークサーバー**(常時起動プロセス)を意識しなくさせるのが **FaaS**。イベント駆動でプロセスを起動し、Graceful Restart・事前キャパシティ計画・メモリリーク管理を不要にする
**代表的 FaaS**: AWS Lambda(2014 年登場)、Knative(OSS)、OpenFaaS(OSS)。
**代表的 BaaS**: Amazon DynamoDB・Google BigQuery(データストア)、SendGrid(メール)、Auth0(認証)。
## ピタゴラスイッチ構成
FaaS が「糊」として複数 BaaS をつなぐアーキテクチャパターン。BaaS 上で発生するイベントを Function への入力とし、Function 内で別 BaaS の API を呼び出し、さらに別 Function を起動する連鎖(Rube Goldberg machine 的な構成)。クラウドプロバイダー固有の FaaS-BaaS 連携に依存するため、ベンダー非依存での実現には CloudEvents 等のイベント標準化が必要。
## サーバーフルコンピューティング(対概念)
サーバー上でのソフトウェア動作を意識してプログラミング・デプロイすること(Berkeley View での用語定義)。マシンサーバーのキャパシティ見積もり・ネットワークサーバーの Graceful Restart・メモリリーク管理などが開発者の負担となる。
## 横断的知見
- [[Yuuki Tsubouchi]] の HeteroTSDB(サーバーレス時系列データベース)は「ピタゴラスイッチ構成」の具体例であり、DynamoDB TTL イベント → Lambda → S3 という BaaS-FaaS 連携を実装している。(Source: [[@2019__yuuk.io__Rethinking-Serverless-Architecture]])
- CGI との比較: FaaS は「イベントを契機にプロセス起動」の点では CGI と似るが、BaaS の性質を持たない・HTTP 以外のイベントを扱えない・スケールが Web サーバーホスト単位になる点で根本的に異なる。(Source: [[@2019__yuuk.io__Rethinking-Serverless-Architecture]])
- 2019 年時点では Function のメモリサイズ指定が必要であり、マシンサーバーを完全には隠蔽できていない(著者による制約の指摘)。(Source: [[@2019__yuuk.io__Rethinking-Serverless-Architecture]])
## 制約
**同期リクエストのメモリ効率問題**: リクエストを 1 件ずつ別 Function で処理する場合、I/O ブロッキング中にメモリは占有したまま CPU のみ解放される → メモリ使用効率が悪くコスト増。非同期可能なケースではキューを経由して複数イベントを並行処理できる。
## 未解決の問い
- ベンダー非依存のピタゴラスイッチ構成(FaaS + BaaS + CloudEvents)は 2019 年以降どこまで進んだか?
- サーバーレスアーキテクチャとエージェント型 AI システム(LLM エージェント)の関係はどうか?LLM エージェントの「ツール呼び出し」はピタゴラスイッチ構成の新形態か?
- FaaS のコールドスタート問題はその後どのように緩和されたか?
## 関連
- Source: [[@2019__yuuk.io__Rethinking-Serverless-Architecture]]
- 著者: [[Yuuki Tsubouchi]]
- 参照エンティティ: [[Dynamo]](Amazon DynamoDB の設計論文)
- 関連概念: [[インターネットスケールサービス設計]]
## 出典
- [[@2019__yuuk.io__Rethinking-Serverless-Architecture]]