Transações distribuídas do saga

Azure

O padrão de design é uma maneira de gerenciar a consistência de dados entre microsserviços em cenários de transação distribuída. Uma é uma sequência de transações que atualiza cada serviço e publica uma mensagem ou evento para disparar a próxima etapa da transação. Se uma etapa falhar, a empresa executará transações de compensação que anulam as transações anteriores.

Contexto e problema

Uma transação é uma única unidade de lógica ou trabalho, às vezes feita de várias operações. Em uma transação, um evento é uma alteração de estado que ocorre em uma entidade e um comando encapsula todas as informações necessárias para executar uma ação ou disparar um evento posterior.

As transações devem ser atômicas, consistentes, isoladas e duráveis (ACID). As transações em um único serviço são ACID, mas a consistência de dados entre serviços requer uma estratégia de gerenciamento de transações entre serviços.

Em arquiteturas multisserviços:

  • Atomicidade é um conjunto indivisível e irredutível de operações que devem ocorrer todas ou nenhuma ocorrer.
  • Consistência significa que a transação leva os dados apenas de um estado válido para outro estado válido.
  • O isolamento garante que as transações simultâneas produzam o mesmo estado de dados que as transações executadas sequencialmente teriam produzido.
  • A durabilidade garante que as transações comprometidas permaneçam comprometidas mesmo em caso de falha do sistema ou falta de energia.

Um modelo de banco de dados por microsserviço oferece muitos benefícios para arquiteturas de microsserviços. Encapsular dados de domínio permite que cada serviço use seu melhor tipo e esquema de armazenamento de dados, dimensione seu próprio armazenamento de dados conforme necessário e seja isolado das falhas de outros serviços. No entanto, garantir a consistência de dados entre bancos de dados específicos do serviço apresenta desafios.

Transações distribuídas como o protocolo 2PC (confirmação de duas fases) exigem que todos os participantes em uma transação se commit ou roll back antes que a transação possa continuar. No entanto, algumas implementações de participantes, como bancos de dados NoSQL e agente de mensagens, não dão suporte a esse modelo.

Outra limitação de transação distribuída é a sincronização e a disponibilidade de IPC (comunicação entre processos). O IPC fornecido pelo sistema operacional permite que processos separados compartilhem dados. Para que as transações distribuídas sejam confirmados, todos os serviços participantes devem estar disponíveis, reduzindo potencialmente a disponibilidade geral do sistema. Implementações de arquitetura com limitações de IPC ou transação são candidatas para o padrão de estudante.

Solução

O padrão de dados fornece gerenciamento de transações usando uma sequência de transações locais. Uma transação local é o esforço de trabalho atômico executado por um participante do programa. Cada transação local atualiza o banco de dados e publica uma mensagem ou evento para disparar a próxima transação local no banco de dados. Se uma transação local falhar, o execute uma série de transações de compensação que desfazem as alterações feitas pelas transações locais anteriores.

Visão geral de Clara.

Em padrões de ões:

  • Transações compensaveis são transações que podem potencialmente ser revertidas pelo processamento de outra transação com o efeito oposto.
  • Uma transação dinâmica é o ponto de go/no-go em uma janela. Se a transação dinâmica for confirmada, o será executado até a conclusão. Uma transação dinâmica pode ser uma transação que não é aceitável nem retriável, ou pode ser a última transação aceitável ou a primeira transação que pode ser tentar novamente no momento.
  • As transações que podem ser tentar novamente são transações que seguem a transação dinâmica e têm a garantia de que serão bem-sucedidas.

Há duas abordagens comuns de implementação de orquestração,ography e orchestration. Cada abordagem tem seu próprio conjunto de desafios e tecnologias para coordenar o fluxo de trabalho.

Coreografia

A tipografia é uma maneira de coordenar os pontos em que os participantes trocam eventos sem um ponto de controle centralizado. Com a limpeza, cada transação local publica eventos de domínio que disparam transações locais em outros serviços.

Visão geral daography

Benefícios

  • Bom para fluxos de trabalho simples que exigem poucos participantes e não precisam de uma lógica de coordenação.
  • Não requer implementação e manutenção de serviço adicionais.
  • Não introduz um único ponto de falha, pois as responsabilidades são distribuídas entre os participantes do programa.

Desvantagens

  • O fluxo de trabalho pode se tornar confuso ao adicionar novas etapas, pois é difícil acompanhar quais participantes do programa escutam quais comandos.
  • Há um risco de dependência cíclica entre os participantes do programa porque eles precisam consumir os comandos uns dos outros.
  • O teste de integração é difícil porque todos os serviços devem estar em execução para simular uma transação.

Orquestração

A orquestração é uma maneira de coordenar as coordenadas em que um controlador centralizado informa aos participantes quais transações locais executar. O orquestrador de orquestrador trata todas as transações e informa aos participantes qual operação executar com base em eventos. O orquestrador executa solicitações, armazena e interpreta os estados de cada tarefa e lida com a recuperação de falha com transações de compensação.

Visão geral da orquestração

Benefícios

  • Bom para fluxos de trabalho complexos que envolvem muitos participantes ou novos participantes adicionados ao longo do tempo.
  • Adequado quando há controle sobre cada participante no processo e controle sobre o fluxo de atividades.
  • Não introduz dependências cíclicas, pois o orquestrador depende dos participantes do programa.
  • Os participantes não precisam saber mais sobre comandos para outros participantes. A separação clara de preocupações simplifica a lógica de negócios.

Desvantagens

  • A complexidade de design adicional requer uma implementação de uma lógica de coordenação.
  • Há um ponto adicional de falha, porque o orquestrador gerencia o fluxo de trabalho completo.

Problemas e considerações

Considere os seguintes pontos ao implementar o padrão de cada um:

  • Inicialmente, o padrão pode ser desafiador, pois requer uma nova maneira de pensar em como coordenar uma transação e manter a consistência de dados para um processo empresarial que abrange vários microsserviços.
  • O padrão é particularmente difícil de depurar e a complexidade aumenta à medida que os participantes aumentam.
  • Os dados não podem ser reembolsados, porque os participantes do programa confirmam alterações em seus bancos de dados locais.
  • A implementação deve ser capaz de lidar com um conjunto de possíveis falhas transitórias e fornecer idempotência para reduzir efeitos colaterais e garantir a consistência dos dados. Idempotência significa que a mesma operação pode ser repetida várias vezes sem alterar o resultado inicial.
  • É melhor implementar a observabilidade para monitorar e acompanhar o fluxo de trabalho do workflow.
  • A falta de isolamento de dados do participante impõe desafios de durabilidade. A implementação da empresa deve incluir contramedidas para reduzir anomalias.

As seguintes anomalias podem ocorrer sem medidas adequadas:

  • Atualizações perdidas, quando um grava sem ler as alterações feitas por outro.
  • Leituras sujas, quando uma transação ou uma transação lê atualizações feitas por um homem que ainda não concluiu essas atualizações.
  • Leituras difusas/não reempeáveis, quando diferentes etapas deverão ler dados diferentes porque ocorre uma atualização de dados entre as leituras.

As contramedidas sugeridas para reduzir ou evitar anomalias incluem:

  • Bloqueio semântico, um bloqueio no nível do aplicativo em que a transação compensavel de um olho usa um semáforo para indicar que uma atualização está em andamento.
  • Atualizações comutativas que podem ser executadas em qualquer ordem e produzem o mesmo resultado.
  • Exibição pessimista: É possível que uma pessoa leia dados sujos, enquanto outra está executando uma transação compensavel para reverter a operação. A exibição pessimista reordena o sistema para que os dados subjacentes atualizem em uma transação retriável, o que elimina a possibilidade de uma leitura suja.
  • O valor de releitura verifica se os dados estão inalterados e atualiza o registro. Se o registro tiver sido alterado, as etapas serão anuladas e o procedimento poderá ser reiniciado.
  • Um arquivo de versão registra as operações em um registro conforme elas chegam e as executa na ordem correta.
  • Por valor, usa o risco comercial de cada solicitação para selecionar dinamicamente o mecanismo de competência. As solicitações de baixo risco favorecem as solicitações de alto risco, enquanto as solicitações de alto risco favorecem transações distribuídas.

Quando usar esse padrão

Use o padrão quando precisar:

  • Garantir a consistência dos dados em um sistema distribuído sem acoplamento rígido.
  • Reverter ou compensar se uma das operações na sequência falhar.

O padrão é menos adequado para:

  • Transações firmemente ativas.
  • Compensação de transações que ocorrem em participantes anteriores.
  • Dependências cíclicas.

Exemplo

A Orquestração baseada em Orquestração no Sem Servidor é uma referência de implementação de orquestração que usa a abordagem de orquestração que simula um cenário de transferência de dinheiro com fluxos de trabalho bem-sucedidos e com falha.

Os seguintes padrões também serão úteis ao implementar este padrão:

  • A rotina faz com que cada componente do sistema participe do processo de tomada de decisão sobre o fluxo de trabalho de uma transação de negócios, em vez de depender de um ponto central de controle.
  • A compensação de transações desfaz o trabalho executado por uma série de etapas e, eventualmente, define uma operação consistente se uma ou mais etapas falharem. Aplicativos hospedados na nuvem que implementam processos de negócios complexos e fluxos de trabalho geralmente seguem esse modelo de consistência eventual.
  • A nova tentativa permite que um aplicativo lida com falhas transitórias quando tenta se conectar a um recurso de serviço ou rede, tentando novamente a operação com falha de forma transparente. Tentar novamente pode melhorar a estabilidade do aplicativo.
  • O disjuntor lida com falhas que levam um tempo variável de recuperação ao se conectar a um serviço ou recurso remoto. O disjuntor pode melhorar a estabilidade e a resiliência de um aplicativo.
  • O monitoramento de ponto de extremidade de saúde implementa verificações funcionais em um aplicativo que as ferramentas externas podem acessar por meio de pontos de extremidade expostos em intervalos regulares. O monitoramento do ponto de extremidade de saúde pode ajudar a verificar se os aplicativos e serviços estão executando corretamente.
  • Dados distribuídos
  • Ela, Chris. 2018: Padrões de microsserviços. Publicações de Publicações de Publicações de Publicações.