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