次の方法で共有


Durable Task Scheduler を使用した大規模なペイロードのサポート (プレビュー)

大きなペイロードのサポートにより、アプリは 、Durable Task Scheduler の メッセージ サイズの制限を超えるオーケストレーション入力とアクティビティ出力を渡すことができます。 ペイロードが構成されたしきい値を超えると、フレームワークはシリアル化されたペイロードをAzure Blob Storageに格納し、Durable Task Scheduler を介して小さな参照を送信します。

この機能は次で利用できます。

ワークフローがBlob Storageにデータを格納し、URI または識別子のみを渡す場合は、そのパターンを使用し続けます。 オーケストレーション ロジックが永続的な操作間でペイロードを渡す必要がある場合は、大きなペイロードサポートを使用します。 一般的なガイダンスについては、 Durable Functionsを参照してください。

サポートされているフレームワーク

次の表は、フレームワークによる大規模なペイロードのサポートを示しています。

フレームワーク サポートの状態 必要なもの
Durable Functions .NET アイソレートされた C# でサポートされます ストレージ プロバイダーとして Durable Task Scheduler を使用し、ペイロード BLOB に AzureWebJobsStorage を使用する
Durable Task SDK .NETとPythonでサポートされます Azure Blob Storageで言語固有のAzure BLOB ペイロード拡張機能を使用する
JavaScript、PowerShell、Java 該当なし 外部ストレージを活用して耐久性のある操作間で参照を渡す

どのように機能するのか

大規模なペイロードのサポートを有効にすると、ランタイムは両方のホスティング モデルで同じ高レベルのフローに従います。

  1. オーケストレーションの入力またはアクティビティの出力をシリアル化します。
  2. ペイロード サイズが構成されたしきい値を超えた場合、ランタイムは gzip を使用してペイロードを圧縮します。
  3. 圧縮されたペイロードをAzure Blob Storageに書き込みます。
  4. 完全なペイロードの代わりに、Durable Task Scheduler を通じて Blob リファレンスを送信します。
  5. ランタイムは、オーケストレーターまたはアクティビティ コードが値を読み取る前に、参照を自動的に解決します。

現在の.NETサンプルでは、確定的で圧縮率の低い 1.5 MiB ペイロードが使用されています。 これは、ランタイムが gzip コンテンツ エンコードを使用して BLOB を書き込む場合でも、格納された BLOB サイズの代表を保持します。

大きなペイロードのサポートによって、ペイロードがランタイム内を移動する方法が変わります。 耐久性のある状態を可能な限り小さく保つという推奨事項に変更はありません。

適切なパターンを選択する

シナリオに最も単純なパターンを使用します。

このパターンを使用する いつ使用するか
大きなペイロードのサポート オーケストレーションが永続的な操作間でペイロードを渡しており、そのペイロードがスケジューラ メッセージの制限を超えています
外部ストレージと参照 アクティビティはストレージから直接データを読み込み、可能な限り最小のオーケストレーション状態が必要です

大きなペイロードのサポートを有効にする

Durable Functionsでの大規模なペイロードのサポートは、ストレージ プロバイダーとして Durable Task Scheduler を使用.NET分離された C# アプリでのみ使用できます。

この機能を有効にする前に、アプリが以下の条件を満たしていることを確認してください。

  • .NET分離ワーカーを使用します。
  • Microsoft.Azure.Functions.Worker.Extensions.DurableTask および Microsoft.Azure.Functions.Worker.Extensions.DurableTask.AzureManaged を参照します。
  • 外部化されたペイロードを保持するストレージ アカウントに AzureWebJobsStorage を設定します。
  • ターゲット スケジューラとタスク ハブの DTS_CONNECTION_STRINGTASKHUB_NAME を設定します。

次に、host.jsonで大きなペイロード ストレージ 有効にします。

{
  "version": "2.0",
  "extensions": {
    "durableTask": {
      "storageProvider": {
        "type": "azureManaged",
        "connectionStringName": "DTS_CONNECTION_STRING",
        "payloadStorageEnabled": true,
        "payloadStorageThresholdBytes": 900000
      },
      "hubName": "%TASKHUB_NAME%"
    }
  }
}

制限に近づく前にランタイムがペイロードを外部化するように、 payloadStorageThresholdBytes Durable Task Scheduler のメッセージ サイズ境界の下に設定します。

オーケストレーターとアクティビティ コードで標準のDurable Functions API を使用します。 ランタイムは、context.GetInput<T>() および context.CallActivityAsync<T>() にデータを返す前に BLOB 参照を自動的に解決します。

既定では、拡張機能は、durabletask-payloadsによって構成されたストレージ アカウント内のAzureWebJobsStorage コンテナーに外部化されたペイロードを書き込みます。

エンド ツー エンドの例については、次のサンプルを参照してください。

Durable Task SDK での大規模なペイロードのサポートは、.NETアプリとPython アプリで利用できます。

Azure BLOB ペイロード拡張機能パッケージをインストールします。

dotnet add package Microsoft.DurableTask.Extensions.AzureBlobPayloads

Durable Task Scheduler 用の Azure Managed クライアント パッケージと worker パッケージをインストールします。

dotnet add package Microsoft.DurableTask.Client.AzureManaged
dotnet add package Microsoft.DurableTask.Worker.AzureManaged

外部化されたペイロード ストアを登録し、しきい値を選択し、クライアントと worker の両方でペイロード解決を有効にします。

builder.Services.AddExternalizedPayloadStore(options =>
{
    options.ThresholdBytes = 900_000;
    options.ConnectionString = builder.Configuration["PAYLOAD_STORAGE_CONNECTION_STRING"]
        ?? "UseDevelopmentStorage=true";
    options.ContainerName = "durabletask-payloads";
});

builder.Services.AddDurableTaskClient(client =>
{
    client.UseDurableTaskScheduler(schedulerConnectionString);
    client.UseExternalizedPayloads();
});

builder.Services.AddDurableTaskWorker(worker =>
{
    worker.UseDurableTaskScheduler(schedulerConnectionString);
    worker.UseExternalizedPayloads();
});

ストレージ接続文字列の代わりにMicrosoft Entra IDを使用する場合は、options.AccountUrioptions.Credential を設定します。 このサンプルでは、 DefaultAzureCredential を使用し、必要に応じてユーザー割り当てマネージド ID をターゲットにすることができます。

ThresholdBytes1,048,576バイト以下にしてください。 サンプルでは 900,000 バイトを使用するため、ペイロードは 1 MiB スケジューラ メッセージ境界に近づく前にオフロードされます。

エンドツーエンドの.NETの例については、Durable Task SDK の大規模なペイロード サンプルを参照してください。

環境変数の構成

これらのローカル設定またはアプリ設定は、現在のDurable Functionsサンプルと共に使用します。

Setting 説明 サンプルの既定値
FUNCTIONS_WORKER_RUNTIME Azure Functions 分離ワーカー ランタイム dotnet-isolated
AzureWebJobsStorage Functions のホスト状態およびペイロード BLOB 用のストレージ UseDevelopmentStorage=true ローカルで
DTS_CONNECTION_STRING Durable Task Scheduler 接続文字列 Endpoint=http://localhost:8080;Authentication=None
TASKHUB_NAME ターゲット タスク ハブ default
PAYLOAD_SIZE_BYTES スターターによって使用される、または各アクティビティによって生成されるペイロードのサイズ 1572864
ACTIVITY_COUNT ファンアウト/ファンイン サンプルにおける並列アクティビティの数のみ 3

ACTIVITY_COUNT設定は、LargePayloadFanOutFanInサンプルでのみ使用されます。 LargePayload ラウンドトリップ サンプルでは、読み取ることができません。

これらの環境変数は、現在の Durable Task SDK サンプルと共に使用してください。

Variable 説明 サンプルの既定値
DURABLE_TASK_SCHEDULER_CONNECTION_STRING Durable Task Scheduler 接続文字列 Endpoint=http://localhost:8080;TaskHub=default;Authentication=None
PAYLOAD_STORAGE_CONNECTION_STRING 外部化されたペイロード用のBlob Storage接続文字列 UseDevelopmentStorage=true
PAYLOAD_STORAGE_ACCOUNT_URI アイデンティティベースのペイロードストレージアクセス用BLOBアカウントURI 設定解除する
PAYLOAD_CONTAINER_NAME 外部化ペイロード用BLOBコンテナー durabletask-payloads
PAYLOAD_SIZE_BYTES 実行エンドポイントで使用される既定のペイロード サイズ 1572864
EXTERNALIZE_THRESHOLD_BYTES BLOB オフロードのしきい値 900000
PAYLOAD_STORAGE_MANAGED_IDENTITY_CLIENT_ID ストレージ アクセス用のオプションでユーザーが割り当てたマネージド アイデンティティ クライアント ID 設定解除する
AZURE_CLIENT_ID ユーザー割り当てマネージド ID を選択する別の方法 設定解除する
ASPNETCORE_URLS サンプルの HTTP ホスト用のリッスン URL フレームワークの既定値

PAYLOAD_STORAGE_CONNECTION_STRINGが設定されておらず、PAYLOAD_STORAGE_ACCOUNT_URIが指定されている場合、サンプルではDefaultAzureCredentialを使用します。 特定のユーザー割り当て ID が必要な場合は、 PAYLOAD_STORAGE_MANAGED_IDENTITY_CLIENT_ID または AZURE_CLIENT_IDを設定します。

Azureアクセス許可

ローカル エミュレーターの代わりに Azure リソースを使用する場合、アプリ ID は Durable Task Scheduler と Blob Storage にアクセスする必要があります。

  • アプリのタスク ハブに Durable Task Data Contributor を付与します。
  • ペイロード BLOB を格納するストレージ アカウントに Storage Blob Data Contributor を付与します。

これらのアクセス許可は、マネージド ID を使用する Durable Functions アプリと Durable Task SDK アプリに適用されます。

ペイロード オフロードが機能することを確認する

ペイロード オフロードを有効にした後、構成されたしきい値より大きい入力または出力でオーケストレーションを実行します。 次に、両方のシグナルを確認します。

  • ペイロードが 1 MiB を超えても、オーケストレーションは正常に完了します。
  • BLOB エントリは、 durabletask-payloads コンテナーに表示されます。

ローカル開発の場合は、次のAzure CLI コマンドを実行してコンテナーを検査します。

az storage blob list \
  --connection-string "UseDevelopmentStorage=true" \
  --container-name durabletask-payloads \
  --output table

サンプル アプリでは、ラウンド トリップも検証されます。

  • Durable Functionsサンプルは、入力サイズと出力サイズを確認する小さなサマリー オブジェクトを返します。
  • .NET Durable Task SDK サンプルでは、実行によって新しいペイロード BLOB が作成されるかどうかを出力します。
  • Python Durable Task SDK サンプルは、インラインおよび外部化されたペイロード フローの両方を実行し、実行ごとにオーケストレーションの結果を出力します。

ランタイムは gzip コンテンツ エンコードを使用して外部化されたペイロードを格納するため、Azureは圧縮されたディスク上の BLOB サイズを報告します。 現在の圧縮率の低いサンプル ペイロードでは、これらの BLOB サイズは論理的なペイロード サイズに適度に近いままにする必要があります。

オーケストレーション インスタンスを削除しても、現在、対応する外部化されたペイロード BLOB はAzure Blob Storageから削除されません。 これらのペイロードを削除する必要がある場合は、ストレージ アカウントから BLOB を個別に削除します。

次のステップ