サーバーレスのジョブ管理とエフェメラル・コンピュート・ワーカーを使用してメディアを処理します
大規模なメディア・ファイルの処理は、タイムリかつ効率的に処理するために大規模なコンピュート・シェイプを必要とするリソース集中型の操作です。メディア処理リクエストがアドホックおよびオンデマンドの場合があり、新しい作業の待機中にインスタンスがアイドル状態のままになる場合、コスト効率は低下しません。
OCI FunctionsやOCI NoSQLなど、Oracle Cloud Infrastructure(OCI)のサーバーレス機能を活用することで、エフェメラルなOCI Computeワーカーを使用してメディア・コンテンツを処理するための管理システムを迅速に作成できます。
アーキテクチャ
このリファレンス・アーキテクチャは、OCIコンピュート・インスタンスを使用してデジタル・メディアを処理する方法を示しています。ファイル(メディア・アセット)を取得し、計算負荷の高い操作(たとえば、ffmpeg
トランスコードや他の処理ファンクション)を実行し、その結果を出力バケットに送り、後続のアクティビティがアップして使用できるようにします。
ジョブの作成の一部として、ワーカー・インスタンスが起動され、アップロードされたオブジェクトが処理されます。ワーカーは次に、ソース・オブジェクト・ストレージ・バケットからビデオを読み取り、ビデオをトランスコーディングし、新しいバージョンを宛先オブジェクト・ストレージにアップロードして消費することで、ジョブを処理します。宛先オブジェクト・ストレージ・バケットへのアップロードに成功すると、ワーカー・インスタンスは自身を終了します。
ジョブ管理はOCIファンクションによって実行され、ジョブの状態はOCIのNoSQL表に格納されます。プリエンプティブル容量を使用して、ジョブ当たり1つのコンピュート・ワーカー・インスタンスが起動されます。プリエンプティブル容量が使用できない場合、ワーカーはオンデマンド容量を使用して起動されます。定期的なヘルス・チェックが実行され、割当てまたは制限に達したために処理されていないジョブが再試行されることが検証されます。全ての職務管理は一元的に記録され、従業員は処理できない職務に関する通知を送信します。
次の図は、この参照アーキテクチャを示しています。
- リージョン
Oracle Cloud Infrastructureリージョンは、アベイラビリティ・ドメインと呼ばれる1つ以上のデータ・センターを含むローカライズされた地理的領域です。地方は他の地域から独立し、たくさんの距離(国や大陸など)を分けることができます。
- オブジェクト・ストレージ
Oracle Cloud Infrastructure Object Storageサービスは、信頼性およびコスト効率が高いデータ耐久性を実現するインターネット規模の高性能なストレージ・プラットフォームです。オブジェクト・ストレージ・サービスでは、分析データ、およびイメージやビデオなどのリッチ・コンテンツを含む、あらゆるコンテンツ・タイプの非構造化データを無制限に格納できます。
オブジェクト・ストレージ・バケットは、オリジナル(ソース)および処理されたメディア(宛先)の場所として使用されます。
- プリエンプティブル・コンピュート・インスタンス
プリエンプティブル・インスタンスの動作は通常のコンピュート・インスタンスと同じですが、他の場所で必要になったときに容量が再利用され、インスタンスは終了します。ワークロードがフォルト・トレラントで、中断に耐えうる場合、プリエンプティブル・インスタンスはコストを削減できます。たとえば、プリエンプティブル・インスタンスを使用して、中断を許容できるワークロードのコストを最適化できます(停止して後で再開できるテストなど)。
エフェメラル・コンピュート・ワーカーは、最初にプリエンプティブル・インスタンスを使用して起動しようとします。
- 関数
Oracle Functionsは、完全に管理されたマルチテナントでスケーラビリティが高くオンデマンドのFunctions-as-a-Serviceプラットフォームです。Fn Projectのオープン・ソース・エンジンを利用します。関数を使用すると、コードをデプロイし、直接コールするか、イベントに応答してトリガーできます。Oracle Functionsは、Oracle Cloud Infrastructure RegistryでホストされているDockerコンテナを使用します。
Pythonで記述されたOracle Functionsは、メディア処理の作成およびモニターに使用されます。
- NoSQL
NoSQLデータベース・サービスは、オンデマンドのスループットおよびストレージ・ベースのプロビジョニングを提供します。JSON、表およびキーバリューのデータ型がサポートされ、いずれもフレキシブルなトランザクションが保証されます。
NoSQLデータベースは、各処理ジョブのステータスを追跡するために使用されます。ジョブ管理機能およびエフェメラル・コンピュート・ワーカーは、NoSQL表を使用して、メディア処理ワークフロー中に非同期に通信します。
- ロギング
Oracle Cloud Infrastructure Loggingサービスは、テナンシ内のすべてのログに対応した、スケーラビリティの高いフルマネージド型の一元管理ペインです。ロギングにより、Oracle Cloud Infrastructureリソースからログにアクセスできます。これらのログには、リソースのパフォーマンスおよびアクセス方法を説明するクリティカルな診断情報が含まれます。
ログ・グループは、ジョブ管理に関連するメッセージの一元的な場所として使用されます。ジョブ作成イベント、ワーカー起動ステータス、ワーカーのプリエンプションおよびジョブ再試行キューの処理はすべてログに記録されます。
- ヘルス・チェック
Oracle Cloud Infrastructure Health Checksサービスは、高い頻度で外部モニタリングを実施し、パブリック対応サービス(ホストWebサイト、APIエンドポイント、外部向けロード・バランサなど)の可用性とパフォーマンスを判断します。Health Checksを使用すると、顧客に影響があるいかなる可用性問題も直ちに認識することができます。
ヘルス・チェックは、APIゲートウェイとの関連で使用され、キューに入れられたジョブや中断されたジョブを再試行できるジョブを定期的にチェックします。
- 仮想クラウド・ネットワーク(VCN)およびサブネット
VCNは、Oracle Cloud Infrastructureリージョンで設定する、カスタマイズ可能なソフトウェアで定義されたネットワークです。従来のデータ・センター・ネットワークと同様に、VCNではネットワーク環境を完全に制御できます。VCNには複数の重複しないCIDRブロックを含めることができ、VCNの作成後に変更できます。VCNをサブネットに分割できます。サブネットはリージョンまたは可用性ドメインにスコープ指定できます。各サブネットは、VCN内の他のサブネットと重複しない連続した範囲のアドレスで構成されます。サブネットのサイズは、作成後に変更できます。サブネットはパブリックまたはプライベートにできます。
- IAMポリシー
Oracle Cloud Infrastructure Identity and Access Management (IAM)を使用すると、クラウド・リソースにアクセスできるユーザーを制御できます。ポリシーは、誰がどのリソースにどのようにアクセスできるかを指定するドキュメントです。アクセス権はグループ・レベルおよびコンパートメント・レベルで付与されるため、特定のコンパートメント内またはテナンシ自体への特定のアクセスのタイプをグループに付与するポリシーを作成できます。テナンシへのグループ・アクセス権を付与する場合、グループはテナンシ内のすべてのコンパートメントへの同じアクセスのタイプを自動的に取得します。
- イベント
Oracle Cloud Infrastructure Eventsを使用すると、テナンシ全体でのリソースの状態変化に基づいた自動化を作成できます。リソースの状態が変化したときに開発チームが自動的に対応できるようにするには、イベントを使用します。
- 通知
Oracle Cloud Infrastructure Notificationsサービスは、Oracle Cloud Infrastructureおよび外部でホストされているアプリケーションに対して、安全、高信頼性、低レイテンシおよび永続的なメッセージを配信するパブリッシュ/サブスクライブ・パターンを介して、分散コンポーネントにメッセージをブロードキャストします。通知を使用して、イベント・ルールがトリガーされた場合、アラームに違反した場合、またはメッセージを直接公開したときに通知を受け取ります。
- カスタム・イメージ
Oracle Cloud Infrastructureはイメージを使用してインスタンスを起動します。インスタンスを起動するときに使用されるイメージを指定します。ベア・メタル・インスタンスのブート・ディスクのカスタム・イメージを作成し、それを使用して他のインスタンスを起動できます。イメージから起動するインスタンスには、カスタマイズ、構成、およびイメージの作成時にインストールされていたソフトウェアが含まれます。
- APIゲートウェイ
Oracle API Gatewayサービスでは、ネットワーク内でアクセス可能なプライベート・エンドポイントとともにAPIを公開し、必要に応じてパブリック・インターネットに公開できます。エンドポイントは、API検証、リクエストとレスポンスの変換、CORS、認証と認可およびリクエスト制限をサポートします。
推奨
- VCN
VCNを作成する際、必要なCIDRブロックの数と、VCNのサブネットにアタッチする予定のリソース数に基づいて各ブロックのサイズを決定します。標準のプライベートIPアドレス領域内にあるCIDRブロックを使用します。
プライベート接続を設定する他のネットワーク(Oracle Cloud Infrastructure、オンプレミス・データ・センターまたは他のクラウド・プロバイダ)と重複しないCIDRブロックを選択します。
サブネットを設計する際は、トラフィック・フローおよびセキュリティ要件を考慮してください。セキュリティ境界として機能する、特定の層またはロール内のすべてのリソースを同じサブネットにアタッチします。
- セキュリティ
Oracle Cloud Guardを使用して、Oracle Cloud Infrastructure内のリソースのセキュリティを事前にモニターおよび保守します。クラウド・ガードでは、セキュリティの弱みについてリソースを調査し、オペレータとユーザーのリスクのあるアクティビティを監視するために定義できるディテクタ・レシピを使用します。構成ミスまたはセキュアでないアクティビティが検出されると、クラウド・ガードは、定義できるレスポンダ・レシピに基づいて修正アクションを推奨し、それらのアクションの実行を支援します。
最大限のセキュリティが必要なリソースの場合、Oracleではセキュリティ・ゾーンを使用することをお薦めします。セキュリティ・ゾーンは、ベスト・プラクティスに基づいたセキュリティ・ポリシーのOracle定義のレシピに関連付けられたコンパートメントです。たとえば、セキュリティ・ゾーン内のリソースにパブリック・インターネットからアクセスできず、顧客管理キーを使用して暗号化する必要があります。セキュリティ・ゾーンでリソースを作成して更新すると、Oracle Cloud Infrastructureでは、その操作がセキュリティ・ゾーン・レシピのポリシーに対して検証され、ポリシーに違反する操作が拒否されます。
- ジョブ・トラッキング保持
OCI NoSQLには、表の行に対する存続時間(TTL)を設定する機能があります。TTLを使用して、実行する処理のタイプに適したジョブ保持期間を設定します。
- ヘルス・チェック
OCIヘルス・チェックは時間ベースで、実行する処理のタイプに適した間隔を設定します。
- 一時労働者
ワーカーは、必要なメディア処理のタイプ専用に設計されたカスタム・イメージから起動する必要があります。インスタンスは、一度実行すると自動的に処理を開始し、外部接続を確立できません。
注意事項
このリファレンス・アーキテクチャをデプロイする際には、次の点を考慮してください。
- ロギングOCI
ロギングは多くのOCIサービスと統合され、OCIファンクション内から単純なロギングに使用されます。
- OCI Application Performance Monitoring
OCI Application Performance Monitoringは、複雑な機能対話のための分散トラッキングなどの機能が必要な場合に使用できます。
- ジョブ・トラッキング
OCI NoSQLは、ジョブ・ステータスを追跡するための軽量な方法です。追加機能が必要な場合、より高度なデータベース・サービスを置き換えることができます。
- プリエンプティブル・コンピュート
経験的労働者は、先制的な能力を使用して起動されます。あらゆるリージョンにおいて、プリエンプティブル容量のコストはオンデマンド容量より50%削減されますが、すべてのコンピュート・シェイプでサポートされているわけではありません。
デプロイ
このリファレンス・アーキテクチャのTerraformコードは、Oracle Cloud Infrastructure Resource Managerのサンプル・スタックとして使用できます。GitHubからコードをダウンロードし、特定の要件に合わせてコードをカスタマイズすることもできます。
- Oracle Cloud Infrastructure Resource Managerのサンプル・スタックを使用してデプロイします:
をクリックします。
まだサインインしていない場合は、テナンシおよびユーザー資格証明を入力します。
- スタックをデプロイするリージョンを選択します。
- 画面上のプロンプトおよび指示に従ってスタックを作成します。
- スタックの作成後、「Terraformアクション」をクリックし、「プラン」を選択します。
- ジョブが完了するのを待ってから、プランをレビューします。
変更するには、「スタックの詳細」ページに戻り、「スタックの編集」をクリックして必要な変更を行います。次に、「プラン」アクションを再実行します。
- これ以上変更が不要な場合は、「スタック詳細」ページに戻り、「Terraformアクション」をクリックして「適用」を選択します。
- GitHubのTerraformコードを使用してデプロイ:
- GitHubに移動します。
- リポジトリをローカル・コンピュータにクローニングまたはダウンロードします。
README
ドキュメントの指示に従います。