サーバーレスとは
サーバーレスは、開発者がサーバーを管理する必要なくアプリケーションを構築および実行できるようにするクラウドネイティブ開発モデルです。サーバーレス・コンピューティングはイベント駆動型で、自動的にスケーリングし、通常は従量課金制の価格モデルで提供されます。サーバーレス・アーキテクチャは、必要な場合にのみアプリケーションを起動する設計手法を指します。
サーバーレスでは、開発者はコードをコンテナにパッケージ化してデプロイします。デプロイされたサーバーレス・アプリケーションは需要に対応し、必要に応じて自動的にスケールアップやスケールダウンを行います。パブリッククラウドプロバイダーのサーバーレスサービスは、通常、イベント駆動型実行モデルを使用してオンデマンドで課金されます。そのため、サーバーレス機能がアイドル状態である間は、費用がかかりません。
「サーバーレス」とは、サーバーが存在しないという意味ではありません。サーバーが抽象化され、アプリケーション開発から切り離されていることを意味します。サーバー・インフラストラクチャのプロビジョニング、保守、スケーリングといった日常的な作業はクラウドプロバイダーが処理します。サーバーレスモデルでは、クラウドプロバイダーが物理サーバーを実行し、ユーザーに代わってリソースを割り当てます。すると、ユーザーはコードをただちに本番環境にデプロイできます。
サーバーレス・コンピューティングとサーバーレス・アーキテクチャの違い
サーバーレス・コンピューティングはアプリケーション開発モデルを指し、サーバーレス・アーキテクチャはアプリケーションの設計手法を指します。サーバーレス・コンピューティングとサーバーレス・アーキテクチャは同じ意味で使われることがよくありますが、概念は異なります。
サーバーレス・コンピューティング
サーバーレス・コンピューティングは、クラウドプロバイダーがクラウド・インフラストラクチャとアプリケーションのスケーリングの両方の管理を担うという点で、他のクラウドコンピューティング・モデルとは異なります。アプリケーションはサーバーのプロビジョニングと保守を行わず、クラウドプロバイダーが提供する、自動的に管理されるコンピューティング・リソース上で実行されます。サーバーレス・アプリケーションはコンテナにデプロイされ、呼び出されたときにオンデマンドで自動的に起動します。
標準の Infrastructure-as-a-Service (IaaS) クラウドコンピューティング・モデルでは、ユーザーは容量を単位で事前に購入します。つまり、パブリッククラウドプロバイダーに、アプリケーションを実行するために常時稼働しているサーバーコンポーネントの料金を支払います。需要が高いときにサーバーの容量をスケールアップし、その容量が不要になった場合にスケールダウンするのはユーザー側の作業です。アプリケーションの実行に必要なクラウド・インフラストラクチャは、アプリケーションが使用されていないときでもアクティブです。
サーバーレス・コンピューティングの種類
サーバーレス・コンピューティングはいくつかのカテゴリに分類できます。
- Function-as-a-Service (FaaS): FaaS は、短期間のコンテナでイベント駆動型の機能を実行します。サーバーインスタンスを管理する必要はなく、機能はトリガーされた場合にのみ実行されます。
- Backend-as-a-Service (BaaS):BaaS は、認証、データベース、メッセージング、ストレージを処理するフルマネージド型のバックエンドサービスを提供します。モバイルアプリケーションや Web アプリケーションでよく使用されます。
- サーバーレス・データベース:サーバーレス・データベースは自動的にスケーリングします。インフラストラクチャの管理は必要ありません。
- サーバーレスコンテナ:サーバーレスコンテナは手動によるプロビジョニングが不要で、動的にスケーリングします。
- サーバーレス・エッジコンピューティング:サーバーレス・エッジコンピューティングは、ユーザーの近くでコードを実行し、レイテンシーを短縮します。
サーバーレス・アーキテクチャ
イベントによってアプリケーションコードの実行がトリガーされると、パブリッククラウドプロバイダーはそのコードにリソースを割り当てます。コードの実行が完了すれば、ユーザーの料金の支払いは生じません。また、サーバーレスにより、開発者はアプリケーションのスケーリングやサーバーのプロビジョニングに関連するタスクから解放されます。オペレーティングシステムとファイルシステムの管理、セキュリティパッチ、負荷分散、容量管理などの定型作業は、すべてクラウドサービスプロバイダーにオフロードされます。アプリケーションは、全体をサーバーレスとして構築することも、サーバーレス・コンポーネントと従来のマイクロサービス・コンポーネントを組み合わせて構成することもできます。
マイクロサービス・コンポーネントを使用するサーバーレス・アーキテクチャは、サーバーレス・マイクロサービスと呼ばれます。サーバーレス・マイクロサービスでは、サーバーレス・アーキテクチャが開発者のコード作成を可能にし、マイクロサービスがアプリケーションをより小さく管理しやすいコンポーネントに分割します。この組み合わせにより、開発とデプロイが迅速になります。
Red Hat のリソース
サーバーレスのメリットとデメリット
メリット
- サーバー管理タスクの負荷軽減:サーバーのプロビジョニング、保守、スケーリングを行う必要がないため、開発者はアプリケーションに集中する時間を増やすことができます。
- コスト効率: 従量課金制で提供され、実際に機能を実行した時間に対してのみ料金が発生するため、アイドル状態のリソースにかかるコストが削減されます。
- 開発とデプロイの迅速化: インフラストラクチャの管理作業が減り、デプロイのセットアップが最小限で済むため、開発者の生産性が向上します。
- 自動スケーリング:機能とサービスは需要に応じて自動的にスケールアップまたはスケールダウンされます。
- 組み込みのセキュリティ:セキュリティの更新とパッチはプロバイダーが管理するため、サーバーの構成ミスに関連するリスクが軽減します。
デメリット
- アーキテクチャの複雑さ:複数の機能が非同期で対話するため、イベント駆動型のワークフローは複雑になる可能性があります。
- インタラクションの制約: コンポーネントの使用方法がクラウドプロバイダーによって制限される場合があり、これによって柔軟性が低下する可能性があります。
- ベンダーロックイン:サーバーレスサービスがクラウドプロバイダーのエコシステムと緊密に統合されている場合、移行が困難になる可能性があります。
サーバーレスのユースケース
一般的なサーバーレスのユースケースとしては、バックエンド API (アプリケーション・プログラミング・インタフェース) と Web アプリケーション、ビジネスプロセス自動化、サーバーレス Web サイト、複数のシステム間の統合などがあります。
サーバーレス・アーキテクチャは、即座に開始できる非同期のステートレス・アプリケーションに最適です。予測できない需要の急増がまれに見られるユースケースに適しています。
たとえば、実行の頻度は低いが大量のイメージが一度に着信する場合にも対応できるようにしておく必要がある、着信イメージファイルのバッチ処理のようなタスクです。あるいは、データベースに着信する変更を監視し、その変更を品質基準と照らし合わせたり、それらを自動変換したりするなどの一連の機能を適用するようなタスクです。
サーバーレス・アプリケーションは、着信データストリーム、チャットボット、スケジュールされたタスク、ビジネスロジックなどに関連するユースケースにも適しています。
FaaS とクラウドプロバイダーの役割
Function-as-a-Service (FaaS) は、イベント駆動型機能に重点を置いた一般的なサーバーレスモデルであり、開発者はカスタムのサーバー側ロジックを記述して、クラウドサービスプロバイダーが完全に管理するコンテナにデプロイできます。このようなコンテナには以下のような特長があります。
- ステートレス:データ統合がシンプルになります。
- 一時的:ごく短時間だけ実行して、すぐに終了させることができます。
- イベント駆動型:必要なときに自動的に実行されます。
- フルマネージド:料金は使用した分だけ発生します。
FaaS では、開発者はより高度な制御ができるようになり、API (API ゲートウェイを介してクラウドプロバイダーが管理する) 経由で機能を呼び出すことができます。
主要なクラウドプロバイダーは、AWS Lambda、Azure Functions、Google Cloud、IBM Cloud Functions などの FaaS ソリューションを提供しています。Red Hat® OpenShift® Serverless (Knative をベースとする) などのオープンソース・プラットフォームを使用して、独自の FaaS 環境を実行している企業もあります。
FaaS をバックエンドサービスである BaaS と比較した場合、BaaS では、開発者は一般的に API を介して認証、暗号化、データベースなどのサードパーティサービスにアクセスします。BaaS でバックエンドタスクは単純化されますが、カスタム・アプリケーション・ロジックの制御は低下します。
Knative とは
Kubernetes はコンテナ化されたアプリケーションを管理するための一般的なプラットフォームですが、サーバーレス・ワークロードをネイティブにサポートしてはいません。Knative は、Kubernetes でサーバーレス・アプリケーションをデプロイ、実行、管理するために必要なコンポーネントを追加するオープンソース・プロジェクトです。
Knative は、Red Hat OpenShift などの Kubernetes プラットフォームにコードをデプロイできるようにすることで、サーバーレス環境の構築を可能にします。Knative を使用すると、コードはコンテナイメージとしてパッケージ化され、システムは需要に応じてインスタンスを自動的に起動および停止します。
Knative には 3 つの主要なコンポーネントがあります。
- Build:ソースコードをコンテナに変換します。
- Serving:リクエスト駆動型の需要に基づいて、コンテナを自動的にデプロイおよびスケーリングします。
- Eventing:アプリケーション、クラウドサービス、Software-as-a-Service (SaaS) システム、Apache Kafka のストリームなど、さまざまなソースからのイベントを管理して機能をトリガーします。
従来のサーバーレス・ソリューションとは異なり、Knative はモノリシックなアプリケーションからマイクロサービスや小さな機能に至るまで、幅広いワークロードをサポートします。オンプレミス環境を含む、あらゆる Kubernetes 対応プラットフォーム上で実行できます。
Knative の主なメリットには次のようなものがあります。
- マイクロサービスおよびサーバーレス・ワークロードをサポート:Kubernetes 内にイベント駆動型のステートレスな機能をデプロイできます。また、サーバーインスタンスを手動で保守しなくても動的にスケーリングする、長期稼働のマイクロサービスをデプロイすることもできます。
- コストとリソース使用の最適化: Pod が常に動作している従来のマイクロサービスとは異なり、Knative はゼロへのスケーリングをサポートします。つまり、リクエストが受信されない場合はリソースの割り当てを解除し、コストを削減します。
- 標準化された API と柔軟性: Knative は Kubernetes ネイティブのパターンに従っており、複数のクラウドプロバイダー間で機能します。
Knative はサーバーレス・コンピューティングの能力を Kubernetes にもたらし、サーバーレス・ワークロードのデプロイと管理を単純化します。
Red Hat を選ぶ理由
Red Hat OpenShift Serverless は、インフラストラクチャの細部の管理を気にすることなくサーバーレス・アプリケーションを迅速に構築・デプロイするのに役立ち、 ハイブリッドおよびマルチクラウド環境全体に可搬性と一貫性をもたらすエンタープライズレベルのサーバーレス・プラットフォームを提供します。
OpenShift Serverless により、開発者は Kubernetes の一連のカスタムリソース定義 (CRD) と関連するコントローラーを使用して、ソース中心のクラウドネイティブ・アプリケーションを作成できます。また、OpenShift Serverless は Red Hat OpenShift へのインストールが容易であることに加え、他の Red Hat 製品でもテスト済みであり、受賞歴のあるサポートの利用が可能であるため、運用チームの作業が単純化されます。
OpenShift Serverless は、アプリケーションを Red Hat OpenShift Service Mesh やクラスタモニタリングなどの他の Red Hat OpenShift Container Platform サービスと統合することで、サーバーレス・アプリケーションの開発とデプロイのための完全なソリューションを提供します。開発者は、マイクロサービス、レガシーアプリケーション、サーバーレス・アプリケーションを単一のプラットフォームでホストできるというメリットを得られます。アプリケーションは Linux® コンテナとしてパッケージ化され、どこでも実行できます。
Red Hat OpenShift Virtualization を導入すべき 15 の理由
Red Hat OpenShift Virtualization は単一のプラットフォームで仮想マシンとコンテナを実行し、IT 運用を統合および単純化できます。その詳細をご覧ください。