はじめに
サーバーレスコンピューティングは、クラウドサービスを使用してアプリケーションを設計およびデプロイする新しい方法を提供します。しかし、それは一体何であり、どのように機能するのでしょうか?
この記事では、サーバーレスとは何か、どのように機能するのか、そしてそれが開発体験にどのように影響するかを見ていきます。サーバーレスが提供する利点のいくつかを取り上げ、適切でない可能性のあるシナリオについて説明します。これにより、追加の調査を行い、サーバーレスモデルがプロジェクトに適しているかどうかを判断するために必要な背景情報が得られるはずです。
アプリケーションのすべてのデータを一箇所で管理するには、Prisma Data Platform をご確認ください。
サーバーレスとはどういう意味か?
サーバーレスとは、処理能力が実際のサーバーとしてではなく、APIを通じて公開されるモデルを指します。アプリケーションは、コードが実行される環境を管理することなく、計算リソースを使用してコードを実行できます。
多くの点で、サーバーレスは、クラウドプロバイダーによるユーザー向けリソースの抽象化における次の論理的な反復を表しています。リソースにアクセスするための仮想化されたサーバーを提供する代わりに、プロバイダーは従量課金モデルを使用してリソース自体へのアクセスを提供します。別の視点から見ると、サーバーレスは、より一般的な計算ロジックのためのマネージドサービス(たとえば、マネージドデータベースインスタンスと同様)です。
サーバーレスコンピューティング
ほとんどの場合、「サーバーレス」という言葉を使うとき、人々はサーバーレスコンピューティングのことを指しています。サーバーレスコンピューティングとは、ユーザーがAPIがヒットしたときにプロバイダーによって実行される関数、つまり計算ロジックを作成できるパラダイムです。このため、サーバーレスコンピューティングプロバイダーは、Functions as a Service(またはFaaS)プラットフォームと呼ばれることがよくあります。
サーバーレスコンピューティングで開発する場合、プロバイダーに実行させたいロジックを事前に定義します。アプリケーションは、必要に応じて多数の個別の関数を利用するように設計できます。関数は、アプリケーションが公開されたエンドポイントを介して異なるコードを呼び出すと、オンデマンドで実行されます。関数自体は状態を維持しないため、関数によって生成された出力またはデータは、呼び出し元に返されるか、外部ストレージにオフロードされます。
開発者として、サーバーレスを使用する場合、コードの実行に使用される環境の維持について心配する必要はありません。さらに、このモデルは、スケーリングを管理することなく、さまざまなトラフィック量を処理する柔軟性を提供します。支払うコストは、使用するコンピューティング能力の量に直接関連付けられているため、事前にリソースを見積もり、割り当てる必要はありません。
サーバーレスデータベース
サーバーレスデータベースは、サーバーレスパラダイムをデータベース機能に適用します。実際には、これはバックエンドサーバーリソース、スケーリング、データ管理がユーザーから抽象化されることを意味します。ユーザーは、さまざまなシナリオを処理するための容量を計画する必要性を排除するAPI駆動型サービスとしてデータベースを使用できます。
一般的に、サーバーレスデータベースは、階層型アーキテクチャを使用して実装されています。ユーザーは、バックエンドリソースへのルーティングを自動的に処理するAPIまたはプロキシゲートウェイと対話できます。ゲートウェイの背後では、実行ワーカーのプールが受信したクエリのリクエストを処理します。実際のデータは、実行ワーカーのいずれかがアクセスおよび操作できる3番目のレイヤーで維持されます。
このモデルでは、計算リソースとストレージリソースの両方を、需要に応じてバックグラウンドで独立してスケーリングできます。ユーザーはスケーリングを制御しません。代わりに、実行するクエリと保存するデータ量に対して課金されます。
トレードオフの検討
サーバーレスとは何か、そしてユーザーの視点からどのように機能するかについて説明したので、サーバーレスソリューションが適している場所を特定し始めることができます。
サーバーレステクノロジーは、すべてに適合する単一のソリューションではありません。これらの新しいパラダイムは、開発、デプロイ、および管理ライフサイクルのpartsを簡素化できますが、特定のタイプのワークロードおよびアプリケーション設計に最適に機能します。サーバーレスが適しているかどうかを示す可能性のあるアプリケーションと組織の特性をいくつか見てみましょう。
サーバーレスが適切な選択肢となるのはいつか?
サーバーレス環境は、多くのシナリオで適切な場合があります。
システム管理の経験が限られている場合
チームに豊富なシステム管理経験がない場合、サーバーレスは責任をオフロードする方法を提供します。アプリケーションコードを実行するために使用されるインフラストラクチャは、プラットフォームプロバイダーによって維持されるため、ビジネスロジックに集中できます。責任リストからインフラストラクチャ管理を排除することで、プロジェクトの成熟に合わせて迅速に開始し、速度を維持することができます。
優れたスケーラビリティが必要な場合
サーバーレスプラットフォームへの移行を開発者が動機付ける主な要因の1つは、前の点と密接に関連しています。サーバーレスアーキテクチャは、懸念事項の領域から削除することにより、スケーリングをシンプルにします。アプリケーションが今日わずかな操作しか必要としない場合でも、採用が進んだり、使用量が急増したりすると、より多くの操作が必要になる場合があります。
サーバーレスプラットフォームは、これらのシナリオに自動的に適応できます。これは、リソースの割り当てが使用パターンを自動的に反映するため、インフラストラクチャが過剰または過少プロビジョニングされることがないことを意味します。ピークまたは平均負荷を把握したり、スケーリングポリシーをテストおよび構成したりする必要はありません。プロバイダーがすでにソリューションを設計しているためです。
コストを重視する場合
前述のように、サーバーレスプラットフォームは、コストが大きな懸念事項である場合にも非常に魅力的です。サーバーレスでは、実行する操作に対してのみ支払います。必要になる場合に備えて必要なアイドル状態のサーバーに対して支払う必要はありません。これは、開発ライフサイクル全体で役立ちます。開発システムとテストシステムは、本番システムと同じプラットフォームを使用できるため、専用コンテキストの維持に関連するコストなしで、より正確にテストできます。
サーバーレスを避けるべき場合
サーバーレスモデルには多くの利点がありますが、すべての状況に適しているわけではありません。
アプリケーションがパフォーマンスに敏感な場合
アプリケーションがレイテンシまたはパフォーマンスに敏感な場合、サーバーレスアーキテクチャはニーズを満たすことができない場合があります。サーバーレスプラットフォームは使用量に応じてスケーリングできますが、使用量の増加が認識され、新しい需要を処理するようにシステムが構成されるまでにかなりの遅延があります。
これは、「コールドスタート」問題とよく呼ばれ、使用量に大きな変化があるたびにシステムに影響を与えます。この起動時間の増加により、以前のアクティビティレベルに関係なく一貫した応答時間が必要な多くのユースケースでサーバーレスが除外されます。
クラウドベースまたはベンダー固有のソリューションに抵抗がある場合
クラウドベースまたはベンダー固有のソリューションの使用に抵抗がある場合、または使用できない場合も、サーバーレスプラットフォームを避けることを選択する場合があります。クラウドベースのインフラストラクチャがコンプライアンス、プライバシーの懸念、または単純な好みとしてオプションでない場合、サーバーレスプラットフォームを使用することはオプションではありません。
サーバーレスプラットフォームは、アプリケーションがプロバイダーの実装に縛られるため、ベンダーロックインのケースも表しています。アプリケーションロジックを個別の関数のコレクションに分解すると、ワークロードが移植可能になるように見えるかもしれませんが、各サービスの動作方法の詳細により、移行に多大な投資をせずにプロバイダーを変更することはできなくなる可能性があります。
インフラストラクチャの管理にすでに慣れている場合
最後に、チームがすでにインフラストラクチャの管理と従来のデプロイメントによって提供されるコンテキストでの作業に慣れている場合、サーバーレスは多くの利点を提供しない可能性があります。たとえば、インフラストラクチャとサービスをすでに管理している堅牢なDevOpsチームがいる場合、サーバーレスによって提供される利点はそれほど魅力的ではない可能性があります。
さらに、開発者は、従来のインフラストラクチャを使用して開発者が行うのと同じ方法で、サーバーレス環境では不可能またはアクセスできない可能性のあるアプリケーションコードのテストとデバッグの方法に関連する期待を持っている可能性があります。サーバーレスプラットフォームにデプロイされた関数を、開発者が従来のインフラストラクチャを使用して行うのと同じ方法でプロファイルすることは不可能かもしれません。
プロジェクトのサーバーレスを評価する際には、これらのトレードオフをすべて考慮することが重要です。特定の状況では優れたソリューションですが、ユースケースがその1つであるかどうかを把握することが重要です。
まとめ
この記事では、「サーバーレス」が実際に何を意味するのか、そしてそれが多くのプロジェクトにとって魅力的なオプションとなる理由を説明することに焦点を当てました。Functions as a Serviceモデルがアプリケーションサーバーの管理をプラットフォームプロバイダーにオフロードする方法と、サーバーレスデータベースオファリングがデータベース操作をデータストレージから分離する方法について説明しました。その後、サーバーレス設計に最適なシナリオと、適切なソリューションではない可能性のある場合について見ていきました。
サーバーレスアプリケーション、データベース、プロバイダー、および設計に関しては、さらに学ぶべきことがたくさんあります。学習を進める上で、以下のリソースが役立つ場合があります。
- サーバーレスコンピューティングおよびデータベースプロバイダー トップ13
- 一般的なサーバーレスの課題入門
- 従来のデータベース vs サーバーレスデータベース
- サーバーレス用語集
- Martin Fowlerのサーバーレスアーキテクチャに関するページ(Mike Roberts著)
- Cloud Academyのサーバーレスコンピューティングとは
アプリケーションのすべてのデータを一箇所で管理するには、Prisma Data Platform をご確認ください。
FAQ
サーバーレスアーキテクチャは、インフラストラクチャを管理することなく、アプリケーションとサービスを構築および実行する方法です。
アプリケーションはサーバー上で実行されますが、すべてのサーバー管理はプロバイダーによって行われます。
サーバーレスアプリケーションとは、サーバーレスアーキテクチャで構築されたアプリケーションです。
アプリケーションでは、サーバーをプロビジョニングまたは管理する必要はありません。
サーバーレスであるということは、本質的にインフラストラクチャの制御をプロバイダーに譲渡することを意味するため、プロバイダーはキー管理、認証、認可などのセキュリティサービスを提供します。
サーバーレスセキュリティでは、セキュリティがアプリケーション自体を中心に構築されていないため、アプリケーションセキュリティの考え方を変更する必要があります。プロバイダーは、アプリケーションの機能に関するセキュリティを処理します。
サーバーレスバックエンドとは、サーバーレスパラダイムをデータベース機能に適用したものです。
実際には、これはバックエンドサーバーリソース、スケーリング、データ管理がユーザーから抽象化されることを意味します。ユーザーは、容量を計画する必要性を排除するAPI駆動型サービスとしてデータベースを使用できます。
サーバーレスコンピューティングとは、ユーザーがAPIがヒットしたときにプロバイダーによって実行される関数、つまり計算ロジックを作成できるパラダイムです。
このため、サーバーレスコンピューティングプロバイダーは、Functions as a Service(FaaS)プラットフォームと呼ばれることがよくあります。