ウェブアプリケーション向けサーバーレスアーキテクチャ
サーバーレス:サーバーを管理せずにコードを実行する
サーバーレスコンピューティングは、サーバーについてまったく考える必要のないアプリケーションを構築する方法です。コードを書き、クラウドプロバイダーにアップロードすると、スケーリング、可用性、セキュリティパッチなど、すべてを彼らが処理します。コードが実際に使用したコンピューティング時間に対してのみ支払い、アイドル状態のサーバー容量に対しては支払いません。
関数 as a Service
サーバーレスの最も一般的な形態は、Functions as a Service(FaaS)です。AWS Lambda、Cloudflare Workers、Vercel Functions、および同様のサービスを使用すると、イベントに応答する個別の関数をデプロイできます。イベントは、HTTPリクエスト、ファイルのアップロード、キューに出現するメッセージ、スケジュールされたタイマーなどです。関数は実行され、作業を終えて停止します。
このモデルは非常にスケーラブルです。1つのリクエストが来ると、1つの関数が実行されます。100万のリクエストが来ると、100万の関数が並行して実行されます。容量をプロビジョニングしたり、トラフィックの急増を心配する必要はありません。クラウドプロバイダーが自動的に処理します。
コールドスタート問題
サーバーレスの主な欠点はコールドスタートです。関数がしばらく使用されていない場合、プロバイダーはコードをメモリにロードし、ランタイムを起動してからリクエストを処理する必要があります。これにより、最初のリクエストに数百ミリ秒の遅延が追加されます。ユーザー向けアプリケーションでは、これが顕著になる可能性があります。
コールドスタートを軽減する方法があります。定期的なリクエストを送信して関数をウォーム状態に保つことができます。プロビジョニングされた同時実行性を使用して、最小限のインスタンスを準備状態に保つことができます。また、起動が速いランタイムを選択することもできます。Node.jsやPythonはJavaや.NETよりも起動が速いです。Cloudflare Workersのような一部のプロバイダーは、異なるアーキテクチャを使用してコールドスタートを実質的に排除しています。
サーバーレスを使用するタイミング
サーバーレスは多くのユースケースに最適です。トラフィックパターンが変動するAPIは自動スケーリングの恩恵を受けます。画像処理、ビデオトランスコーディング、データ変換などのバックグラウンドタスクはサーバーレスに最適です。日次レポートの送信や古いデータのクリーンアップなどのスケジュールされたタスクは簡単に実装できます。また、外部サービスからのイベントに応答する必要があるWebhookは自然な適合です。
サーバーレスは、長時間実行プロセス(関数のタイムアウト制限は通常15分)、予測可能な高トラフィックのアプリケーション(専用サーバーの方が安い場合がある)、およびGPUなどの特殊なハードウェアを必要とするワークロードにはあまり適していません。
サーバーレスアプリケーションの構築
典型的なサーバーレスアプリケーションは、複数のサービスを一緒に使用します。APIゲートウェイはHTTPリクエストを受信し、Lambda関数にルーティングします。DynamoDBやAurora Serverlessなどのサーバーレスデータベースがデータを保存します。CDNが静的ファイルを提供します。認証はCognitoやAuth0などのサービスによって処理されます。ファイルストレージはS3または同様のオブジェクトストレージを使用します。
Serverless FrameworkやSST(Serverless Stack)などのフレームワークを使用すると、サーバーレスアプリケーションの定義とデプロイが容易になります。ローカル開発環境を提供し、クラウドリソースの構成を処理し、複数の環境を簡単に管理できるようにします。
一緒に取り組みましょう
さらに詳しい情報やプロジェクトのヘルプ、またはアイデアの構築が必要ですか?
簡単な質問でもフルプロジェクトでも、お気軽にどうぞ。お問い合わせいただき、あなたのアイデアを一緒に実現しましょう。
お問い合わせ →