Protocolos de coordenação das transações distribuídas, Two-phase commit, 2PC ou 2PC. Até agora, nós já compreendemos que as transações distribuídas precisam de formas de terem as suas operações coordenadas entre os nós participantes desta transação. Então, agora, nós vamos detalhar um protocolo bastante popular, que é o 2-phase commit 2PC. Nós vimos que a confirmação em duas fases vai buscar garantir que todas as operações de uma transação sejam confirmadas ou revertidas de forma atômica em todos os nossos participantes. Ou seja, nós vamos resolver o problema de confirmação atômica ou de Atomic Commit. Para que isso aconteça, nesta proposta do protocolo 2PC, existem duas fases. A fase 1, chamada de preparação, onde todos nós precisamos concordar em executar a transação e ficar preparados para a sua respectiva confirmação, para executar o seu comit. E logo em seguida, a fase 2, que é confirmação, onde os nós aplicam este comit, ou seja, confirmam ou então, se naquele instante for necessário, revertem a transação com base no que aconteceu na preparação. Olhando numa linha do tempo, os interlocutores, coordenador e banco seguidores Nós vamos perceber que estes são os momentos Nós temos a escrita da informação, logo em seguida a preparação, que é a fase 1 E posteriormente a confirmação, que é a fase 2 Importante destacar que essas operações intermediárias, antes do comando commit, antes desta confirmação, não são aplicadas, ou seja, acontecem na área isolada daquela transação até que a sua confirmação aconteça, então fique aplicada e visível para todo mundo. contexto, então fique aplicada e visível para todo mundo. Então, na fase 1, nós vamos ter o coordenador, um dos nós é designado o coordenador da transação e responsável por iniciar e coordenar todo o protocolo. Teremos os nossos participantes, inclusive o coordenador pode ser um não participante, que é o não do banco de dados que tem os dados, os recursos envolvidos naquela transação que será executada. A preparação, que é o coordenador enviar umajam prontos para executar a transação, mas que ainda não façam a sua aplicação, a sua execução por completo. Assim que cada coordenador, cada participante, então assim que cada participante responder ao coordenador que está pronto, que é a mensagem REG, ou não, que precisa reverter, que é o comando ABORTS, para realizar a transação. Então, após a preparação, que é uma simulação que cada nó vai realizar para executar esta transação, é necessário sinalizar de volta para o coordenador se pode seguir ou não. Se tiver algum problema que seja impossível de executar essa transação em qualquer um dos nós, então vai acontecer a mensagem de reversão e todo mundo vai cancelar essa execução. Então, essa é a fase 1. A fase 2, após o coordenador receber as respostas de todos os participantes, a decisão de confirmação está com o coordenador. Ou seja, o coordenador verifica se todos os participantes da transação responderam de maneira positiva. Ou seja, todos podem confirmar a execução. Então, se todos estão prontos para confirmar, então o coordenador decide pela confirmação da transação. Então, o coordenador, neste momento, envia uma mensagem de confirmação para todos os participantes, conforme os votos recebidos. Se todo mundo falou que sim, pode confirmar, então todo mundo vai confirmar com base na mensagem de confirmação do coordenador. Se simplesmente um ou mais nós responderem que não estão prontos para confirmar, então o coordenador decide pela reversão da transação, pelo cancelamento, manda essa mensagem de cancelamento e todo mundo vai cancelar a transação. Quando os participantes recebem o ok do coordenador para executar, então finalmente a execução da transação é permanente, é confirmada e os nossos participantes retornam ao coordenador que a transação foi concluída com sucesso. tornam ao coordenador que a transação foi concluída com sucesso. Caso ainda assim aconteça uma mensagem de reversão, que é o aborto, todos os participantes vão reverter as alterações temporárias nas respectivas áreas isoladas de suas transações e confirmar ao coordenador que a transação foi revertida. Então, aqui nós já percebemos que o Two-Phase Commit é um protocolo síncrono, ele resolve o problema da confirmação atômica, ou seja, garante a atomicidade da transação, porém ele pode ficar no estado bloqueado até que uma decisão seja alcançada. Então, isso pode levar a problemas de desempenho, de escalabilidade e os participantes ficando bloqueados, a transação não vai conseguir progredir.