Transação distribuída - Distributed transaction

Uma transação distribuída é uma transação de banco de dados na qual dois ou mais hosts de rede estão envolvidos. Normalmente, os hosts fornecem recursos transacionais , enquanto o gerenciador de transações é responsável por criar e gerenciar uma transação global que abrange todas as operações com esses recursos. As transações distribuídas, como qualquer outra transação , devem ter todas as quatro propriedades ACID (atomicidade, consistência, isolamento, durabilidade) , onde a atomicidade garante resultados tudo ou nada para a unidade de trabalho (pacote de operações).

O Open Group, um consórcio de fornecedores, propôs o Modelo X / Open Distributed Transaction Processing (DTP) (X / Open XA), que se tornou um padrão de fato para o comportamento dos componentes do modelo de transação.

Os bancos de dados são recursos transacionais comuns e, frequentemente, as transações abrangem alguns desses bancos de dados. Nesse caso, uma transação distribuída pode ser vista como uma transação de banco de dados que deve ser sincronizada (ou fornecer propriedades ACID ) entre vários bancos de dados participantes que são distribuídos entre diferentes locais físicos. A propriedade de isolamento (o I de ACID) representa um desafio especial para transações com vários bancos de dados, uma vez que a propriedade de serialização (global) pode ser violada, mesmo se cada banco de dados a fornecer (consulte também serializabilidade global ). Na prática, a maioria dos sistemas de banco de dados comerciais usa o bloqueio estrito de duas fases (SS2PL) para controle de simultaneidade , o que garante a serialização global, se todos os bancos de dados participantes o empregarem. (consulte também pedidos de compromisso para bancos de dados múltiplos).

Um algoritmo comum para garantir a conclusão correta de uma transação distribuída é o two-phase commit (2PC). Este algoritmo é normalmente aplicado para atualizações capazes de confirmar em um curto período de tempo, variando de alguns milissegundos a alguns minutos.

Existem também transações distribuídas de longa duração, por exemplo, uma transação para reservar uma viagem, que consiste em reservar um voo, um carro alugado e um hotel. Como a reserva do voo pode levar até um dia para ser confirmada, o two-phase commit não é aplicável aqui, ele bloqueará os recursos por esse tempo. Nesse caso, técnicas mais sofisticadas que envolvem vários níveis de desfazer são usadas. Da maneira como você pode desfazer a reserva do hotel ligando para um balcão e cancelando a reserva, um sistema pode ser projetado para desfazer certas operações (a menos que sejam irreversivelmente concluídas).

Na prática, transações distribuídas de longa duração são implementadas em sistemas baseados em Web Services . Normalmente, essas transações utilizam princípios de transações de compensação , otimismo e isolamento sem bloqueio. O padrão X / Open não cobre DTP de longa duração.

Várias tecnologias modernas, incluindo Enterprise Java Beans (EJBs) e Microsoft Transaction Server (MTS), oferecem suporte total aos padrões de transação distribuída.

Veja também

Referências

  • "Transações de serviços da Web" . Arquivado do original em 11 de maio de 2008 . Recuperado em 2 de maio de 2005 .
  • "Porcas e parafusos do processamento de transações" . Artigo sobre gerenciamento de transações . Recuperado em 3 de maio de 2005 .
  • "Uma comparação detalhada entre os modelos Enterprise JavaBeans (EJB) e o Microsoft Transaction Server (MTS)" .

Leitura adicional

  • Gerhard Weikum, Gottfried Vossen, Transactional information systems: teoria, algoritmos e a prática de controle e recuperação de concorrência , Morgan Kaufmann, 2002, ISBN   1-55860-508-8