Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Obsługa dużych ładunków umożliwia aplikacji przekazywanie danych wejściowych orkiestracji i danych wyjściowych działań, które przekraczają limit rozmiaru komunikatów Durable Task Scheduler. Gdy ładunek przekroczy skonfigurowany próg, struktura przechowuje serializowany ładunek w Azure Blob Storage i wysyła małe odwołanie za pomocą narzędzia Durable Task Scheduler.
Ta funkcja jest dostępna dla:
- Durable Functions z izolowanym pracownikiem .NET
- .NET Durable Task SDK
- Python Durable Task SDK
Jeśli przepływ pracy przechowuje dane w Blob Storage i przekazuje tylko URI lub identyfikator, kontynuuj używanie tego wzorca. Użyj obsługi dużych ładunków, gdy logika aranżacji musi przekazać ładunek między operacjami trwałymi. Aby uzyskać ogólne wskazówki, zobacz Trwałość danych i serializacja w Durable Functions.
Obsługiwane platformy
W tej tabeli przedstawiono obsługę dużych ładunków według platformy.
| Framework | Status wsparcia | Czego potrzebujesz |
|---|---|---|
| Durable Functions | Obsługiwane w izolowanym języku C# .NET | Użyj narzędzia Durable Task Scheduler jako dostawcy magazynu i użyj go AzureWebJobsStorage do ładowania obiektów blob |
| Trwałe zestawy SDK dla zadań | Obsługiwane w .NET i Python | Użyj rozszerzenia specyficznego dla języka dla ładunku Azure Blob z Azure Blob Storage |
| JavaScript, PowerShell i Java | Niedostępne | Używanie magazynu zewnętrznego i przekazywanie odwołań między operacjami trwałymi |
Jak to działa
Po włączeniu obsługi dużych ładunków, środowisko uruchomieniowe śledzi ten sam przepływ wysokopoziomowy w obu modelach hostingu aplikacji.
- Serializuje dane wejściowe lub wyjściowe działania orkiestracji.
- Jeśli rozmiar ładunku przekracza skonfigurowany próg, środowisko uruchomieniowe kompresuje ładunek za pomocą narzędzia gzip.
- Zapisuje skompresowany ładunek do Azure Blob Storage.
- Wysyła odniesienie do obiektu blob za pomocą Trwałego Harmonogramu Zadań zamiast pełnej zawartości.
- Środowisko uruchomieniowe automatycznie rozpoznaje odwołanie, zanim orkiestrator lub kod działania odczyta wartość.
Bieżące przykłady .NET używają deterministycznych ładunków o niskiej kompresji, mających rozmiar 1,5 MiB. Dzięki temu przechowywany rozmiar obiektu blob jest reprezentatywny, mimo że środowisko uruchomieniowe zapisuje obiekty blob z kodowaniem zawartości gzip.
Duże wsparcie dla ładunków wpływa na sposób, w jaki ładunki są przenoszone w środowisku uruchomieniowym. Nie zmienia zalecenia, aby zachować stan trwały tak mały, jak to możliwe w praktyce.
Wybieranie odpowiedniego wzorca
Użyj najprostszego wzorca dla danego scenariusza.
| Użyj tego wzorca | Kiedy go użyć |
|---|---|
| Obsługa dużych pakietów danych | Orkiestracja przekazuje ładunek między operacjami trwałymi, a ładunek przekracza limit komunikatów harmonogramu |
| Pamięć zewnętrzna i odwołania | Działania ładują dane bezpośrednio z magazynu i chcesz uzyskać najmniejszy możliwy stan aranżacji |
Włączanie obsługi dużych ładunków
Obsługa dużych ładunków w Durable Functions jest dostępna tylko dla .NET izolowanych aplikacji języka C#, które używają harmonogramu Durable Task Scheduler jako dostawcę przechowywania.
Przed włączeniem tej funkcji upewnij się, że aplikacja:
- Używa izolowanego wykonawcy .NET.
- Odwołania
Microsoft.Azure.Functions.Worker.Extensions.DurableTaskiMicrosoft.Azure.Functions.Worker.Extensions.DurableTask.AzureManaged. - Ustawia
AzureWebJobsStoragedla konta magazynu, które przechowuje zewnętrzne dane. - Ustawia
DTS_CONNECTION_STRINGiTASKHUB_NAMEdla docelowego harmonogramu i centrum zadań.
Następnie włącz duży magazyn ładunku w host.json:
{
"version": "2.0",
"extensions": {
"durableTask": {
"storageProvider": {
"type": "azureManaged",
"connectionStringName": "DTS_CONNECTION_STRING",
"payloadStorageEnabled": true,
"payloadStorageThresholdBytes": 262144
},
"hubName": "%TASKHUB_NAME%"
}
}
}
Ustaw payloadStorageThresholdBytes poniżej granicy rozmiaru wiadomości w Harmonogramie Trwałych Zadań, aby środowisko uruchomieniowe zewnętrzniało ładunki przed zbliżeniem się do limitu.
Użyj standardowych interfejsów API Durable Functions w kodzie orkiestratora i aktywności. Środowisko uruchomieniowe automatycznie rozpoznaje odwołania do obiektów blob przed context.GetInput<T>() i context.CallActivityAsync<T>() zwróceniem danych.
Domyślnie rozszerzenie zapisuje zewnętrzne ładunki do kontenera durabletask-payloads na koncie magazynu skonfigurowanym przez AzureWebJobsStorage.
Aby uzyskać kompleksowe przykłady od początku do końca, zobacz następujące próbki:
Wsparcie dla dużych ładunków w SDK Durable Task jest dostępne dla aplikacji .NET i Python.
Aby zainstalować pakiet rozszerzenia danych Azure Blob:
dotnet add package Microsoft.DurableTask.Extensions.AzureBlobPayloads
Zainstaluj pakiety klienta i pakiety robocze zarządzane przez Azure dla Durable Task Scheduler:
dotnet add package Microsoft.DurableTask.Client.AzureManaged
dotnet add package Microsoft.DurableTask.Worker.AzureManaged
Zarejestruj zewnętrzny magazyn ładunków, wybierz próg i włącz rozpoznawanie ładunku zarówno na kliencie, jak i w ramach procesu roboczego:
builder.Services.AddExternalizedPayloadStore(options =>
{
options.ThresholdBytes = 262_144;
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();
});
Jeśli używasz Microsoft Entra ID zamiast ciągu połączenia magazynu, ustaw options.AccountUri i options.Credential. Przykład używa DefaultAzureCredential i opcjonalnie może kierować na tożsamość zarządzaną przypisaną przez użytkownika.
Utrzymuj ThresholdBytes na poziomie czy poniżej 1,048,576 bajtów. W przykładzie użyto 262,144 bajtów (256 KiB), co jest również domyślną wartością w pakiecie SDK, więc ładunki są odciążane, zanim zbliżą się do granicy 1 MiB dla komunikatu harmonogramu.
Aby zapoznać się z kompleksowym przykładem .NET, zobacz przykład Durable Task SDK — przykład dużego ładunku.
Konfiguracja zmiennej środowiskowej
Użyj tych ustawień lokalnych lub ustawień aplikacji z bieżącymi przykładami Durable Functions.
| Setting | Opis | Przykładowa wartość domyślna |
|---|---|---|
FUNCTIONS_WORKER_RUNTIME |
Azure Functions - izolowane środowisko uruchomieniowe aplikacji roboczej | dotnet-isolated |
AzureWebJobsStorage |
Przechowywanie stanu hosta i ładunku obiektów blob dla usługi Functions |
UseDevelopmentStorage=true Lokalnie |
DTS_CONNECTION_STRING |
Ciąg połączenia do harmonogramu zadań trwałych | Endpoint=http://localhost:8080;Authentication=None |
TASKHUB_NAME |
Docelowe centrum zadań | default |
PAYLOAD_SIZE_BYTES |
Rozmiar ładunku używanego przez element inicjujący lub generowanego przez każde działanie | 1572864 |
ACTIVITY_COUNT |
Liczba równoległych działań w przykładzie fan-out/fan-in tylko | 3 |
To ACTIVITY_COUNT ustawienie jest używane tylko przez LargePayloadFanOutFanIn próbkę. Przykładowa LargePayload runda nie odczytuje jej.
Użyj tych zmiennych środowiskowych w bieżących przykładach zestawu SDK Durable Task.
| Zmienna | Opis | Przykładowa wartość domyślna |
|---|---|---|
DURABLE_TASK_SCHEDULER_CONNECTION_STRING |
Ciąg połączenia do harmonogramu zadań trwałych | Endpoint=http://localhost:8080;TaskHub=default;Authentication=None |
PAYLOAD_STORAGE_CONNECTION_STRING |
Connection string usługi Blob Storage dla ładunków zewnętrznych | UseDevelopmentStorage=true |
PAYLOAD_STORAGE_ACCOUNT_URI |
URI konta Blob na potrzeby dostępu do magazynu ładunku opartego na tożsamości | Nieustawiony |
PAYLOAD_CONTAINER_NAME |
Kontener obiektów blob dla ładunków zewnętrznych | durabletask-payloads |
PAYLOAD_SIZE_BYTES |
Domyślny rozmiar ładunku używany przez endpoint run | 1572864 |
THRESHOLD_BYTES |
Próg odciążania dla bloba | 262144 |
PAYLOAD_STORAGE_MANAGED_IDENTITY_CLIENT_ID |
Opcjonalny identyfikator klienta tożsamości zarządzanej przypisanej przez użytkownika na potrzeby dostępu do przechowywania danych | Nieustawiony |
AZURE_CLIENT_ID |
Alternatywny sposób wybierania tożsamości zarządzanej przypisanej przez użytkownika | Nieustawiony |
ASPNETCORE_URLS |
Adresy URL nasłuchiwania dla hosta HTTP próbki | domyślna struktura |
Jeśli PAYLOAD_STORAGE_CONNECTION_STRING nie jest ustawione i PAYLOAD_STORAGE_ACCOUNT_URI jest podane, próbka używa DefaultAzureCredential. Jeśli potrzebujesz określonej tożsamości przypisanej użytkownikowi, ustaw PAYLOAD_STORAGE_MANAGED_IDENTITY_CLIENT_ID albo AZURE_CLIENT_ID.
uprawnienia Azure
Jeśli używasz zasobów Azure zamiast lokalnych emulatorów, tożsamość aplikacji musi mieć dostęp do Durable Task Scheduler i Blob Storage.
- Nadaj
Durable Task Data Contributorw centrum zadań aplikacji. - Przyznaj
Storage Blob Data Contributorna koncie magazynu przechowującym blob zawartości.
Te uprawnienia mają zastosowanie do aplikacji Durable Functions i aplikacji zestawu Durable Task SDK korzystających z tożsamości zarządzanej.
Sprawdzanie, czy odciążanie ładunku działa
Po włączeniu odciążania ładunku uruchom orkiestrację z danymi wejściowymi lub wyjściowymi, które są większe niż skonfigurowany próg. Następnie sprawdź oba sygnały:
- Orkiestracja kończy się pomyślnie, mimo że ładunek przekracza 1 MiB.
- Wpisy obiektów blob są wyświetlane w kontenerze
durabletask-payloads.
W przypadku programowania lokalnego uruchom następujące polecenie Azure CLI, aby sprawdzić kontener:
az storage blob list \
--connection-string "UseDevelopmentStorage=true" \
--container-name durabletask-payloads \
--output table
Przykładowe aplikacje weryfikują również cykl zwrotny.
- Przykłady Durable Functions zwracają mały obiekt podsumowania, który potwierdza rozmiary danych wejściowych i wyjściowych.
- Przykładowy zestaw SDK .NET Durable Task wyświetla, czy uruchomienie tworzy nowe bloby ładunków.
- Przykład SDK Durable Task dla Pythona uruchamia zarówno wbudowane, jak i zewnętrzne przepływy danych oraz wyświetla wynik orkiestracji dla każdego przebiegu.
Ponieważ środowisko uruchomieniowe przechowuje zewnętrzne ładunki danych z kodowaniem zawartości typu gzip, Azure raportuje skompresowany rozmiar blobu na dysku. W przypadku bieżących próbkowych ładunków o niskiej kompresji rozmiary blobów powinny pozostać rozsądnie zbliżone do rozmiaru ładunku logicznego.
Uwaga / Notatka
Przeczyszczanie wystąpień orkiestracji nie powoduje obecnie usunięcia odpowiednich zewnętrznych obiektów blob ładunku z Azure Blob Storage. Jeśli musisz usunąć te ładunki, usuń obiekty blob z konta magazynu oddzielnie.