DBMS Distribuído - Protocolos de Compromisso
Em um sistema de banco de dados local, para confirmar uma transação, o gerenciador de transações precisa apenas transmitir a decisão de confirmar ao gerenciador de recuperação. No entanto, em um sistema distribuído, o gerenciador de transações deve transmitir a decisão de comprometer a todos os servidores nos vários sites onde a transação está sendo executada e aplicar a decisão de maneira uniforme. Quando o processamento é concluído em cada site, ele atinge o estado de transação parcialmente confirmada e espera que todas as outras transações alcancem seus estados parcialmente confirmados. Quando recebe a mensagem de que todos os sites estão prontos para se comprometer, ele começa a se comprometer. Em um sistema distribuído, todos os sites são confirmados ou nenhum deles o faz.
Os diferentes protocolos de confirmação distribuída são -
- Compromisso de uma fase
- Compromisso de duas fases
- Compromisso trifásico
Compromisso distribuído de uma fase
A consolidação distribuída de uma fase é o protocolo de consolidação mais simples. Vamos considerar que existe um site de controle e vários sites escravos onde a transação está sendo executada. As etapas do commit distribuído são -
Após cada escravo ter completado sua transação localmente, ele envia uma mensagem “DONE” para o site de controle.
Os escravos aguardam a mensagem “Commit” ou “Abort” do site de controle. Este tempo de espera é chamadowindow of vulnerability.
Quando o site de controle recebe a mensagem “DONE” de cada escravo, ele toma a decisão de confirmar ou abortar. Isso é chamado de ponto de confirmação. Em seguida, ele envia essa mensagem para todos os escravos.
Ao receber esta mensagem, um escravo confirma ou aborta e então envia uma mensagem de confirmação para o site de controle.
Commit de duas fases distribuídas
O commit de duas fases distribuído reduz a vulnerabilidade dos protocolos de commit de uma fase. As etapas realizadas nas duas fases são as seguintes -
Phase 1: Prepare Phase
Após cada escravo ter completado localmente sua transação, ele envia uma mensagem “DONE” para o site de controle. Quando o site de controle recebe a mensagem “DONE” de todos os escravos, ele envia uma mensagem “Prepare” para os escravos.
Os escravos votam se ainda querem se comprometer ou não. Se um escravo deseja submeter, ele envia uma mensagem “Pronto”.
Um escravo que não deseja submeter envia uma mensagem “Not Ready”. Isso pode acontecer quando o escravo tem transações concorrentes conflitantes ou há um tempo limite.
Phase 2: Commit/Abort Phase
Depois que o site de controle recebeu a mensagem "Pronto" de todos os escravos -
O site de controle envia uma mensagem “Global Commit” aos escravos.
Os escravos aplicam a transação e enviam uma mensagem “Commit ACK” ao site de controle.
Quando o site de controle recebe a mensagem “Commit ACK” de todos os escravos, ele considera a transação como confirmada.
Depois que o site de controle recebeu a primeira mensagem "Not Ready" de qualquer escravo -
O site de controle envia uma mensagem de “aborto global” aos escravos.
Os escravos abortam a transação e enviam uma mensagem “Abort ACK” ao site de controle.
Quando o site de controle recebe a mensagem “Abort ACK” de todos os escravos, ele considera a transação como abortada.
Commit Trifásico Distribuído
As etapas no commit de três fases distribuídas são as seguintes -
Phase 1: Prepare Phase
As etapas são as mesmas do commit de duas fases distribuído.
Phase 2: Prepare to Commit Phase
- O site de controle emite uma mensagem de transmissão “Entrar no estado preparado”.
- Os sites escravos votam “OK” em resposta.
Phase 3: Commit / Abort Phase
As etapas são as mesmas do commit de duas fases, exceto que a mensagem “Commit ACK” / ”Abort ACK” não é necessária.