Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Durable Functions é um conjunto de gatilhos e associações do Azure Functions que são alimentados internamente pelo DTFx (Durable Task Framework ). O DTFx dá suporte a vários provedores de armazenamento de back-end, incluindo o provedor de Armazenamento do Azure usado pelo Durable Functions. A partir do Durable Functions v2.5.0, os usuários podem configurar seus aplicativos de função para usar provedores de armazenamento DTFx diferentes do provedor de Armazenamento do Azure.
Observação
O provedor de Armazenamento do Azure padrão para Funções Duráveis é 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 dá suporte a dois tipos de provedores de back-end: "Bring your own (BYO)" e Azure managed. As opções BYO incluem Azure Storage, Netherite e Microsoft SQL Server (MSSQL). A opção gerida do Azure é o novo agendador de tarefas durável atualmente em pré-visualização. Este artigo descreve todos os provedores de back-end suportados, compara-os entre si e fornece informações básicas sobre como começar a usá-los.
Observação
Atualmente, não é possível migrar dados de um provedor de back-end de armazenamento para outro. Se você quiser usar um novo provedor, você deve criar um novo aplicativo configurado com o novo provedor.
Agendador de tarefas resistente (pré-visualização)
O agendador de tarefas durável é um provedor de back-end de alto desempenho e totalmente gerenciado para funções duráveis. Ele foi projetado e construído do zero com a ajuda da Microsoft Research. Este novo provedor tem como objetivo fornecer a melhor experiência ao usuário em aspetos como gerenciamento, observabilidade, desempenho e segurança.
Os principais benefícios do agendador de tarefas durável incluem:
- Menor sobrecarga de gerenciamento e operação em comparação com os provedores de back-end BYO
- Painel de observabilidade e gestão de primeira classe, disponibilizado de imediato.
- Suporta a taxa de transferência mais alta de todos os backends atuais.
- 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 para agendador de tarefas duráveis podem ser encontrados no GitHub.
Armazenamento do Azure
O Armazenamento do Azure é o provedor de armazenamento padrão para Funções Duráveis. Ele usa filas, tabelas e blobs para persistir a orquestração e o estado da entidade. Ele também usa blobs e concessões de blob para gerenciar partições. Em muitos casos, a conta de armazenamento usada para armazenar o estado de tempo de execução do Durable Functions é a mesma que a conta de armazenamento padrão usada pelo Azure Functions (AzureWebJobsStorage). No entanto, também é possível configurar funções duráveis com uma conta de armazenamento separada. O provedor de Armazenamento do Azure é interno na extensão Durable Functions e não tem outras dependências.
Os principais benefícios do provedor de 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 configuração do aplicativo de função.
- Modelo de faturação sem servidor de custo mais baixo - o Armazenamento do Azure tem um modelo de preços baseado no consumo baseado inteiramente na utilização (mais informações).
- Melhor suporte a ferramentas - o Armazenamento do Azure oferece emulação local entre plataformas e integra-se com o Visual Studio, o Visual Studio Code e as Ferramentas Principais do Azure Functions.
- Mais maduro - o Armazenamento do Azure foi o back-end de armazenamento original e mais experimentado para Durable Functions.
- Suporte para usar identidade em vez de segredos para se conectar ao provedor de armazenamento.
O código-fonte para os componentes DTFx do provedor de armazenamento do Azure Storage pode ser encontrado no repositório Azure/durabletask no GitHub.
Observação
As contas de Armazenamento do Azure de uso geral padrão são necessárias ao usar o provedor de Armazenamento do Azure. Não há suporte para todos os outros tipos de conta de armazenamento. É altamente recomendável usar contas de armazenamento de uso geral v1 herdadas porque as contas de armazenamento v2 mais recentes podem ser mais caras para cargas de trabalho de Funções Duráveis. Para obter mais informações sobre os tipos de conta de Armazenamento do Azure, consulte a documentação de visão geral da conta de armazenamento.
Netherite
Observação
O suporte para usar o back-end de armazenamento Netherite com funções duráveis 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 anúncio do fim do suporte.
O back-end de armazenamento Netherite foi projetado e desenvolvido pela Microsoft Research. Ele usa os Hubs de Eventos do Azure e a tecnologia de banco de dados FASTER sobre os Blobs de Página doAzure. O design da Netherite permite o processamento de maior rendimento de orquestrações e entidades em comparação com outros provedores. Em alguns cenários de referência, a taxa de transferência aumentou em mais de uma ordem de magnitude quando comparada ao provedor de Armazenamento do Azure padrão.
Os principais benefícios do provedor de armazenamento Netherite incluem:
- Maior throughput a um custo mais baixo em comparação com outros provedores de armazenamento.
- Suporta otimização de preço-desempenho, permitindo que você aumente o desempenho conforme necessário.
- Suporta até 32 partições de dados com os SKUs Basic e Standard dos Event Hubs.
- Mais econômico do que outros provedores para cargas de trabalho de alto rendimento.
Você pode saber mais sobre os detalhes técnicos do provedor de armazenamento Netherite, incluindo como começar a usá-lo, na documentação do Netherite. O código-fonte do provedor de armazenamento Netherite pode ser encontrado no repositório GitHub microsoft/durabletask-netherite . Uma avaliação mais aprofundada do provedor de armazenamento Netherite também está disponível no seguinte documento de pesquisa: Serverless Workflows with Durable Functions and Netherite.
Observação
O nome Netherite tem origem no mundo de Minecraft.
Servidor Microsoft SQL (MSSQL)
O provedor de armazenamento do Microsoft SQL Server (MSSQL) armazena todo o estado num banco de dados do Microsoft SQL Server. É 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 MSSQL incluem:
- Suporta 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 hospedados no Azure e no local.
- Forte consistência de dados, permitindo backup/restauração e failover sem perda de dados.
- Suporte nativo para criptografia de dados personalizada (um recurso do SQL Server).
- Integra-se com aplicativos de banco de dados existentes por meio de procedimentos armazenados integrados.
Você pode saber mais sobre os detalhes técnicos do provedor de armazenamento MSSQL, incluindo como começar a usá-lo, na documentação do provedor Microsoft SQL. O código-fonte do provedor de armazenamento MSSQL pode ser encontrado no repositório GitHub microsoft/durabletask-mssql .
Configurando o provedor de armazenamento do Azure
O provedor de Armazenamento do Azure é o provedor de armazenamento padrão e não requer nenhuma configuração explícita, referências de pacote NuGet ou referências de pacote de extensão. Você pode encontrar o conjunto completo de opções de configuração host.jsonaqui, sob o extensions/durableTask/storageProvider caminho.
Conexões
A connectionName propriedade em host.json é uma referência à configuração do ambiente que especifica como o aplicativo deve se conectar ao Armazenamento do Azure. Pode especificar:
- O nome de um prefixo compartilhado para várias configurações de aplicativo, definindo em conjunto 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 que contém uma cadeia de conexão. Para obter uma cadeia de conexão, siga as etapas mostradas em Gerenciar chaves de acesso da conta de armazenamento.
Se o valor configurado for uma correspondência exata para uma única configuração e uma correspondência de prefixo para outras configurações, a correspondência 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, poderá fazer com que o aplicativo use uma identidade do Microsoft Entra. Para fazer isto, definirias configurações sob um prefixo comum que mapeia para a propriedade connectionName na configuração de disparador e vinculação.
Para usar uma conexão baseada em identidade para funções duráveis, defina as seguintes configurações do aplicativo:
| Propriedade | Modelo de variável de ambiente | Descrição | Valor de Exemplo |
|---|---|---|---|
| URI do serviço de Blob | <CONNECTION_NAME_PREFIX>__blobServiceUri |
O URI do plano de dados do serviço de blob da conta de armazenamento, usando o esquema HTTPS. | https://< storage_account_name.blob.core.windows.net> |
| URI do serviço de fila | <CONNECTION_NAME_PREFIX>__queueServiceUri |
O URI do plano de dados do serviço de fila da conta de armazenamento, usando o esquema HTTPS. | https://< storage_account_name.queue.core.windows.net> |
| URI do serviço de tabela | <CONNECTION_NAME_PREFIX>__tableServiceUri |
A URI do plano de dados de um serviço de tabela da conta de armazenamento, usando o protocolo HTTPS. | https://< storage_account_name.table.core.windows.net> |
Propriedades adicionais podem ser definidas para personalizar a conexão. Consulte Propriedades comuns para conexões baseadas em identidade.
Quando hospedadas no serviço Azure Functions, as conexões baseadas em identidade usam uma identidade gerenciada. A identidade atribuída ao sistema é usada por padrão, embora uma identidade atribuída ao usuário possa ser especificada com as credential propriedades e clientID . Observe que não há suporte para a configuração de uma identidade atribuída pelo usuário com uma ID de recurso. Quando é executado em outros contextos, como no desenvolvimento local, a sua identidade de desenvolvedor é usada, embora isso possa ser configurado. Consulte Desenvolvimento local com conexões baseadas em identidade.
Conceder permissão à 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 você precisa atribuir uma função no RBAC do Azure, usando funções internas ou personalizadas que fornecem essas permissões.
Importante
Algumas permissões podem ser expostas pelo serviço de destino que não são necessárias para todos os contextos. Sempre que possível, aderir ao princípio do menor privilégio, concedendo à identidade apenas os privilégios necessários. Por exemplo, se o aplicativo só precisa ser capaz de ler de uma fonte de dados, use uma função que só tenha permissão para ler. Seria inadequado atribuir uma função que também permita escrever a esse serviço, pois isso seria uma permissão excessiva para uma operação de leitura. Da mesma forma, convém garantir que a atribuição de função seja limitada apenas aos recursos que precisam ser lidos.
Você precisará criar uma atribuição de função que forneça acesso ao armazenamento do Azure em tempo de execução. Funções de gerenciamento como 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:
- Contribuidor de Dados de Armazenamento Blob
- Contribuinte de Dados em Filas de Armazenamento
- Contribuidor de dados da tabela de armazenamento
Seu aplicativo pode exigir mais permissões com base no código que você escreve. Se você estiver usando o comportamento padrão ou definindo connectionName explicitamente como "AzureWebJobsStorage", consulte Conectando-se ao armazenamento do host com uma identidade para obter outras considerações sobre permissão.
Configurando 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ção (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 explicitamente configurado no host.json, o provedor de Armazenamento do Azure será habilitado por padrão.
Configurando o agendador de tarefas durável (visualização)
Consulte a documentação de introdução do agendador de tarefas durável.
Configurando o provedor de armazenamento MSSQL
Habilitar o provedor de armazenamento MSSQL requer uma alteração de configuração no seu host.json. Para usuários de 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 MSSQL.
{
"version": "2.0",
"extensions": {
"durableTask": {
"storageProvider": {
"type": "mssql",
"connectionStringName": "SQLDB_Connection"
}
}
}
}
Para obter instruções de configuração mais detalhadas, consulte a documentação de introdução do provedor MSSQL e a documentação sobre github.io.
Instalar a extensão MSSQL para Funções Duráveis (.NET apenas)
Observação
Se o seu aplicativo usa Pacotes de Extensões, você deve ignorar esta seção, pois os Pacotes de Extensão eliminam a necessidade de gerenciamento manual de Extensões.
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 em seu .csproj arquivo e construir o projeto.
Comparando provedores de armazenamento
Há muitos compromissos significativos entre os vários provedores de armazenamento suportados. A tabela a seguir pode ser usada para ajudá-lo 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 funções duráveis 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 anúncio do fim do suporte.
| Provedor de armazenamento | Armazenamento do Azure | Netherite | MSSQL | DTS |
|---|---|---|---|---|
| Estado de suporte oficial | ✅ Geralmente disponível (GA) | ✅ Geralmente disponível (GA) | ✅ Geralmente disponível (GA) | Pré-visualização pública |
| Dependências externas | Conta de Armazenamento do Azure (finalidade geral v1) | Hubs de Eventos do Azure Conta de Armazenamento do Azure (finalidade geral) |
SQL Server 2019 ou Banco de Dados SQL do Azure | N/A |
| Opções de emulação e desenvolvimento local | Azurite v3.12+ (plataforma cruzada) | Suporta emulação na memória de hubs de tarefas (mais informações) | SQL Server Developer Edition (suporta contêineres Windows, Linux e Docker) | Emulador de agendador de tarefas durável |
| Configuração do hub de tarefas | Explícito | Explícito | Implícito por padrão (mais informações) | Explícito |
| Largura de banda máxima | Moderado | Muito alto | Moderado | Muito alto |
| Orquestração máxima/dimensionamento de entidade (nós) | 16 | 32 | N/A | N/A |
| Máxima ampliação de escala da atividade (nós) | N/A | 32 | N/A | N/A |
| Suporte a Entidades Duráveis | ✅ Totalmente suportado | ✅ Totalmente suportado | ⚠️ Suportado, exceto ao usar .NET Isolated | ✅ Totalmente suportado |
| Suporte ao escalonamento KEDA 2.0 (Outras informações) |
❌ Não suportado | ❌ Não suportado | ✅ Suportado usando o escalador MSSQL (mais informações) | Brevemente! |
| Suporte para pacotes de extensões (recomendado para aplicações non-.NET) | ✅ Totalmente suportado | ✅ Totalmente suportado | ✅ Totalmente suportado | Brevemente! |
| Preço-desempenho configurável? | ❌ Não | ✅ Sim (Hubs de Eventos, TUs e CUs) | ✅ Sim (SQL vCPUs) | Brevemente! |
| Suporte a ambientes desconectados | ❌ Conectividade do Azure necessária | ❌ Conectividade do Azure necessária | ✅ Totalmente suportado | ❌ Conectividade do Azure necessária |
| Conexões baseadas em identidade | ✅ Totalmente suportado | ❌ Não suportado | ⚠️ Requer dimensionamento orientado por tempo de execução | ✅ Totalmente suportado |
| Plano de consumo Flex | ✅ Totalmente suportado (ver notas) | ❌ Não suportado | ✅ Totalmente suportado | ❌ Não suportado |