サーバーレス コンピューティングは、マシンリソースを使用量ベースで割り当てるクラウド コンピューティング実行モデルです。サーバーレス モデルでは、デベロッパーはサーバーを管理する必要なくアプリケーションを構築して実行できます。料金は使用した実際のリソース量に対してのみ発生します。その代わりに、クラウド サービス プロバイダは、アプリケーション コードを実行するクラウド インフラストラクチャのプロビジョニング、管理、スケーリングを担当します。
サーバーレスという言葉は誤解を招きかねませんが、「サーバーなし」という意味ではありません。その代わり、サーバーレス アプリは、アプリケーション開発に関連する日常的なインフラストラクチャ作業を抽象化します。アプリケーションを実行するマシンを可視化できず、構成することもできず、管理やスケーリングの必要もありません。つまり、サーバー自体ではなく、サーバーのサービスに対して料金を支払います。
開発の観点から見ると、まるでサーバーがまったく存在しないようなものです。デベロッパーがコードを記述して本番環境にデプロイし、残りはクラウド プロバイダが処理します。
アプリケーションの構築に関しては通常、デベロッパーはコードをデプロイするために、処理とストレージのためのリソースの定義、パッチ適用、ロード バランシングなど、多くのサーバー管理タスクを実行する必要があります。こうした余分な項目はすべて、長いプロビジョニング時間と、運用上のオーバーヘッドの増加をもたらし、最終的に開発チームの作業効率低下を招きます。
サーバーレス コンピューティングは、デベロッパーに目に見えない「サーバーレス」エクスペリエンスを提供し、サーバーなど、アプリケーションの実行に必要となる可能性のあるものについて考える必要がなくなるよう努めています。その代わり、サービス プロバイダがバックグラウンドですべての作業を行い、アイドル状態の容量に対して課金されることなく、コードを実行するためのリソースを確保し、要件を満たすようにします。
サーバーレスは、家に水道を引くようなものと考えてください。自分の井戸を掘り、水質をテストし、家に水道を引くために必要なすべての外部配管を設置して維持することができます。または、都市のメインの水道に接続することもできます。水道の蛇口を回すだけで、必要なときに必要な量の水が供給され、市は実際に消費した水量に対して毎月の請求書を送付します。
同様に、クラウド プロバイダはサーバーレス アプリの実行に必要なインフラストラクチャ リソースとランタイム環境を自動的にスピンアップし、実行が完了すると自動的にゼロにスケールダウンします。通常、実行時間中のリソースに応じて課金されます。ただし、これはサービスやベンダーによって異なる場合があります。
でも、他のタイプのクラウド コンピューティングでは、従量課金制でオンデマンドのリソースが提供されるのではないですか?Infrastructure as a Service(IaaS)やPlatform as a Service(PaaS)などのクラウド サービス モデルでも、コンピューティング リソースへのオンデマンド アクセスが提供されるのは事実です。
ただし、割り当てられたクラウド インフラストラクチャは、使用していない場合でもアクティブなままになります。また、サーバー容量をスケーリングすることや、ユーザーの需要に応じてスケールアップまたはスケールダウンするようにアプリケーションを構成することも、お客様の責任になります。
一方、サーバーレス アーキテクチャはイベント ドリブンです。このモデルでは、イベントによってコードの実行がトリガーされた場合にのみ、プロバイダからリソースが提供され、リクエストに応じて瞬時に自動的にスケーリングされます。
サーバーレス クラウド コンピューティングには、通常、Function as a Service(FaaS)と Backend as a Service(BaaS)の 2 種類のサービスがあります。
FaaS は、リクエストに応じてアプリケーション・ロジックを実行するために必要なコンピューティング・リソースを提供します。これらのロジック(または関数)は、クラウド サービス プロバイダによって完全に管理されるコンテナで実行されます。サーバーレス アプリケーションは通常、イベントに応答して 1 つのアクションを実行する単一の機能に分割されます。
BaaS は、認証サービス、データベース管理、クラウド ストレージ、プッシュ通知、ホスティングなど、ウェブ アプリケーションやモバイル アプリケーションのバックエンド機能全体をサービスとして提供します。BaaS を使用すると、サーバー、コンテナ、仮想マシンを管理する必要がなくなります。
開発では、FaaS サービスを表すために「サーバーレス」という用語がよく使用されます。ただし、FaaS は技術的にはサーバーレス・テクノロジーのサブセットであることに注意してください。サーバーレス コンピューティングには、サーバーの管理、構成、スケーリング、請求がエンドユーザーから分離されているあらゆる種類のサービスが含まれます。これには、データベース、ストレージ、イベント ストリーミング、メッセージング、API ゲートウェイなどが含まれます。
一般に、サーバーレス コンピューティングは主に、存続期間が短い簡単なタスクに使用されます。最も一般的なサーバーレス コンピューティングの例には次のようなものがあります。
サーバーレスを活用するデベロッパーは、インフラストラクチャのプロビジョニング、管理、スケーリングについて心配することなく、コードの記述とビジネス ロジックの最適化に集中できます。
サーバーレス アーキテクチャは本質的にスケールアップまたはスケールダウンします。ルールの微調整が必要な他のタイプのクラウド コンピューティングの自動スケーリングとは異なり、サーバーレスの自動スケーリングは瞬時に実行され、ゼロまでスケールダウンできます。
サーバーレス料金モデルは、多くの場合、実際の使用量と関数の実行にかかる時間に基づいて課金されます。また、アイドル状態の容量には課金されないため、独自サーバーの運用と管理に関連する運用コストを削減できます。
サーバーレスにより、DevOps チームは、コードの統合、テスト、デリバリー、デプロイに必要なインフラストラクチャの定義に時間を費やす必要がなくなります。単に書き込み、本番環境にデプロイするだけです。
サーバーレス環境はあらゆる言語やフレームワークに対応しているため、Go、Python、Java、Node.js、.NET などの言語やフレームワークでの開発に最も適しています。
サーバーレス コンピューティングの最大の欠点の一つは、まだ比較的新しいテクノロジーであることです。そのため、考えられるすべてのユースケースに対応するにはまだ適していません。
さらに、サーバーレスは意図的にエフェメラルであるという特性と、ゼロまでスケールダウンする機能から、特定の種類のアプリケーションには適していません。コードを長期間実行するようには構築されておらず、金融サービス アプリケーションなど、低レイテンシの要件が厳しいアプリケーションに常にサービスを提供できるとは限りません。
最後に、すべてのコンピューティング リソースの管理をサードパーティのプロバイダに委託することには、いくつかのデメリットがあります。コードに集中する時間を確保できますが、新しいクラウド プロバイダに移行するのは難しい場合があります。また、サービスの実行場所や実行方法も把握できず、スケーリング方法、実行するハードウェア コードの種類、障害復旧の状況についてのコントロールが制限されます。
とはいえ、サーバーレス コンピューティングには多くのメリットがあります。特に、デベロッパーがより迅速に行動できるように支援し、よりシンプルで費用対効果の高い方法でクラウドベースのアプリケーションを構築できるように支援したい組織にとってはやりがいがあります。
また、サーバーレス コンピューティングが進化し続けるにつれて、現在存在する弱点の一部が時間の経過とともに解決されることも明らかです。特に、サーバーレスのオープンソース実装に関してすでに多くの作業が行われており、クラウド サービスをよりオープンにして、異なるプラットフォームや環境間でソリューションを移植可能にする方法を模索しています。