サーバーレス
サーバーレス・コンピューティング・モデルは、クラウド・プロバイダが基盤となるインフラストラクチャを管理し、アプリケーションの即時需要に応じて実行およびスケーリングするためのリソースを自動的に割り当て、割り当て解除するフルマネージド・クラウド・サービスです。つまり、開発者は基礎となるコンピュート・インフラストラクチャがどのようにプロビジョニングされるかについて心配する必要はありません。かわりに、アプリケーションでのビジネス機能の実装に集中できます。要するに、開発者はアプリケーション・ロジックのコードを記述することに集中する必要があります。このコードは、ファンクションにデプロイされ、アプリケーションまたはユーザーがトリガーするイベントで実行されます。サーバーレス・コンピューティング・モデルは使用量に応じて請求され、それに応じて請求されるため、アプリケーション・ロードの予期しない変更が頻繁に発生する場合、コスト効率の高い選択肢となります。
サーバーレス・コンピューティングは、クラウド・コンピューティングの最近の開発であり、近年人気が高まっています。これは、サーバーを管理またはプロビジョニングせずにコードを実行するという基本概念に一般的です。サーバーレス・プラットフォームを実装するためのOracle Cloud Infrastructure (OCI)の機能は、オープン・ソース、コンテナ・ネイティブおよびサーバーレスであるオープン・ソースのFn Projectに基づいており、あらゆるクラウドおよびオンプレミスで実行できます。
メリット
Serverlessは、クラウドで使用可能な他のサービスよりも複数のメリットを提供し、次の理由からエッジを備えています。
- 運用オーバーヘッドの削減:サーバーレス・コンピューティングにより、インフラストラクチャ、サーバー、ネットワークの管理のオーバーヘッドが軽減され、開発チームはコードの記述と新しいビジネス機能の開発に集中できます。
- 市場投入までの時間の短縮:サーバーレス・コンピューティングでは、クラウドで提供される他のコンピュート・サービスよりもアプリケーションを迅速に導入できるため、市場投入までの期間を短縮できます。
- スケーラビリティの向上:サーバーレス・コンピューティングは、スケール・アップとスケール・ダウンの両方のワークロード需要に基づいて自動的にスケーリングされます。積み重ねは自分を大切にする。
- コスト効率:サーバーレス・コンピューティングは、アプリケーション・コードの実行時間に対してのみ支払う必要があるため、コスト効率が高く、従来のコンピュート・モデルよりもコストを削減できます。
- 信頼性の向上:サーバーレス・コンピューティングには冗長性とフェイルオーバー・メカニズムが組み込まれており、アプリケーションの信頼性が向上します。
- より高い柔軟性:サーバーレス・コンピューティングは、開発者に柔軟性を提供するために、様々な一般的なプログラミング言語をサポートしています。コンテナなどのデプロイメント・モデルや、サーバーレス・コンピューティングにデプロイされたコードの記述もサポートします。
機能
サーバーレス・コンピューティング(サービスと呼ばれることが多い)により、開発者は、アプリケーション・コードの実行に必要な基礎となるインフラストラクチャを気にすることなく、コードの記述とコードのデプロイに集中できます。次のステップを使用して、OCI関数などのサーバーレス実装でコードを実行します。
- コードを優先プログラミング言語で記述し、ファンクションのコンテナ・イメージにパッケージ化します。
- func.yamlに、最大実行時間やメモリー消費量を含む関数定義を指定します。
- 実行前にコンテナ・イメージをコンテナ・レジストリにプッシュしてプルします。
- ファンクション・メタデータ(メモリーおよび時間制限)をFnサーバーにアップロードします。
- コンソールのファンクションのリストにファンクションを追加します。
- CLIコマンドまたはhttpリクエスト、スケジュール、イベント・サービスなどの外部トリガーからのトリガー
- トリガー関数で、コンテナ・イメージを特定し、コンテナ・レジストリからプルします。
- ファンクションが属するアプリケーションに関連付けられたサブネット内のインスタンスで、コンテナ・イメージで定義されたロジックを実行します。
- 実行またはアイドル時間が経過すると、コンテナ・イメージが削除され、リソースが解放されます。
プラットフォーム
OCIは、OCI FunctionsおよびOCI Container Instancesと呼ばれるサービスとしてのサーバーレスをサポートしています。
- 機能: 機能は、フルマネージドのマルチテナント、スケーラビリティ、オンデマンドで、エンタープライズ・グレードのインフラストラクチャ上に構築され、Fn Projectのオープン・ソース・エンジンを搭載したサービス・プラットフォームとして機能します。関数を使用すると、Java、Python、Node、Go、RubyおよびC#でコードを記述できます。
- コンテナ・インスタンス: コンテナ・インスタンスは、サーバーを管理することなく、すばやく簡単にコンテナを実行できるサーバーレス・コンピュート・サービスです。仮想マシンと同じ分離レベルを提供します。
ベスト・プラクティス
Serverlessは、ワークロード・リソースの需要の予測不可能な急増に対応するように設計されていますが、効率的な利用を利用するには、推奨されるベスト・プラクティスを使用して設計および実装する必要があります。
- 高速かつ最適化:高速に実行し、リソースを効率的に利用し、不要な依存関係を回避するために実装する必要があります。
- イベント主導: Serverlessは、イベントのトリガーから処理を開始してコストを削減し、スケーラビリティを向上させるイベント主導のアーキテクチャに最適です。
- マネージド・サービスによる実装:サーバーレスとマネージド・サービスを統合することで、複雑さとスケーラビリティのニーズが軽減されます。データベース、ストレージ、メッセージングなどのマネージド・サービスは、一般的にサーバーレスと対話します。
- 監視:サーバーレスのパフォーマンスとコストを監視して、低速で高価な機能を最適化します。OCI推奨監視実装を活用すること。
- セキュリティ:保存中および転送中のデータは、セキュリティ・リスクおよび攻撃を最小限に抑えるための制御へのアクセスを使用して暗号化する必要があります。
ユース・ケース
サーバーレスには、個々のビジネスおよび機能のニーズに対して複数のユースケースがあります。一般的な使用例を次に示します。
- バッチ・ジョブ:事前定義済のスケジュールと頻度でプロセスがトリガーされます。
- イベント駆動型アプリケーション:メッセージやHTTPリクエストなどの外部イベントから開始されたプロセス。
- マイクロサービス:薄い独立したサービス実装。
- 機械学習モデル:コスト効率が高くスケーラブルなAPIエンドポイントにモデルをデプロイします。
サーバーレスへのワークロードの移動
既存のワークロードをサーバーレスに移行することで、コストを削減し、回復力を高め、スケーラビリティを向上させることができます。次の情報では、ワークロードをオンプレミスからサーバーレスに移行するステップについて説明します。
- サーバーレスに移行するワークロードを特定し、サイズ、複雑性、依存関係を特定します。
- ファンクションが最も適しているか、コンテナ・インスタンスが適切である場合は、サーバーレス・プラットフォームを評価します。
- ワークロードのデータベース、ストレージおよびメッセージングなどの外部サービスの依存関係を決定します。
- アプリケーション・コードをリファクタリングして、パフォーマンスを最適化し、必要に応じてコンテナ化します。
- サーバーレス環境で予想される機能についてアプリケーションをテストします。推奨されるテスト環境を使用します。
- アプリケーションを実行のためにサーバーレス・プラットフォームにデプロイします。
- アプリケーション・パフォーマンス・メトリックおよびリソース使用率を監視します。
- 必要に応じてアプリケーションを最適化し、監視から取得したメトリックに基づいてパフォーマンスを向上させます。
- ビルドおよびデプロイメントにDevOpsパイプラインを使用して、可能なすべてのものを自動化します。
課題と制限事項
サーバーレスには利点がありますが、ワークロードのデプロイメントには次の項目を考慮してください。
- コールド・スタート:サーバーレスはイベントに基づいてトリガーするように設計されているため、処理を開始するためにすぐには使用できません。開始にかなりの時間がかかる場合でも、超低レイテンシ要求を考慮してください。
- 実行タイムアウト:サーバーレスは、迅速な機能とリソースの解放を実現するために構築されています。その結果、デッド・ロックまたは無限ループおよび終了の予期しないシナリオをサーバーレスで処理するためのタイムアウトが関連付けられています。これらのシナリオは、データ損失や不安定な状態シナリオにつながる可能性があります。
- インフラストラクチャ・アクセスの制限:サーバーレス・コンピューティングは、実行されているインフラストラクチャへの最小限のアクセス権を持っているため、情報を永続化するために外部の状態管理またはストレージ・サービスに依存する必要があります。
- 複雑性:複雑なワークフローと依存関係を持つ従来のアーキテクチャでは、デバッグやトラブルシューティングの問題のために、サーバーレスによる複雑な処理が増加する可能性があります。
サーバーレスの未来
サーバーレスの未来には、複雑なインフラストラクチャを管理する必要がなくなり、課題を手動でスケーリングする必要がなくなります。また、利用に対してのみ支払う一方で、アプリケーション・ロードの予期しないサージの処理も含まれます。すぐに利用できるエンタープライズ・シナリオを処理するための開発者の労力を最小限に抑えるために、複数のフレームワークおよびソリューションがサーバーレスで開発および進化しています。サーバーレス上のツール、フレームワークおよびインストール可能なプラットフォームについては、CNCFランドスケープを確認してください。