Implemente o padrão Transactional Outbox com o Dataverse

As soluções empresariais precisam de entregar mensagens de forma fiável quando ocorrem alterações de dados no Dataverse. Esta 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.

Sugestão

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

Diagrama de arquitetura

Diagrama de arquitetura que mostra como o Dataverse implementa o padrão Transactional Outbox, armazenando registos de outbox na mesma transação com alterações de dados de negócio e publicando mensagens para o Azure Service Bus para processamento a jusante.

Workflow

O passos a seguir descrevem o fluxo de trabalho mostrado no diagrama de arquitetura de exemplo:

  1. Ocorre uma operação de dados no Dataverse, como a criação ou atualização de um registo de Contacto. Esta operação cria uma transação de base de dados.
  2. Um plug-in síncrono do Dataverse é ativado em resposta a este evento e cria um registo numa tabela de saída dentro do Dataverse como parte da mesma transação.
  3. Se o plug-in for executado com sucesso, a transação confirma tanto as alterações do registo da caixa de saída como as do registo original (por exemplo, Contact).
  4. Se a execução do plug-in falhar, o evento de dados original reverte-se e o Dataverse não confirma quaisquer alterações de registo.
  5. Um plug-in assíncrono é ativado em resposta à criação de um registo na tabela da caixa de saída no Dataverse e escreve uma mensagem para uma fila ou tópico do Azure Service Bus.
  6. Um consumidor de mensagens escuta as mensagens para processar e enviar para o sistema-alvo.

Components

O Dataverse é o sistema transacional de registo de origem onde ocorre o evento de dados e onde se encontra a tabela Outbox. Envia mensagens de forma assíncrona para o message broker através de um plug-in.

O Azure Service Bus é o broker empresarial fiável que recebe mensagens do Dataverse para processamento pelos sistemas recetores.

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

O Azure Monitor é uma solução abrangente de monitorização para recolher, analisar e responder a dados de monitorização provenientes de soluções cloud e on-premises. Use métricas incorporadas para o Azure Service Bus para monitorizar o número de mensagens numa fila, tópico ou fila de mensagens mortas.

O Aplicação Azure Insights é utilizado para monitorização de desempenho de aplicações e pode ser ativado para que plug-ins Dataverse enviem registos de rastreio para um espaço de trabalho do Application Insights.

Opções alternativas:

  • Azure Logic Apps: Uma alternativa viável low-code para entregar mensagens da tabela da caixa de saída ao broker de mensagens se quiser um controlo mais preciso sobre quando desencadear a orquestração e entrega da mensagem (por exemplo, micro-batching).
  • Funções do Azure: Uma alternativa orientada para o código que lhe oferece maior flexibilidade e escala para lidar com volumes mais elevados e novas tentativas após falhas intermitentes.

Detalhes do cenário

As soluções empresariais frequentemente precisam de trocar dados críticos com outros sistemas através de mensagens. Para garantir 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 corretores de mensagens raramente suporta transações distribuídas, ou introduz forte acoplamento que se deve evitar. Sem uma transação distribuída, não há garantia de fiabilidade porque pode ocorrer uma falha ao enviar a mensagem para o broker após a transação ser confirmada.

O padrão Transactional Outbox resolve este desafio ao criar uma mensagem na mesma transação local da base de dados que atualiza os dados do negócio. Um processo separado pode então entregar a mensagem da tabela da caixa de saída para o broker de mensagens. Falhas intermitentes de processos não são um problema. A tabela da caixa de saída armazena a mensagem para que não se perca, e o processo tenta novamente até ter sucesso.

O Dataverse é uma plataforma de dados low-code capaz e extensível com armazenamento transacional de dados que pode implementar este padrão para cenários críticos de integração outbound.

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

Este padrão aumenta significativamente a fiabilidade, garante uma entrega pelo menos uma vez e a consistência eventual ao garantir a consistência transacional. Ao depender de um broker de mensagens, protege os sistemas a jusante de serem sobrecarregados ao controlar o fluxo de dados entre os sistemas de origem e alvo e protege contra problemas de disponibilidade dos sistemas a jusante.

Quando for necessário ordenar as mensagens, ative as sessões Azure Service Bus na fila ou subscrição. O produtor deve atribuir um SessionID consistente, como o registo Dataverse ou o ID do agregado, às mensagens relacionadas para que sejam processadas por ordem dentro dessa sessão. Projetar consumidores para processamento idempotente, pois este padrão fornece entrega pelo menos uma vez e podem ocorrer mensagens duplicadas. Quando é importante detetar eventos em falta ou fora de sequência, as mensagens podem incluir um número de sequência ao nível da aplicação. As garantias de ordenação aplicam-se dentro de uma sessão em vez de globalmente, e a solução deve definir como as retentativas e as mensagens enviadas para a fila de mensagens mortas afetam o processamento subsequente dessa sessão.

Segurança

Ao utilizar os serviços do Azure, o Dataverse pode autenticar-se junto do mediador de mensagens (Azure Service Bus) através de identidades geridas do Azure através da funcionalidade de identidade gerida do Power Platform. Esta abordagem elimina o risco de armazenar credenciais sensíveis e o tempo de inatividade causado ao efetuar a rotação de segredos.

Eficiência de desempenho

Usar um mediador de mensagens como o Azure Service Bus ajuda a nivelar a carga para garantir que as aplicações a jusante não ficam sobrecarregadas durante períodos de alto volume.

Considere usar uma função Azure em vez de um plug-in assíncrono do Dataverse para enviar mensagens para o Azure Service Bus caso os volumes se tornem muito elevados. Esta abordagem proporciona a maior escala e flexibilidade para processar um grande volume de registos em lote e lidar com erros transitórios.

Contributors

A Microsoft mantém este artigo. Os seguintes colaboradores escreveram este artigo.

Principais autores: