Transações distribuídas. Nós vimos que as transações de bancos de dados correspondem às operações de leitura e escrita necessárias para registrar uma transação financeira ou econômica da vida real. Agora, vamos nos aprofundar adicionando o conceito de sistemas distribuídos e justamente falando de transações distribuídas. Nós vamos perceber que bancos de dados distribuídos normalmente dividem as suas tabelas, no caso dos relacionais ou coleções, no caso dos non-cycle, em partições, ou nós, ou charts, ou alguma unidade de divisão, que são espalhadas por diferentes servidores que são acessados por muitos clientes. Então, aqui nós temos um tema de distribuição física da informação, e até mesmo podemos entender isso como física e geográfica. A informação, os dados estão persistidos, estão sendo acessados em locais diferentes e de maneira simultânea. Então, as transações que abrangem diferentes servidores, geralmente vão abrangir diferentes servidores, porque vão demandar leituras em várias dessas partições que estão distribuídas em vários desses nós ou servidores. Então, nós vamos concluir que uma transação distribuída é uma transação de banco de dados que abrange vários servidores. que abrange vários servidores. Ainda sobre este tópico, nós temos que os sistemas distribuídos são múltiplos nós ou servidores que participam da execução desta transação. E isso faz com que vários recursos distribuídos estejam envolvidos na execução desta transação, que é composta de uma série de operações de leitura e escrita. Então, como consequência, vai surgir a necessidade de uma coordenação entre os nós para que estas operações ocorram de maneira íntegra, de maneira consistente. essas operações ocorram de maneira íntegra, de maneira consistente. E para isso, surge o conceito de protocolos de coordenação. Entre os mais populares, que nós vamos detalhar nas aulas seguintes, temos o 2PC, que é o Two-Phase Commit, 3PC, Three-Phase Commit, o Paxos e Raft, que são justamente os mais populares para facilitar essa coordenação e garantir a integridade dos dados. Os elementos envolvidos em uma transação distribuída são, primeiro, este ponto que estamos falando, coordenação. Então, várias operações são executadas em diferentes nós ou servidores. Um destes nós é designado como coordenador da transação. Esta escolha do coordenador pode acontecer de maneira aleatória ou pode seguir algum critério. Isso vai variar de sistema para sistema. E o objetivo aqui é garantir a consistência dos dados e a atomicidade das operações. Temos também os participantes, que são os nós de operações de leitura, de escrita, de atualização, de exclusão, em seus respectivos recursos de dados que estão sob sua gestão local. Temos também isolamento e consistência. Então, as operações de uma transação são invisíveis para as outras transações, até que aconteça o sucesso, o êxito dessa transação, isso é o isolamento, e as operações devem manter a integridade e a consistência dos dados em todo o sistema. Então, isso é consistência. Até aqui, perceba que estamos resgatando o que já discutimos sobre atomicidade, consistência, isolamento. sobre atomicidade, consistência, isolamento. E avançando, então, especificamente sobre atomicidade, todas as operações de uma transação são confirmadas ou revertidas de forma atômica. Até aqui não mudamos nada o conceito, porém a gente adiciona aqui que estão em todos os nós participantes. Ou todas as operações são bem-sucedidas em todos os nós e são confirmadas, ou nenhuma delas é confirmada e todas as alterações serão revertidas em todos os nós. E o tema que também já destacamos, protocolo de coordenação para que tudo isso funcione e a gente tenha um estado íntegro ao final da execução dessas transações, precisamos de coordenação. Então, essa execução de forma consistente e segura, de um sistema distribuído, é garantido pelo protocolo de coordenação. E já falamos também dos protocolos mais populares para isso.