「サーバーレス」コンピューティングと言うと、多くの人は、このモデルにはコードの実行やその他の開発タスクを容易にするサーバーがないと想定しています。それは明らかな誤解です。
この誤解を打ち破った後、「サーバーレス」という名前の背後にある論理は何なのかと考えているかもしれません。
ヒントを与えておきます。「サーバーなし」ではなく、サーバーをどのように管理および実装するかが「サーバーレス」に必要です。
わかりにくいと思いませんか?
さて、あなたの疑問を解消するために、サーバーレスとそれに関連するその他の用語についてすべて学びます。まず第一に、サーバーレスは話しているうちに有名になりつつあります。実際、サーバーレス市場は、2016 年の 19 億ドルから2021 年までに 77 億ドルに達すると見込まれています。
そこで、サーバーレスについて説明し、その人気の背後にある理由を考えてみましょう。
サーバーレス コンピューティングとは何ですか?
サーバーレスまたはサーバーレス コンピューティングは、クラウド サービス プロバイダーがオンデマンドのマシン リソースをプロビジョニングし、顧客や開発者の代わりに自社でサーバーを管理するクラウドベースの実行モデルです。これは、サービス、戦略、プラクティスを組み合わせて、開発者がサーバー管理ではなくコードに集中できるようにすることで、クラウドベースのアプリを構築できるようにする方法です。
リソースの割り当て、容量計画、管理、構成、スケーリングからパッチ、アップデート、スケジュール設定、メンテナンスに至るまで、クラウド サービス プロバイダー (AWS や Google Cloud Platform など) が一般的なインフラストラクチャ タスクの管理のすべての責任を負います。その結果、開発者はプロセスとアプリケーションのビジネス ロジックに労力と時間を集中できます。
このサーバーレス コンピューティング アーキテクチャでは、コンピューティング リソースを揮発性メモリに保持することはありません。代わりに、コンピューティングは短い部分で行われます。アプリケーションを使用していない場合、そのアプリケーションにはリソースが割り当てられません。したがって、アプリで実際に消費したリソースに対して料金を支払うことになります。
サーバーレス モデル作成の主な目的は、実稼働環境へのコードのデプロイメント プロセスを簡素化することです。多くの場合、マイクロサービスなどの従来のスタイルでも機能します。サーバーレスがデプロイされると、サーバーレスが実行するアプリケーションは要求に迅速に応答し始め、必要に応じて自動的にスケールアップまたはスケールダウンします。
サーバーレス コンピューティングでは、イベント駆動型モデルを使用してスケーリング要件を決定します。したがって、開発者はアプリケーションの使用状況を予測して、必要なサーバーの数や帯域幅を決定する必要がなくなりました。事前の予約なしで、増大するニーズに基づいてサーバーと帯域幅を追加したり、手間をかけずにいつでもスケールダウンしたりできます。
サーバーレスはどのように進化したのでしょうか?
従来のシステムには、アプリの開発プロセスと展開におけるスケーラビリティと俊敏性に関連する課題がありました。市場投入までの時間が短縮され、高品質のアプリに対する需要が高まるにつれ、よりスケーラビリティと俊敏性を提供できるより優れたシステムの必要性が表面化し始めました。その結果、クラウド コンピューティングとサーバーレス モデルが進化しました。
サーバーレス モデルは、モノリシックからマイクロサービス、サーバーレス アーキテクチャまたは Function-as-a-Service (FaaS) に至るまで、さまざまな段階を経て進化しました。
- モノリシック アーキテクチャは、ソフトウェア開発のための伝統的な統一アプローチです。これは、各コンポーネントとそのサブコンポーネントがコードをコンパイルまたは実行する密結合モデルです。サービスに欠陥がある場合、アプリケーション サーバー全体とその上で実行中のサービスが停止する可能性があります。
- マイクロサービス アーキテクチャは、特定の機能を実行するために独立してデプロイされた大規模な単一アプリケーション内の小規模なサービスの集合です。これにより、大規模なアプリの迅速な配信が可能になり、開発者はサービスとしてのインフラストラクチャ (IaaS) とサービスとしてのプラットフォーム (PaaS) を使用する柔軟性が得られます。ただし、このモデルでは、PaaS と IaaS のどちらを選択するかが困難です。
- サーバーレス アーキテクチャはクラウド コンピューティングとともに進化し、より高い拡張性とビジネスの機敏性を提供します。 IaaS と PaaS の代わりに、FaaS と Backend-as-a-Service (BaaS) を利用します。ここでは、必要に応じてアプリとそのリソースがデプロイされます。サーバーを管理する必要がなく、コードの実行が終了したら支払いを停止できます。
サーバーレス コンピューティングの特性
サーバーレス コンピューティングの属性の一部は次のとおりです。
- サーバーレスを使用するほとんどのアプリケーションは、単一の機能と小さなコード単位で構成されます。
- コードはオンデマンドでのみ実行され、通常はステートレス ソフトウェア コンテナ内で実行され、デマンドに基づいてシームレスに拡張されます。
- お客様によるサーバー管理は必要ありません。
- イベントベースの実行機能を備えており、関数がトリガーされるか、リクエストを実行するイベントを受信するとコンピューター環境が作成されます。
- 柔軟なスケーラビリティにより、簡単にスケールアップまたはスケールダウンできます。コードが実行されるとインフラストラクチャの実行が停止し、コストが節約されます。同様に、関数が実行を継続する場合、必要に応じて無限にスケールアップできます。
- マネージド クラウド サービスを使用すると、ファイル ストレージ、キューイング、データベースなどの複雑なタスクを処理できます。
サーバーレスはどのように機能しますか?
サーバーレス アーキテクチャは、Function-as-a-Service (FaaS) と Backend-as-a-Service (BaaS) という 2 つの主要なアイデアを組み合わせたものです。これは FaaS に基づいており、完全にプロビジョニングされたインスタンスを必要とせずにクラウド サービスでコードを実行できます。 FaaS は、ステートレス、イベント駆動型、スケーラブルなサーバー側の機能で構成されており、クラウド サービスが完全に管理します。
このモデルにより、DevOps チームはビジネス ロジックに焦点を当てたコードを作成できます。次に、HTTP リクエストなどの関数の実行をトリガーできるイベントを定義します。その結果、クラウド プロバイダーは関数を実行し、結果をユーザーが表示できるアプリに送信します。
このように、サーバーレス モデルは、自動スケーリング、オンデマンド、従量課金制の機能によるコスト効率と利便性を提供します。そのため、最近では多くの企業や DevOps チームがサーバーレス化を進めています。
サーバーレスを使用するのは誰ですか?なぜ?
サーバーレスは、ソフトウェア開発における最も新しいテクノロジーの 1 つです。将来的にはインフラストラクチャの管理とプロビジョニングの必要性がなくなる可能性があります。
これは次の場合に役立ちます。
- より優れたアプリのテスト容易性によるスケーラビリティと柔軟性の向上を望む組織は、サーバーレス化することができます。
- アジャイルで高性能なアプリを構築して市場投入までの時間を短縮したい開発者
- サーバーを常時稼働させる必要がない企業。コストを節約するために、必要に応じてアプリケーションを使用してモジュールベースの関数を呼び出すことができます。
- 効率的なクラウドベースのアプリを構築し、クラウドへの移行を簡素化したい組織
- 開発者は遅延を軽減する方法を探しているため、ユーザーに一部の機能やアプリへのアクセスを提供できます。
- IT インフラストラクチャのメンテナンスと複雑さに対処するための十分なリソースがない企業は、問題を自動的に解決し、自社側でのメンテナンスを必要としないサーバーレス コンピューティングを採用できます。
サーバーレス モデルの著名なユーザーには、 Slack 、 Coca-Cola 、 NetFlixなどがあります。
サーバーレス モデルは、その独自の属性により、次のような多くのユースケースに適しています。
- Web アプリケーション: ユーザーの要求に迅速に対応するこのモデルを使用して、高速でスケーラブルな Web アプリケーションを構築できます。すぐに開始できるステートレス アプリや、予測不可能でまれに急増するユーザー要求に対応できるアプリを構築するのに最適です。
- API バックエンド: サーバーレス プラットフォームでは、あらゆる機能をクライアントが使用できる HTTP エンドポイントに簡単に変換できます。これらの機能またはアクションは、Web 上で有効になっている場合、Web アクションと呼ばれます。これらを有効にすると、関数を本格的な API に組み立てることが簡単になります。適切な API ゲートウェイを使用して、セキュリティ、ドメイン サポート、レート制限、OAuth サポートを強化することもできます。
- マイクロサービス: サーバーレスは、単一の機能を実行し、API を使用して相互に通信できる小規模なサービスの構築に焦点を当てたマイクロサービス モデルで広く使用されています。
マイクロサービスはソフトウェア コンテナや PaaS を使用して作成できますが、サーバーレスの方が効率的です。これにより、1 つのことを実行する短いコード行が容易になり、迅速なプロビジョニング、自動スケーリング、リソースが使用されていないときに顧客に請求しない柔軟な価格設定が提供されます。 - データ処理: サーバーレスは、ビデオ、オーディオ、画像、構造化テキストを含むデータの処理に最適です。また、データ検証、変換、強化、クレンジング、オーディオ正規化、PDF 処理などのさまざまなタスクにも適しています。シャープ化、回転、サムネイル生成、ノイズ低減などの画像処理に活用できます。データ処理におけるサーバーレスのその他の用途としては、ビデオのトランスコーディングや光学式文字認識 (OCR) があります。
- ストリーム/バッチ処理: FaaS と Apache Kafka のデータベースを使用して、強力なストリーミング アプリとデータ パイプラインを作成できます。サーバーレス モデルは、アプリ ログ、IoT センサー、ビジネス ロジック、金融市場のデータなど、さまざまなストリームの取り込みに適しています。
- 並列計算: サーバーレスは、各タスクが並列して実行されて特定のタスクを実行する、並列計算に関連するタスクに最適です。これには、データ検索、処理、マップ操作、Web スクレイピング、ゲノム処理、ハイパーパラメーター調整などが含まれる場合があります。
- その他の用途: サーバーレスは、いくつか例を挙げると、顧客関係管理 (CRM)、財務、チャットボット、ビジネス インテリジェンスと分析など、さまざまなアプリケーションにも使用されます。
注: サーバーレスは場合によっては理想的ではない場合があります。たとえば、予測可能でほぼ一定のワークロードを伴う大規模なアプリでは、従来のシステム アーキテクチャの方がよりメリットが得られる可能性があります。管理対象または自己管理型の専用サーバーを使用できます。また、組織が従来のシステムとアプリケーションを使用して完全な従来のセットアップを行っている場合、まったく新しい異なるアーキテクチャに移行するのは費用がかかり、困難になる可能性があります。
サーバーレス コンピューティングの長所と短所
すべてのコインには 2 つの側面があり、サーバーレス アーキテクチャも同様です。また、さまざまなパラメーターに基づいて、いくつかの利点と欠点があります。したがって、先に進む前に、両方の側面を理解し、それが組織にとってより良いかどうかを判断することが重要です。
利点 👍
サーバーレス アーキテクチャの利点の一部を次に示します。
効率的なコスト
サーバーレスは、使用しない場合でもリソースの料金を支払うサーバーの購入またはレンタルよりもコスト効率が高くなります。
サーバーレスでは、消費したリソースに対してのみ料金を支払う従量課金制モデルが採用されています。サーバーレス プロバイダーは、割り当てられたメモリとコードの実行時間に対してのみ料金を請求します。アイドル時間にはコストはかかりません。
その結果、インストール、ライセンス、メンテナンス、パッチ適用、サポートなどのタスクにかかる運用コストが節約されます。サーバー ハードウェアが不要なので、人件費も節約できます。
スケーラビリティ
サーバーレス システムは、要求に応じていつでもスケールアップまたはスケールダウンできるため、高レベルのスケーラビリティを提供します。このため、「弾性」とも呼ばれます。
ここでは、開発者は自動スケーリング システムやポリシーの設定やチューニングに専用の時間を費やす必要はありません。あなたが選択したクラウド プロバイダーが、これらすべてを管理する責任を負います。さらに、小規模チームの開発者は、サポート エンジニアやインフラストラクチャを必要とせずに、自分でコードを実行することもできます。
待ち時間の短縮
アプリは単一のオリジンサーバー上でホストされないため、どこからでもコードを実行できます。選択したクラウド プロバイダーがサポートしている場合は、エンドユーザーに近いサーバーでアプリの機能を実行できます。したがって、ユーザーのリクエストとサーバーの間の距離が短縮されるため、待ち時間が短くなります。
生産性
サーバーレス モデルは、サーバー管理を行う必要がないため、開発者の生産性の向上に役立ちます。また、コード内の HTTP リクエストやマルチスレッドの管理について直接考える必要もありません。
その結果、公開されたコードがイベント駆動型関数である FaaS のおかげで、バックエンド開発が簡素化されます。これらすべてにより、コードとアプリケーションの改善に費やす時間を節約できます。
アプリのデプロイメントの高速化
サーバーレスでは、開発者はアプリのバージョンをデプロイするためにバックエンド構成を実行したり、サーバーにコードをアップロードしたりする必要はありません。また、コードをビット単位ですばやくアップロードして、新製品をリリースすることもできます。
また、モノリシック アーキテクチャではないため、コードを一度にデプロイしたり、次々に機能したりする柔軟性も備えています。さらに、アプリのパッチ、更新、機能の追加、エラーの修正を迅速に行うことができます。
その他の利点には、オンデマンド サーバーによるエネルギー消費の削減によるグリーン コンピューティング、組み込みの統合により簡単になるアプリの構築、市場投入までの時間の短縮などが含まれます。
デメリット👎
次に、サーバーレス コンピューティングの欠点を見てみましょう。
パフォーマンス
場合によっては、使用頻度が低いサーバーレス コードは、専用サーバー、ソフトウェア コンテナ、または仮想マシン (VM) で継続的に実行されているコードよりも応答遅延が長くなることがあります。やり直すのにさらに時間がかかり、余分なレイテンシーが発生する可能性があるためです。
デバッグとテストが難しい
コードをデプロイした後、コードがどのように実行されるかを知る必要があります。このためにはテストする必要がありますが、サーバーレス環境ではこれが困難です。また、開発者は各バックエンド プロセスを把握できず、アプリがより小さな機能に分割されているため、デバッグが複雑になります。
セキュリティ上の問題
新たな高度なサイバーセキュリティへの懸念が増大しています。ただし、クラウド プロバイダーのセキュリティを完全に把握したり、測定したりすることは不可能です。したがって、アプリケーションに保存された機密データを含むバックエンド全体を処理する場合、危険が伴います。
長時間実行されるアプリケーションプロセスには適していません
サーバーレスはコスト効率が高いですが、すべての種類のアプリケーションに適しているわけではありません。長時間実行されるプロセスを含むアプリケーションがある場合、時間と割り当てられたリソースに基づく実行コストが非常に高くなる可能性があります。現時点では、専用サーバーのホスティングを進めることをお勧めします。
サーバーレスのその他の欠点としては、ベンダー間での切り替えの難しさとプライバシーの問題があります。
サーバーレスアーキテクチャで重要な用語
サーバーレスは、それに関連するいくつかの重要な用語について説明せずに完成することはありません。 FaaS と BaaS は、今日私たちが知っているサーバーレスの進化につながった最も著名なアイデアの 2 つです。また、サーバーレス システムを構築するには、データベース、ストレージ システム、テクノロジー スタック、フレームワークなどが必要です。そこで、それらについて少し説明しましょう。
サービスとしての機能 (FaaS)
FaaS はサーバーレスの中心的なアイデアであり、そのサブセットのように機能します。このイベント ドリブン コード実行モデル (リクエストに応答して実行されるアプリ) を使用すると、ソフトウェア コンテナーにデプロイされ、オンデマンドで実行されるロジックを作成でき、クラウド プラットフォームがそれを管理します。
BaaS と比較すると、FaaS は、開発者が既成のコードを含むライブラリに依存するのではなく、カスタム アプリを作成する際により多くの制御を提供します。
コードがデプロイされるソフトウェア コンテナはデータ統合を簡素化するためにステートレスであり、コードの実行時間は短縮されます。さらに、開発者は、クラウド プロバイダーが API ゲートウェイを介して管理する FaaS を使用して、API 経由でサーバーレス アプリケーションを呼び出すことができます。
バックエンド・アズ・ア・サービス (BaaS)
BaaS は、どちらもサードパーティのサービス プロバイダーを必要とするため、FaaS に似ています。このモデルでは、クラウド プロバイダーがデータ ストレージなどのバックエンド サービスを提供し、開発者がフロントエンド コードの作成に集中できるようにします。ただし、BaaS アプリケーションは、サーバーレス アプリケーションのようにイベント駆動型ではない場合や、エッジで実行されない場合があります。
BaaS の良い例は AWS Lambda です。開発者は、コードを送信する際に従うべきガイドラインを提供する Lambda を使用して、コンテナーでサーバーレス コードを使用します。また、ソフトウェア コンテナにコードを入力するプロセスを自動化し、マネージド サービスを提供します。
サーバーレススタック
他のソフトウェア テクノロジーと同様、サーバーレス アーキテクチャにもテクノロジー スタックが付属しています。サーバーレス システムまたはアプリケーションの作成に不可欠なさまざまなコンポーネントがまとめられています。
サーバーレス スタックには次のものが含まれます。
- プログラミング言語: 開発者がコードを記述するプログラミング言語。ベンダーに応じて、Java、JavaScript、Python、C#、Go、Node.js、F# などから選択できます。
- サーバーレス フレームワーク: フレームワークはコードにスケルトンまたは構造を提供します。サーバーレス フレームワークを開始するには、たくさんのサーバーレス フレームワークがあります。これにより、コードの構築、パッケージ化、コンパイルが可能になり、最終的にはクラウド展開が可能になります。サーバーレス フレームワークはコーディング プロセスを促進し、構成時間を短縮してスケーリングを簡素化します。サーバー フレームワークの例としては、Apex、AWS サーバーレス アプリケーション モデルなどがあります。
- サーバーレス データベース: コードがアクセスする必要があるデータを保存するために使用されます。これらは、トリガーの関数と対話するためにも必要です。これらのデータベースはサーバーレス関数のように動作しますが、データは無期限に保存されます。サーバーレス データベースの例には、DynamoDB、Azure Cosmos DB、Aurora Serverless、Cloud Firestore などがあります。
- 一連のトリガー: HTTP リクエストなどのコード実行の開始に役立ちます。
- ソフトウェア コンテナ: サーバーレス モデルを強化し、複雑さのないコンテナ化されたマイクロサービスを提供します。これらはコードのリポジトリとしても機能し、開発者がデスクトップや iOS などの複数のプラットフォーム向けにコードを作成する際の作業を容易にします。
- API ゲートウェイ: Web アクションのプロキシとして機能します。 HTTP ルーティング、レート制限、API 使用状況と応答ログの表示、クライアント ID などを提供します。
サーバーレスモデルを実装して最適化するにはどうすればよいですか?
サーバーレスに移行すると、アプリケーション、テクノロジー、コスト、セキュリティ、メリットの点で大きな変化が生じます。
あなたが新興企業または中小企業であると仮定します。その場合、市場投入までの時間を短縮し、簡素化されたテスト、デバッグ、フィードバックの収集、問題への取り組みなどによりアップデートを迅速にプッシュして、洗練されたアプリケーションをユーザーに提供できるようになります。
大規模な組織の場合、ユーザーの要求を満たすためのスケーラビリティの向上などのメリットが得られますが、それには多額のコスト投資が必要になります。
したがって、特に自分のビジネスの種類と需要に応じてサーバーレスの長所と短所を評価してから進めることが最善です。真剣に取り組む場合は、次のことから始めてください。
- ニーズを理解し、適切なサーバーレス テクノロジー スタックを特定する
- Google Cloud Functions、Azure Functions、AWS Lambda などのサーバーレス ベンダーを選択します。
- システムのパフォーマンスと機能を監視するための強力なツールをチームに提供します。リクエストの合計数、スロットル、エラー数、成功率、リクエストの継続時間、レイテンシに注意してください。
サーバーレスベンダー
市場には、選択できるサーバーレス ベンダーやクラウド プロバイダーが数多くあります。上位のもののいくつかは次のとおりです。
- AWS Lambda: すでに AWS サービスを利用している組織に最適です。ストレージ、ストリーミング、データベースなどの幅広いサービスと統合されます。
- Microsoft Azure Functions: Visual Studio Code を使用している場合は、それをお勧めします。 DevOps および CI/CD 用の Azure Pipelines とスムーズに連携します。また、ステートフル機能の Durable Functions もサポートし、統合されたモニタリングを提供します。
- Google Cloud Functions: Google サービスを使用している場合は、それが適しています。 JS、Go、Python アプリをサポートし、Google アシスタントまたは GCP から関数をトリガーできるようにし、組み込みのスケーリングを提供します。
- IBM Cloud Functions: Apache OpenWhisk ベースのサーバーレス モデルを希望する場合は、IBM Cloud Functions が最適です。これには、優れたパフォーマンス監視、REST API または IBM クラウド サービスからのイベント トリガーが含まれており、IBM の API Gateway と統合してエンドポイントを管理します。
- Knative: Kubernetes 上でサービスを実行している場合は、それを実行してください。 Google、Red Hat、IBM などの支援を受けています。
- Cloudflare Workers: 高い応答性を必要とするアプリ、特に JavaScript アプリに適しています。データ ストレージ用の Workers KV と、複数言語のコンパイルと配信を支援する WebAssembly をサポートしています。また、193 のデータセンターを備えた高分散ネットワークにより、遅延と応答性が向上します。
結論: サーバーレスの未来
サーバーレス コンピューティングは、拡張性の高いアプリケーションに対する需要の高まりとともに進化しています。また、利便性の向上、コスト効率の向上、生産性の向上など、クラウド コンピューティングが提供する多くの利点も提供します。
オライリーの調査によると、回答者の 40% がサーバーレス アーキテクチャを採用している企業に勤務しています。
サーバーレスには、コールド スタート、テスト、デバッグなどによる遅延などの懸念事項がまだありますが、クラウド プロバイダーはこれらの問題に取り組んでいます。間もなく、より洗練された形式のサーバーレスが、より多くの利点と解決された問題を伴って表面化する可能性があります。したがって、サーバーレス モデルの人気と使用率は将来的に増加すると予想されます。
こちらにも興味があるかもしれません: サーバーレス コンピューティングが新たなテクノロジである 7 つの方法