Oracle Cloud Infrastructure Batch Serviceを使用したクラウド・ネイティブ・バッチ・ワークロードのデプロイ

はじめに

最新のアプリケーションは、バックグラウンド処理に大きく依存して、データ変換、レポート生成、メディア処理、大規模なシミュレーションなどのタスクを処理します。これらのワークロードは、多くの場合計算負荷が高く、非同期に実行され、スケールと頻度が大きく異なる場合があります。従来のアプローチを使用してこのようなワークロードを管理することは複雑であり、チームはインフラストラクチャのプロビジョニング、スケジューリング・システムの構築、スケーリングの手動処理を行う必要があります。

Oracle Cloud Infrastructure(OCI)Batch Serviceは、このプロセスを簡素化するように設計されています。完全管理型の方法でバッチ・ワークロードを大規模に実行できるため、プラットフォームで実行およびリソース管理を処理しながら、ジョブの定義に集中できます。

このチュートリアルでは、OCIバッチの仕組み、そのアーキテクチャ、および実際のシナリオでの効果的な使用方法について説明します。

OCIバッチで解決される問題

従来、バッチ・ワークロードの実行には、複雑なレイヤーが複数含まれていました。チームは、多くの場合、コンピュート・リソースを事前にプロビジョニングし、独自のジョブ・スケジューリング・メカニズムを実装して、再試行、失敗およびスケーリングを処理するロジックを構築する必要があります。Kubernetesなどのプラットフォームを使用する場合でも、環境の構成とメンテナンスに多大な労力が必要です。これにより、運用オーバーヘッドが増加し、開発が遅くなります。

OCI Batchは、バッチ・ワークロードのライフサイクルを管理する統合サービスを提供することで、これらの課題に対処します。これにより、カスタム・スケジューラを構築したり、インフラストラクチャを管理する必要がなくなり、チームはより効率的かつ少ない運用作業で大規模なジョブを実行できるようになります。

OCIバッチ・サービスの概要

OCIバッチは、バッチ・ワークロードを管理および実行するための一元化されたサービスとして機能します。ジョブが発行されると、そのジョブはキューに入れられ、スケジュールの決定とリソースの可用性に基づいて処理されます。このサービスは、ジョブ要件を評価し、タスクを実行するためにコンピュート能力を動的にプロビジョニングします。各タスクはコンテナ化された環境で実行されるため、一貫性と分離が保証されます。実行が完了すると、出力が格納され、監視およびトラブルシューティングのためにログが生成されます。

このアプローチは、ジョブの発行、スケジューリング、実行および可観測性が単一のマネージド・サービス内で処理される、合理化されたワークフローを提供します。

アーキテクチャの詳細

OCIバッチのアーキテクチャは、図に示すように、ジョブの発行から実行および出力までの明確なフローに従います。

OCIバッチ・アーカイブ

プロセスは、ユーザーがOCIコンソール、CLIまたはAPIを使用してジョブを送信すると開始されます。このリクエストは、基本構成レイヤーとして機能するBatch Contextに関連付けられます。コンテキストでは、ネットワーキング、コンピューティング・フリート、ロギングなどの主要な設定を定義し、すべてのジョブが一貫した環境で実行されるようにします。

その後、ジョブはJob Poolsに編成され、論理的なグループ化とスケジューリング動作の制御に役立ちます。これは、優先順位付けと分離が可能なため、異なるチームまたは環境間でワークロードを管理する場合に特に役立ちます。発行された各ジョブは、完全な作業単位を表し、1つ以上のタスクを含めることができます。タスクは最小の実行可能単位であり、定義されたタスク環境を使用して実行されます。これにより、定義された依存関係に応じて、ジョブを個別にまたは順番に実行できる小さな部分に分割できます。

送信されると、ジョブはQueueに配置され、リソースが使用可能になるまで待機します。スケジューラは、キューを継続的に評価し、優先順位と容量に基づいてジョブを選択します。これにより、システムに負荷をかけることなく、ワークロードを効率的に処理できます。

これらのタスクを実行するために、OCI Batchは、基礎となるコンピュート容量を表すCompute Fleetsを使用します。これらのフリートは、ワークロードの需要に基づいて動的にプロビジョニングされます。より多くのジョブが発行されると、追加の容量が割り当てられます。需要が減少すると、リソースがスケール・ダウンされます。これにより、手動操作を必要とせずに効率的な使用が保証されます。

実行後、結果はOCI storage servicesに格納され、ログおよびメトリックは可視化のために取得されます。これにより、ジョブの実行とシステム・パフォーマンスの完全なビューが提供されます。

このアーキテクチャが重要な理由

OCI Batchの主な強みは、ジョブの発行と実行の分離にあります。システムでは、すべてのジョブをすぐに実行するのではなく、キューとスケジューリング・ロジックを使用してワークロードを効率的に管理します。この設計により、OCI Batchは、事前にプロビジョニングされたインフラストラクチャを必要とせずに、突然の需要急増に対応できます。また、優先度の高いジョブを最初に実行できるようになり、共有環境での予測可能性が向上します。

リソース割当てを動的に管理し、キューを介した実行を制御することで、このサービスはパフォーマンス、スケーラビリティおよびコスト効率のバランスをとります。

OCIバッチのコア・コンポーネント

OCI Batchは、連携してバッチ処理機能を提供するコア・コンポーネントのセットに基づいて構築されています。

リアルワールドの例: ビデオ処理パイプライン

何千ものビデオを処理する必要があるシナリオを考えてみます。たとえば、フォーマットの変換、サムネイルの生成、フィルタの適用などです。

OCI Batchを使用すると、各ビデオをジョブ内の個別のタスクとして処理できます。これらのタスクは複数のコンピュート・リソース間でパラレルに実行できるため、合計処理時間が大幅に短縮されます。ワークロードの需要が増加すると、OCI Batchはタスクを処理するために追加のコンピュート容量を自動的にプロビジョニングします。処理が完了すると、結果が保存され、監視のためにログが生成されます。このパターンは、データ・パイプライン、機械学習ワークロード、エンジニアリング・シミュレーションなど、他の多くのユースケースに適用できます。

前提条件

IAMポリシーの例に従って、必要なOCIサービスへのOCIバッチ・サービス・アクセスを許可します。

ジョブの作成に使用する場合は、OCI CLIをダウンロードする必要もあります。

タスク1. バッチ・コンテキストの作成

バッチ・コンテキストは、バッチ・ワークロードの最上位の構成レイヤーです。これには、ネットワーキング、フリート、資格、ジョブ優先度設定およびロギング構成が含まれます。

バッチ・コンテキストを作成するには、バッチ・サービスに移動し、「バッチ・コンテキスト」「バッチ・コンテキストの作成」の順に選択します。環境に基づいて次の詳細を入力します。

  1. 名前
  2. コンパートメント
  3. 説明
  4. VCN
  5. サブネット
  6. フリート
  7. 権限(オプション)
  8. ジョブ優先度構成(オプション)
  9. ロギング構成

    バッチ・コンテキストの作成

タスク2. ジョブ・プールの作成

ジョブ・プールは、単にジョブの論理コンテナです。ジョブの実行時に、作成対象のジョブ・プールを選択します。ジョブ・プールを作成するには、次の構成のみが必要です。

  1. 名前
  2. 説明
  3. コンパートメント

    ジョブ・プールの作成

タスク3. タスク・プロファイルの作成

タスク・プロファイルは、タスクに必要な最小コンピュート・リソース(1 OCPU、16 GBのメモリーなど)を定義する再利用可能な構成です。それぞれ異なるリソース要件に対応する複数のプロファイルを作成できます。タスク プロファイルを作成するには、以下の設定を行う必要があります。

  1. 名前
  2. 説明
  3. 最小OCPU - この例の場合、これを1に設定できます
  4. GBの最小メモリー- この例では、これを8に設定できます

    タスク・プロファイルの作成

タスク 4 ローカル環境の設定およびコンテナ・イメージのプッシュ

  1. GitHubからコードをプルし、正しいディレクトリに移動します。

     git clone https://github.com/oracle-devrel/technology-engineering.git
     cd technology-engineering/app-dev/developer-tools-and-lowcode/batch/video-transcoding/ 
    
  2. OCI Container Registry (OCIR)にリポジトリを作成します。

    コンテナ・レジストリを作成します

  3. コンテナ・イメージをOCIRにプッシュします。イメージ・パスは、リージョン、テナンシ・ネームスペース、リポジトリ名およびイメージ・タグ(iad.ocir.io/<tenancy-namespace>/convert_mp4_to_avi:latest)と一致する必要があります

     docker build -t <image>:<tag> .
     docker push <image>:<tag>
    

    コンテナをOCIRにプッシュ

  4. 入力および出力ビデオ用のオブジェクト・ストレージ・バケットを作成します。

    入力バケットの作成

    出力バケットの作成

  5. ビデオ・ファイルをオブジェクト・ストレージにアップロード

タスク 5 タスクの環境の作成

タスク環境は、タスクのランタイム構成です。タスク環境を設定するには、次のものが必要です。

  1. 名前
  2. 説明
  3. セキュリティ・コンテキスト:
    1. ユーザーID: これを1に設定します
    2. グループID: これを1に設定します
    3. ファイルシステムグループID: 1に設定します
  4. 作業ディレクトリ: これを/videoに設定します

    タスクの環境の作成

タスク 6 ジョブの送信

バッチ・サービスにジョブを発行するには、様々な方法があります。このチュートリアルでは、OCI CLIを使用します。

  1. video_conversion_job.jsonというファイルを作成します。
  2. 以下をコピーしてvideo_conversion_job.jsonに貼り付けてください。
     {
     "batchJobPoolId": "JOB_POOL_OCID",
     "compartmentId": "COMPARTMENT_ID",
     "description": "Task to convert video from MP4 to AVI format",
     "displayName": "convert_video",
     "maxWaitSeconds": 0,
     "tasks": [
         {
         "batchJobPoolId": "JOB_POOL_OCID",
         "compartmentId": "COMPARTMENT_ID",
         "description": "Task to convert video from MP4 to AVI format",
         "displayName": "convert_video",
         "maxWaitSeconds": 0,
         "tasks": [
             {
               "batchTaskEnvironmentId": "TASK_ENVIRONMENT_OCID",
               "batchTaskProfileId": "TASK_PROFILE_OCID",
               "description": "Task to convert video from MP4 to AVI format",
               "environmentVariables": [
                 {
                   "name": "INPUT_BUCKET",
                   "value": "input_bucket"
                 },
                 {
                   "name": "INPUT_OBJECT",
                   "value": "input.mp4"
                 },
               {
                   "name": "OCI_BUCKET",
                   "value": "output_bucket"
               },
               {
                   "name": "OUTPUT_FILENAME",
                   "value": "output.avi"
               },
               {
                   "name": "OCI_NAMESPACE",
                   "value": "TENANCY_NAMESPACE"
               },
               {
                   "name": "OCI_REGION",
                   "value": "REGION"
               }
               ],
               "fleetAssignmentPolicy":
               {
                   "type": "BEST_FIT"
                 },
               "name": "convert_video",
               "type": "COMPUTE"
             }
         ],
         "waitForState": [
           "ACCEPTED"
         ],
         "waitIntervalSeconds": 0
              
    

    使用している環境に応じて、次のものを置き換えます。

    • ジョブ_プール_OCID
    • COMPARTMENT_ID
    • タスク_環境_OCID
    • TASK_PROFILE_OCID
    • TENANCY_NAMESPACE
    • リージョン
  3. 次のコマンドを実行します:

     oci batch batch-job create --from-json file://video_conversion_job.json
    

    ジョブの完了には最大10分かかります。OCIコンソールでジョブを確認し、どのステージにあるかを確認します。

タスク 7 結果の検証

  1. OCIコンソールで、オブジェクト・ストレージに移動します。
  2. 出力バケットを検索し、トランスコードされたビデオが存在するかどうかを検証します。

OCIバッチと従来のアプローチ

従来のバッチ処理ソリューションでは、多くの場合、インフラストラクチャの管理、スケジューラの構成、スケーリングの手動処理が必要になります。これにより、複雑さと運用オーバーヘッドが増加します。ただし、OCI Batchは、スケジューリング、実行およびリソース・プロビジョニングが自動的に処理される管理環境を提供することで、これらの課題を排除します。これにより、インフラストラクチャに関する深い専門知識がなくても、大規模なワークロードの実行が容易になります。

ベスト・プラクティス

OCIバッチを効果的に使用するには、ワークロードをスケーラビリティを考慮して設計する必要があります。大規模なジョブを小さなタスクに分割すると、パラレル実行が改善され、パフォーマンスが向上します。また、リソースが効率的に割り当てられるように、適切なタスク プロファイルを定義することも重要です。ジョブの実行を確実に可視化するには、適切なロギングおよび監視を有効にする必要があります。ジョブ・プールおよび優先度を使用すると、特に共有環境で重要なワークロードが時間どおりに実行されることが保証されます。

まとめ

OCI Batch Serviceは、クラウドでバッチ・ワークロードを実行するための合理的でスケーラブルな方法を提供します。単一のサービス内でジョブのオーケストレーション、スケジューリングおよびコンピュート・プロビジョニングを処理することで、運用の複雑さを軽減し、効率を向上させます。OCI Batchは、大規模なコンピュート集約型ワークロードを処理する組織向けに、信頼性と柔軟性を備えたソリューションを提供し、チームはインフラストラクチャを管理するのではなく、結果を提供することに集中できます。

関連リンク

確認

その他の学習リソース

docs.oracle.com/learnの他のラボを調べるか、Oracle Learning YouTubeチャンネルで無料のラーニングコンテンツにアクセスしてください。また、Oracle Learning Explorerになるには、education.oracle.com/learning-explorerにアクセスしてください。

製品ドキュメントについては、Oracle Help Centerを参照してください。