# サーバーレスアーキテクチャ ## 定義 **サーバーレスコンピューティング = 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]]