Implementar o padrão de caixa de saída transacional com o Dataverse

As soluções empresariais precisam fornecer mensagens de forma confiável quando ocorrem alterações de dados no Dataverse. Essa arquitetura de referência mostra como implementar o padrão Transactional Outbox com o Dataverse para reduzir o risco de perda de mensagens e ajudar a manter os sistemas integrados sincronizados.

Dica

Este artigo fornece um cenário de exemplo e uma arquitetura de exemplo generalizada para ilustrar como implementar a entrega de eventos confiáveis do Dataverse. O exemplo de arquitetura pode ser modificado para muitos cenários e setores diferentes.

Diagrama de arquitetura

Diagrama de arquitetura mostrando como o Dataverse implementa o padrão de Caixa de Saída Transacional armazenando registros de caixa de saída na mesma transação que as alterações de dados empresariais e publicando mensagens para Barramento de Serviço do Azure para processamento downstream.

Workflow

As etapas a seguir descrevem o fluxo de trabalho mostrado no exemplo de diagrama de arquitetura:

  1. Ocorre uma operação de dados no Dataverse, como a criação ou atualização de um registro de contato. Essa operação cria uma transação de banco de dados.
  2. Um plug-in síncrono do Dataverse dispara em resposta a esse evento e cria um registro em uma tabela outbox dentro do Dataverse como parte da mesma transação.
  3. Se o plug-in for executado com êxito, a transação confirma as alterações do registro de caixa de saída e do registro original (por exemplo, Contato).
  4. Se a execução do plug-in falhar, o evento de dados original será revertido e o Dataverse não confirmará nenhuma modificação de registro.
  5. Um plug-in assíncrono dispara em resposta à criação de um registro na tabela de caixa de saída no Dataverse e grava uma mensagem em uma fila ou tópico Barramento de Serviço do Azure.
  6. Um consumidor de mensagens escuta mensagens para processar e enviar por push para um sistema de destino.

Componentes

O Dataverse é o sistema transacional de registro de origem em que o evento de dados ocorre e a tabela outbox reside. Ele envia mensagens de forma assíncrona para o broker de mensagens usando um plug-in.

Barramento de Serviço do Azure é o agente corporativo confiável que recebe mensagens do Dataverse para serem processadas pelos sistemas receptores.

  • As filas são ideais quando há um único receptor de uma mensagem.
  • Os tópicos são melhores quando muitos assinantes podem processar a mesma mensagem ou precisam de critérios de filtro para processar mensagens seletivamente.

Azure Monitor é uma solução de monitoramento abrangente para coletar, analisar e responder a dados de monitoramento de soluções locais e de nuvem. Use métricas internas do Barramento de Serviço do Azure para monitorar o número de mensagens em uma fila, tópico ou fila de mensagens mortas.

Aplicativo Azure Insights é usado para monitoramento de desempenho do aplicativo e pode ser habilitado para plug-ins do Dataverse para enviar logs de rastreamento para um workspace do Application Insights.

Opções alternativas:

  • Aplicativos Lógicos do Azure: uma alternativa viável de baixo código para entregar mensagens da tabela de caixa de saída para o broker de mensagens se você quiser um controle mais preciso sobre quando disparar a orquestração e a entrega da mensagem (por exemplo, microlote).
  • Azure Functions: uma alternativa com abordagem code-first que oferece mais flexibilidade e escala para lidar com volumes mais altos e novas tentativas após falhas intermitentes.

Detalhes do cenário

As soluções empresariais geralmente precisam trocar dados críticos com outros sistemas por meio de mensagens. Para garantir a consistência entre sistemas, trate a operação de dados e a entrega de mensagens como uma única operação atômica. No entanto, a maioria dos sistemas transacionais e os agentes de mensagens raramente dão suporte a transações distribuídas ou introduzem um acoplamento apertado que você deseja evitar. Sem uma transação distribuída, não há garantia de confiabilidade porque uma falha pode ocorrer ao enviar a mensagem ao broker depois que uma transação é confirmada.

O padrão Transactional Outbox resolve esse desafio criando uma mensagem na mesma transação de banco de dados local que atualiza os dados de negócios. Um processo separado pode, em seguida, entregar a mensagem da tabela de caixa de saída para o broker de mensagens. Falhas intermitentes no processo não são um problema. A tabela Outbox armazena a mensagem para que ela não seja perdida, e o processo tenta novamente até ser bem-sucedido.

O Dataverse é uma plataforma de dados de baixo código capaz e extensível com armazenamento de dados transacional que pode implementar esse padrão para cenários críticos de integração de saída.

Considerations

Essas considerações implementam os pilares do Power Platform Well-Architected, um conjunto de princípios orientadores que melhoram a qualidade de uma carga de trabalho. Saiba mais em Microsoft Power Platform Well-Architected.

Reliability

Esse padrão aumenta significativamente a confiabilidade, garante entrega pelo menos uma vez e consistência eventual, garantindo consistência transacional. Ao depender de um broker de mensagens, ele protege os sistemas downstream de serem sobrecarregados controlando o fluxo de dados entre sistemas de origem e de destino e protege contra problemas de disponibilidade de sistemas downstream.

Quando a ordenação de mensagens for necessária, habilite sessões do Barramento de Serviço do Azure na fila ou assinatura. O produtor deve atribuir um SessionId consistente, como o registro do Dataverse ou a ID de agregação, a mensagens relacionadas para que sejam processadas em ordem dentro dessa sessão. Projete os consumidores para processamento idempotente, pois esse padrão garante entrega pelo menos uma vez e mensagens duplicadas podem ocorrer. Quando a detecção de eventos ausentes ou fora de sequência é importante, as mensagens podem incluir um número de sequência no nível do aplicativo. As garantias de ordenação se aplicam em uma sessão em vez de globalmente, e a solução deve definir como as novas tentativas e mensagens enviadas para a fila de mensagens mortas afetam o processamento subsequente para essa sessão.

Segurança

Usando serviços do Azure, o Dataverse pode se autenticar no agente de mensagens (Barramento de Serviço do Azure) por meio de identidades gerenciadas do Azure por meio do recurso de identidade gerenciada do Power Platform. Essa abordagem elimina o risco de armazenar credenciais confidenciais e o tempo de inatividade causado ao rotacionar segredos.

Eficiência de desempenho

Usar um agente de mensagens como Barramento de Serviço do Azure ajuda a nivelar a carga para garantir que os aplicativos downstream não fiquem sobrecarregados durante períodos de alto volume.

Considere usar uma função Azure em um plug-in assíncrono do Dataverse para enviar mensagens para Barramento de Serviço do Azure se os volumes se tornarem muito altos. Essa abordagem fornece a maior escala e flexibilidade para processar um grande volume de registros em lote e lidar com erros transitórios.

Contributors

A Microsoft mantém este artigo. Os colaboradores a seguir escreveram este artigo.

Autores principais: