Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O suporte a grandes payloads permite ao seu aplicativo passar entradas de orquestração e resultados de atividades, que excedem o limite de tamanho da mensagem do agendador de tarefas duráveis. Quando uma carga ultrapassa o limite configurado, a estrutura armazena a carga serializada em Armazenamento de Blobs do Azure e envia uma pequena referência por meio do Agendador de Tarefas Duráveis.
Esse recurso está disponível para:
- Durable Functions com o .NET trabalhador isolado
- SDK de Tarefas Duráveis do .NET
- SDK de Tarefas Duráveis em Python
Se o fluxo de trabalho armazenar dados em Armazenamento de Blobs e passar apenas um URI ou identificador, continue usando esse padrão. Utilize suporte para grandes cargas quando a lógica de orquestração precisar transferir a carga (payload) entre operações duráveis. Para obter diretrizes gerais, consulte Persistência de dados e serialização em Durable Functions.
Estruturas com suporte
Esta tabela mostra o suporte de payloads grandes por estrutura.
| Framework | Status de suporte | O que você precisa |
|---|---|---|
| Durable Functions | Com suporte em C# isolado no .NET | Usar o agendador de tarefas duráveis como provedor de armazenamento e AzureWebJobsStorage para blobs de payload |
| SDKs para tarefas duráveis | Com suporte em .NET e Python | Use a extensão de conteúdo de Blob Azure específica do idioma com Armazenamento de Blobs do Azure |
| JavaScript, PowerShell e Java | Não disponível | Usar armazenamento externo e passar referências entre operações de longa duração |
Como funciona
Quando você habilita o suporte a carga grande, o runtime segue o mesmo fluxo de alto nível em ambos os modelos de hospedagem:
- Ele serializa os dados de entrada da orquestração ou a saída da atividade.
- Se o tamanho da carga exceder o limite configurado, o runtime compacta o conteúdo com gzip.
- Ele grava a carga compactada para Armazenamento de Blobs do Azure.
- Ele envia uma referência de blob por meio do agendador de tarefas duráveis em vez do payload completo.
- O ambiente de execução resolve a referência automaticamente antes que o seu código de orquestrador ou de atividade leia o valor.
Os exemplos atuais de .NET usam cargas determinísticas de 1,5 MiB com baixa compressibilidade. Isso mantém o tamanho do blob armazenado representativo, mesmo que o ambiente de execução grave blobs com codificação gzip para o conteúdo.
O suporte a grandes cargas úteis altera como as cargas se movimentam durante o tempo de execução. Ele não altera a recomendação de manter o estado durável o menor possível.
Escolher o padrão certo
Use o padrão mais simples para seu cenário.
| Utilize este padrão | Quando usar isso |
|---|---|
| Suporte de carga grande | Sua orquestração passa o conteúdo entre operações duráveis e o conteúdo excede o limite de mensagens do agendador |
| Armazenamento externo e referências | Suas atividades carregam dados diretamente do armazenamento e você deseja o menor estado de orquestração possível |
Habilitar suporte de carga grande
O suporte de carga grande em Durable Functions está disponível apenas para .NET aplicativos C# isolados que usam o Agendador de Tarefas Duráveis como o provedor de armazenamento.
Antes de habilitar o recurso, verifique se seu aplicativo:
- Usa o worker isolado do .NET.
- Referências
Microsoft.Azure.Functions.Worker.Extensions.DurableTaskeMicrosoft.Azure.Functions.Worker.Extensions.DurableTask.AzureManaged. - Define
AzureWebJobsStoragepara a conta de armazenamento que contém cargas externadas. - Define
DTS_CONNECTION_STRINGeTASKHUB_NAMEpara o agendador de destino e o hub de tarefas.
Em seguida, habilite o armazenamento de carga grande no host.json:
{
"version": "2.0",
"extensions": {
"durableTask": {
"storageProvider": {
"type": "azureManaged",
"connectionStringName": "DTS_CONNECTION_STRING",
"largePayloadStorageEnabled": true,
"largePayloadStorageThresholdBytes": 900000
},
"hubName": "%TASKHUB_NAME%"
}
}
}
Defina largePayloadStorageThresholdBytes abaixo do limite de tamanho da mensagem do Agendador de Tarefas Duráveis para que o runtime externalize os conteúdos antes que eles se aproximem do limite.
Use as APIs padrão do Durable Functions em seu código de orquestrador e atividade. O runtime resolve automaticamente as referências de blob antes de context.GetInput<T>() e context.CallActivityAsync<T>() retornarem os dados.
Por padrão, a extensão grava cargas externadas no durabletask-payloads contêiner na conta de armazenamento configurada por AzureWebJobsStorage.
Para obter exemplos de ponta a ponta, confira estes exemplos:
O suporte de carga grande nos SDKs de Tarefa Durável está disponível para aplicativos .NET e Python.
Instale o pacote de extensão de carga útil do Azure Blob:
dotnet add package Microsoft.DurableTask.Extensions.AzureBlobPayloads
Instale o cliente Azure gerenciado e os pacotes de trabalho para o Agendador de Tarefas Duráveis:
dotnet add package Microsoft.DurableTask.Client.AzureManaged
dotnet add package Microsoft.DurableTask.Worker.AzureManaged
Registre um armazenamento de carga externalizado, escolha um limite e habilite a resolução de payload no cliente e no trabalhador:
builder.Services.AddExternalizedPayloadStore(options =>
{
options.ExternalizeThresholdBytes = 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();
});
Se você usar Microsoft Entra ID em vez de uma cadeia de conexão de armazenamento, defina options.AccountUri e options.Credential. O exemplo usa DefaultAzureCredential e, opcionalmente, pode direcionar uma identidade gerenciada atribuída pelo usuário.
Mantenha ExternalizeThresholdBytes em 1,048,576 bytes ou abaixo. O exemplo usa 900,000 bytes para que os payloads sejam descarregados antes de se aproximarem do limite de mensagens do agendador de 1 MiB.
Para obter um exemplo de .NET de ponta a ponta, consulte o exemplo de grande carga útil do SDK Durable Task.
Configuração de variável de ambiente
Use essas configurações locais ou configurações de aplicativo com os exemplos de Durable Functions atuais.
| Configurações | Descrição | Padrão de amostra |
|---|---|---|
FUNCTIONS_WORKER_RUNTIME |
Runtime de trabalho isolado do Azure Functions | dotnet-isolated |
AzureWebJobsStorage |
Armazenamento para o estado do host do Functions e blobs de conteúdo |
UseDevelopmentStorage=true Localmente |
DTS_CONNECTION_STRING |
String de conexão do Agendador de Tarefas Durável | Endpoint=http://localhost:8080;Authentication=None |
TASKHUB_NAME |
Central de Tarefas Alvo | default |
PAYLOAD_SIZE_BYTES |
Tamanho da carga usado pelo inicializador ou gerado por cada atividade | 1572864 |
ACTIVITY_COUNT |
Número de atividades paralelas somente no exemplo fan-out/fan-in | 3 |
A ACTIVITY_COUNT configuração é usada apenas pelo LargePayloadFanOutFanIn exemplo. O LargePayload exemplo de viagem de ida e volta não o lê.
Use essas variáveis de ambiente com os exemplos atuais do SDK da Tarefa Durável.
| Variable | Descrição | Padrão de amostra |
|---|---|---|
DURABLE_TASK_SCHEDULER_CONNECTION_STRING |
Cadeia de conexão do Agendador de Tarefas Durável | Endpoint=http://localhost:8080;TaskHub=default;Authentication=None |
PAYLOAD_STORAGE_CONNECTION_STRING |
String de conexão para armazenamento de blob para cargas externalizadas | UseDevelopmentStorage=true |
PAYLOAD_STORAGE_ACCOUNT_URI |
URI da conta de blob para acesso ao armazenamento de payloads baseado em identidade | remover definição |
PAYLOAD_CONTAINER_NAME |
Contêiner de blob para cargas externalizadas | durabletask-payloads |
PAYLOAD_SIZE_BYTES |
Tamanho padrão do payload usado pelo endpoint de execução | 1572864 |
EXTERNALIZE_THRESHOLD_BYTES |
Limite de descarregamento de blob | 900000 |
PAYLOAD_STORAGE_MANAGED_IDENTITY_CLIENT_ID |
ID do cliente opcional de identidade gerenciada atribuída pelo usuário para acesso ao armazenamento | remover definição |
AZURE_CLIENT_ID |
Maneira alternativa de selecionar uma identidade gerenciada atribuída pelo usuário | remover definição |
ASPNETCORE_URLS |
Escutar URLs para o host HTTP do exemplo | padrão da estrutura |
Se PAYLOAD_STORAGE_CONNECTION_STRING não estiver definido e PAYLOAD_STORAGE_ACCOUNT_URI for fornecido, o exemplo usará DefaultAzureCredential. Se você precisar de uma identidade específica atribuída pelo usuário, defina PAYLOAD_STORAGE_MANAGED_IDENTITY_CLIENT_ID ou AZURE_CLIENT_ID.
permissões de Azure
Quando você usa recursos Azure em vez de emuladores locais, a identidade do aplicativo precisa de acesso ao Agendador de Tarefas Duráveis e Armazenamento de Blobs:
- Conceda
Durable Task Data Contributorno hub de tarefas do aplicativo. - Conceda
Storage Blob Data Contributorna conta de armazenamento que armazena blobs de payload.
Essas permissões se aplicam a aplicativos Durable Functions e aplicativos SDK de Tarefa Durável que usam uma identidade gerenciada.
Verificar se o descarregamento de carga funciona
Depois de habilitar o descarregamento de carga, execute uma orquestração com uma entrada ou saída maior que o limite configurado. Em seguida, verifique se há ambos os sinais:
- A orquestração é concluída com êxito, mesmo quando o pacote de dados excede 1 MiB.
- As entradas de blob aparecem no
durabletask-payloadscontêiner.
Para desenvolvimento local, execute este comando CLI do Azure para inspecionar o contêiner:
az storage blob list \
--connection-string "UseDevelopmentStorage=true" \
--container-name durabletask-payloads \
--output table
Os aplicativos de exemplo também validam a viagem de ida e volta:
- Os exemplos de Durable Functions retornam um pequeno objeto de resumo que confirma os tamanhos de entrada e saída.
- O exemplo do SDK de Tarefa Durável .NET imprime se a execução cria novos blobs de conteúdo.
- O exemplo de Tarefa Durável do SDK Python executa fluxos de carga embutidos e externalizados e imprime o resultado da orquestração para cada execução.
Como o runtime armazena cargas externadas com codificação de conteúdo gzip, Azure relata o tamanho do blob compactado no disco. Com os payloads de exemplo com baixa compressibilidade atuais, esses tamanhos de blob devem permanecer razoavelmente próximos do tamanho da carga lógica.
Observação
Atualmente, a limpeza de instâncias de orquestração não exclui os blobs de carga externa correspondentes do Armazenamento de Blobs do Azure. Se você precisar remover essas cargas, exclua os blobs da conta de armazenamento separadamente.