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 Durable Functions é um conjunto de associações e gatilhos do Azure Functions que são ativados internamente pela DTFx (Durable Task Framework). A DTFx dá suporte a vários provedores de armazenamento de back-end, incluindo o provedor do Armazenamento do Azure usado pelo Durable Functions. A partir do Durable Functions v2.5.0, os usuários podem configurar seus aplicativos de funções para usar provedores de armazenamento DTFx que não sejam o provedor de Armazenamento do Azure.
Observação
O provedor de Armazenamento do Azure padrão para Durable Functions é o mais fácil de usar, pois não requer nenhuma configuração extra. No entanto, há compensações de custo, escalabilidade e gerenciamento de dados que podem favorecer o uso de um provedor de back-end alternativo.
O Durable Functions oferece suporte a dois tipos de provedores de back-end: "Traga o seu próprio (BYO)" e gerenciado pelo Azure. As opções BYO incluem Armazenamento Azure, Netherite e Microsoft SQL Server (MSSQL). A opção gerenciada do Azure é o novo agendador de tarefas durável atualmente em versão prévia. Este artigo descreve todos os provedores de back-end com suporte, compara-os uns com os outros e fornece informações básicas sobre como começar a usá-los.
Observação
No momento, não é possível migrar dados de um provedor de back-end de armazenamento para outro. Se você quiser usar um novo provedor, crie um novo aplicativo configurado com o novo provedor.
Agendador de tarefas durável (versão prévia)
O agendador de tarefas durável é um provedor de back-end de alto desempenho totalmente gerenciado para Durable Functions. Ele foi projetado e criado do zero com a ajuda da Microsoft Research. Esse novo provedor tem como objetivo fornecer a melhor experiência do usuário em aspectos como gerenciamento, observabilidade, desempenho e segurança.
Os principais benefícios do agendador de tarefas duráveis incluem:
- Menor sobrecarga de gerenciamento e operação em comparação com provedores de back-end BYO
- Painel de observabilidade e gerenciamento de primeira classe fornecido pronto para uso.
- Dá suporte à maior taxa de transferência de todos os back-ends atualmente.
- Suporte para autenticação usando identidade gerenciada.
Os usuários existentes do Durable Functions podem aproveitar o agendador sem alterações de código. Saiba mais sobre o agendador de tarefas durável e como começar.
Exemplos de agendador de tarefas duráveis podem ser encontrados no GitHub.
Armazenamento do Azure
O Armazenamento do Azure é o provedor de armazenamento padrão do Durable Functions. Ele usa filas, tabelas e blobs para persistir a orquestração e o estado da entidade. Usa blobs e concessões de blob para gerenciar partições. Em muitos casos, a conta de armazenamento usada para armazenar o estado de runtime do Durable Functions é igual à conta de armazenamento padrão usada pelo Azure Functions (AzureWebJobsStorage). No entanto, também é possível configurar o Durable Functions com uma conta de armazenamento separada. O provedor do Armazenamento do Azure é integrado à extensão do Durable Functions e não tem nenhuma outra dependência.
Os principais benefícios do provedor do Armazenamento do Azure incluem:
- Nenhuma configuração necessária: você pode usar a conta de armazenamento que foi criada para você pela experiência de instalação do aplicativo de funções.
- Modelo de cobrança sem servidor de menor custo: o Armazenamento do Azure tem um modelo de preços baseado em consumo com base inteiramente no uso (mais informações).
- Melhor suporte de ferramentas: o Armazenamento do Azure oferece emulação local multiplataforma e integra-se ao Visual Studio, ao Visual Studio Code e ao Azure Functions Core Tools.
- O mais maduro: o Armazenamento do Azure era o back-end de armazenamento original e mais testado do Durable Functions.
- Suporte para usar identidade em vez de segredos para conectar-se ao provedor de armazenamento.
Encontre o código-fonte dos componentes da DTFx do provedor de armazenamento do Armazenamento do Azure no repositório GitHub Azure/durabletask.
Observação
As contas de uso geral Standard do Armazenamento do Azure são necessárias ao usar o provedor do Armazenamento do Azure. Não há suporte para nenhum outro tipo de conta de armazenamento. É altamente recomendável usar contas de armazenamento herdadas de uso geral v1, pois as contas de armazenamento v2 mais recentes podem ser mais caras para cargas de trabalho do Durable Functions. Para obter mais informações sobre os tipos de contas do Armazenamento do Azure, confira a documentação Visão geral da conta de armazenamento.
Netherite
Observação
O suporte para usar o back-end de armazenamento netherite com Durable Functions terminará em 31 de março de 2028. É recomendável que você comece a avaliar o Agendador de Tarefas Duráveis para cargas de trabalho para as quais você está usando o Netherite no momento. Consulte o comunicado de fim de suporte.
O back-end de armazenamento do Netherite foi projetado e desenvolvido pela Microsoft Research. Ele usa os Hubs de Eventos do Azure e a tecnologia de banco de dados FASTER nos blobs de páginas do Azure. O design do Netherite permite o processamento de taxa de transferência de orquestrações e entidades em comparação com outros provedores. Em alguns cenários de parâmetros de comparação, a taxa de transferência mostrou aumentar em mais de uma ordem de magnitude quando comparada ao provedor padrão do Armazenamento do Azure.
Os principais benefícios do provedor de armazenamento do Netherite incluem:
- Taxa de transferência mais alta a um custo menor em comparação com outros provedores de armazenamento.
- Dá suporte à otimização da relação custo/benefício, permitindo a expansão do desempenho, conforme necessário.
- Dá suporte a até 32 partições de dados com SKUs Básicos e Standard dos Hubs de Eventos.
- Mais econômico do que outros provedores para cargas de trabalho de alta taxa de transferência.
Saiba mais sobre os detalhes técnicos do provedor de armazenamento do Netherite, incluindo como começar a usá-lo, na documentação do Netherite. Encontre o código-fonte do provedor de armazenamento do Netherite no repositório GitHub microsoft/durabletask-netherite. Uma avaliação mais detalhada do provedor de armazenamento do Netherite está disponível no seguinte documento de pesquisa: Fluxos de trabalho sem servidor com o Durable Functions e o Netherite.
Observação
O nome Netherite é proveniente do mundo do Minecraft.
Microsoft SQL Server (MSSQL)
O provedor de armazenamento do MSSQL (Microsoft SQL Server) persiste todo o estado em um banco de dados do Microsoft SQL Server. Ele é compatível com implantações locais e hospedadas na nuvem do SQL Server, incluindo o Banco de Dados SQL do Azure.
Os principais benefícios do provedor de armazenamento do MSSQL incluem:
- Dá suporte a ambientes desconectados: nenhuma conectividade do Azure é necessária ao usar uma instalação do SQL Server.
- Portátil em vários ambientes e nuvens, incluindo hospedado no Azure e local.
- Consistência de dados forte, permitindo backup/restauração e failover sem perda de dados.
- Suporte nativo para criptografia de dados personalizada (um recurso do SQL Server).
- Integra-se aos aplicativos de banco de dados existentes por meio de procedimentos armazenados internos.
Saiba mais sobre os detalhes técnicos do provedor de armazenamento do MSSQL, incluindo como começar a usá-lo, na documentação do provedor do Microsoft SQL. Encontre o código-fonte do provedor de armazenamento do MSSQL no repositório GitHub microsoft/durabletask-mssql.
Como configurar o provedor do Armazenamento do Azure
O provedor do Armazenamento do Azure é o provedor de armazenamento padrão e não exige nenhuma configuração explícita, referências de pacote NuGet ou referências de pacote de extensão. Encontre o conjunto completo de opções de configuração do host.jsonaqui, no caminho extensions/durableTask/storageProvider.
conexões
A propriedade connectionName no host.json é uma referência à configuração de ambiente que especifica como o aplicativo deve se conectar ao Armazenamento do Microsoft Azure. Ela pode especificar:
- O nome de um prefixo compartilhado com várias configurações de aplicativo, definindo juntas uma conexão baseada em identidade. As identidades gerenciadas usam a autenticação do Microsoft Entra para fornecer a conexão mais segura à sua conta de armazenamento.
- O nome de uma configuração de aplicativo contendo uma cadeia de conexão. Para obter uma cadeia de conexão, execute as etapas mostradas em Gerenciar as chaves de acesso à conta de armazenamento.
Se o valor configurado for uma combinação exata para uma única configuração e um correspondência de prefixo para outras configurações, a correspondente exata será usada. Se nenhum valor for especificado em host.json, o valor padrão será AzureWebJobsStorage.
Conexões baseadas em identidade
Se você estiver usando a versão 2.7.0 ou superior da extensão e o provedor de armazenamento do Azure, em vez de usar uma cadeia de conexão com um segredo faça com que o aplicativo use uma identidade do Microsoft Entra. Para fazer isso, defina as configurações em um prefixo comum que mapeia para a propriedade connectionName na configuração de gatilho e de associação.
Para usar uma conexão baseada em identidade para o Durable Functions, defina as seguintes configurações de aplicativo:
| Propriedade | Modelo de variável de ambiente | Descrição | Valor de exemplo |
|---|---|---|---|
| URI do serviço Blob | <CONNECTION_NAME_PREFIX>__blobServiceUri |
O URI do plano de dados do serviço de blobs da conta de armazenamento, usando o esquema HTTPS. | <https:// storage_account_name.blob.core.windows.net> |
| URI do serviço Fila | <CONNECTION_NAME_PREFIX>__queueServiceUri |
O URI do plano de dados do serviço de filas da conta de armazenamento, usando o esquema HTTPS. | https://<nome_da_conta_de_armazenamento>.queue.core.windows.net |
| URI do serviço de tabela | <CONNECTION_NAME_PREFIX>__tableServiceUri |
URI do plano de dados de um serviço de tabela da conta de armazenamento, usando o esquema HTTPS. | <https:// storage_account_name.table.core.windows.net> |
É possível definir propriedades adicionais para personalizar a conexão. Confira Propriedades comuns para conexões baseadas em identidade.
Quando hospedadas no serviço de Azure Functions, as conexões baseadas em identidade usam uma identidade gerenciada. A identidade atribuída pelo sistema é usada por padrão, embora a identidade atribuída pelo usuário possa ser especificada com as propriedades credential e clientID. Observe que não há suporte para configurar uma identidade atribuída pelo usuário com uma ID de recurso. Quando executado em outros contextos, como desenvolvimento local, a identidade do desenvolvedor é usada, embora isso possa ser personalizado. Confira Desenvolvimento local com conexões baseadas em identidade.
Conceder permissão para a identidade
Qualquer identidade que esteja sendo usada deve ter permissões para executar as ações pretendidas. Para a maioria dos serviços do Azure, isso significa que será necessário atribuir uma função no Azure RBAC, usando as funções internas ou as personalizadas que fornecem essas permissões.
Importante
Algumas permissões que não são necessárias em todos os contextos podem ser expostas pelo serviço de destino. Sempre que possível, siga o princípio do privilégio mínimo, concedendo à identidade apenas os privilégios necessários. Por exemplo, se o aplicativo precisar apenas ser capaz de ler uma fonte de dados, use uma função que só tenha permissão de leitura. Seria inapropriado atribuir uma função que também permitisse a gravação nesse serviço, pois seria um excesso de permissões para uma operação de leitura. Da mesma forma, seria melhor garantir que a atribuição da função tivesse o escopo apenas sobre os recursos que precisam ser lidos.
Será necessário criar uma atribuição de função que forneça acesso ao armazenamento do Azure em runtime. As funções de gerenciamento como a de Proprietário não são suficientes. As seguintes funções internas são recomendadas ao usar a extensão Durable Functions em operação normal:
- Colaborador de dados de blob de armazenamento
- Colaborador de dados da fila de armazenamento
- Colaborador de dados da tabela de armazenamento
Seu aplicativo pode exigir mais permissões com base no código escrito por você. Se você estiver usando o comportamento padrão ou a configuração explícita connectionName como "AzureWebJobsStorage", confira Conectar-se ao armazenamento de host com uma identidade para outras considerações de permissão.
Como configurar provedores de armazenamento alternativos
A configuração de provedores de armazenamento alternativos geralmente é um processo de duas etapas:
- Adicione o pacote NuGet apropriado ao seu aplicativo de funções (esse requisito é temporário para aplicativos que usam pacotes de extensão).
- Atualize o arquivo host.json para especificar qual provedor de armazenamento você deseja usar.
Se nenhum provedor de armazenamento estiver configurado explicitamente no host.json, o provedor do Armazenamento do Azure será habilitado por padrão.
Configurando o agendador de tarefas durável (versão prévia)
Consulte a documentação de introdução ao agendador de tarefas duráveis.
Como configurar o provedor de armazenamento do MSSQL
Habilitar o provedor de armazenamento MSSQL requer uma alteração de configuração em seu host.json. Para usuários do C#, ele também requer uma etapa de instalação adicional.
host.json Configuração
O exemplo a seguir mostra a configuração mínima necessária para habilitar o provedor de armazenamento do MSSQL.
{
"version": "2.0",
"extensions": {
"durableTask": {
"storageProvider": {
"type": "mssql",
"connectionStringName": "SQLDB_Connection"
}
}
}
}
Para obter instruções de instalação mais detalhadas, consulte a documentação e a documentação de introdução do provedor MSSQLsobre github.io.
Instalar a extensão MSSQL da Tarefa Durável (somente .NET)
Observação
Se seu aplicativo usa Pacotes de Extensão, você deve ignorar esta seção, pois os Pacotes de Extensão removem a necessidade de gerenciamento manual de extensão.
Você precisará instalar a versão mais recente da extensão do provedor de armazenamento MSSQL no NuGet: Microsoft.Azure.Functions.Worker.Extensions.DurableTask.SqlServer. Isso geralmente significa incluir uma referência a ele no seu arquivo .csproj e criar o projeto.
Comparação entre provedores de armazenamento
Há muitas compensações significativas entre os vários provedores de armazenamento com suporte. A tabela a seguir pode ser usada para ajudar você a entender essas compensações e decidir qual provedor de armazenamento é melhor para suas necessidades.
Observação
O suporte para usar o back-end de armazenamento netherite com Durable Functions terminará em 31 de março de 2028. É recomendável que você comece a avaliar o Agendador de Tarefas Duráveis para cargas de trabalho para as quais você está usando o Netherite no momento. Consulte o comunicado de fim de suporte.
| Provedor de armazenamento | Armazenamento do Azure | Netherite | MSSQL | DTS |
|---|---|---|---|---|
| Status de suporte oficial | ✅ GA (em disponibilidade geral) | ✅ GA (em disponibilidade geral) | ✅ GA (em disponibilidade geral) | Versão prévia pública |
| Dependências externas | Conta do Armazenamento do Azure (uso geral v1) | Hubs de Eventos do Azure Conta do Armazenamento do Azure (uso geral) |
SQL Server 2019 ou Banco de Dados SQL do Azure | N/D |
| Opções de emulação e desenvolvimento local | Azurite v3.12 e posterior (multiplataforma) | Dá suporte à emulação na memória de hubs de tarefas (mais informações) | SQL Server Developer Edition (dá suporte a contêineres do Windows, do Linux e do Docker) | Emulador do agendador de tarefas durável |
| Configuração do hub de tarefas | Explícita | Explícita | Implícita por padrão (mais informações) | Explícita |
| Taxa de transferência máxima | Moderado | Muito alta | Moderado | Muito alta |
| Expansão máxima da orquestração/entidade (nós) | 16 | 32 | N/D | N/D |
| Expansão máxima da atividade (nós) | N/D | 32 | N/D | N/D |
| Suporte a Entidades Duráveis | ✅ Suporte completo | ✅ Suporte completo | ⚠️ Com suporte, exceto ao usar o .NET Isolado | ✅ Suporte completo |
| Suporte ao dimensionamento do KEDA 2.0 (mais informações) |
❌ Sem suporte | ❌ Sem suporte | ✅ Com suporte por meio do dimensionador do MSSQL (mais informações) | Em breve! |
| Suporte para pacotes de extensão (recomendado para aplicativos não .NET) | ✅ Suporte completo | ✅ Suporte completo | ✅ Suporte completo | Em breve! |
| Relação custo/benefício configurável? | ❌ Não | ✅ Sim (TUs e CUs dos Hubs de Eventos) | ✅ Sim (vCPUs do SQL) | Em breve! |
| Suporte de ambiente desconectado | ❌ Conectividade do Azure necessária | ❌ Conectividade do Azure necessária | ✅ Suporte completo | ❌ Conectividade do Azure necessária |
| Conexões baseadas em identidade | ✅ Suporte completo | ❌ Sem suporte | ⚠️Requer escala controlado pelo runtime | ✅ Suporte completo |
| Plano de Consumo Flexível | ✅ Suporte total (consulte as anotações) | ❌ Sem suporte | ✅ Suporte completo | ❌ Sem suporte |