Banco de Dados Distribuído
Rogério Morais Rocha
Bacharel em Ciência da Computação
Pós-Graduação Gestão Estratégica da Informação
e-mail : moraisrocha@gmail.com
• Transações
– A transação é uma ação executada sobre um banco de dados que gera uma nova versão do banco de dados, porém esta ação deve ser atômica e confiável a fim de manter a consistência dos dados.
– Uma transação em um banco de dados encontra
algumas dificuldades para a sua execução, tais como:
transações concorrentes e ocorrência de falhas durante a sua execução.
– Dentro de uma transação de banco de dados podem ocorrer várias ações como as seguintes: leitura de
dados, gravação de dados e computação sobre os dados.
• Transações
– Uma transação para garantir sua eficiência necessita das seguintes características (ACID):
• Atomicidade: Todas as operações são executadas ou nenhuma;
• Consistência: uma transação sai de um estado consistente para outro;
• Isolamento: uma transação não enxerga outra concorrente;
• Durabilidade: uma vez a transação completada os seus dados são persistidos no banco de dados e não podem mais ser apagados.
• Transações
– Uma transação distribuída deve respeitar as propriedades ACID, porém em um ambiente distribuído.
– As transações podem ser Locais ou Globais, as
transações locais são aquelas que mantém acesso e
atualizam apenas a base de dados local, já as
transações globais mantêm acesso e atualizam
diversas bases de dados locais e remotas.
• Transações
– Para processar uma transação, cada nó do sistema contém dois subsistemas:
• o Gerenciador de Transações é responsável pelo gerenciamento de execuções das transações (ou subtransações), que acessam dados armazenados em um nó local, além de garantir as propriedades ACID.
• e o Coordenador de Transações coordena a execução de várias transações (locais e globais) iniciados naquele nó e deve garantir a atomicidade da transação através do protocolo de efetivação.
• Transações
– Transações distribuídas podem ocorrer devido a
diversos fatores, entre os quais incluem [DEMP, 1997]: • Itens de informações pertencentes a uma operação
podem estar distribuídas em diversos servidores (nós);
• Uma transação pode necessitar de acesso a mais de um recurso e talvez, conseqüentemente, mais de um servidor;
• Um servidor provendo um serviço pode ter que contactar outro servidor para poder prover este mesmo serviço;
• Transações – Protocolo Two-Phase Commit
– O protocolo Two-phase Commit (2PC) é um protocolo muito simples que assegura a consolidação atômica de transações distribuídas. Uma transação distribuída necessita de um commit especial.
– Durante uma transação, o gerenciador de uma transação não pode simplesmente aguardar a
resposta de commit de um dos sites, pois, durante o
commit de um deles, pode haver um erro, e se os
outros já deram commit, não será possível dar
rollback na transação. Por isso o 2PC divide esta tarefa
em duas fases [MIT, 1995]
• Transações – Protocolo Two-Phase Commit – Fase de preparação
– Na fase de preparação o gerenciador de transação envia uma mensagem “prepare” a todos os sites participantes e entra no estado de espera. Então os gerenciadores locais de cada site participante da transação verificam se é possível consolidar a transação.
– Depois de receber uma resposta de todos os
participantes, o gerenciador decide entre consolidar ou abortar a transação (Fase Commit). Esta resposta uma vez enviada não poderá ser alterada.
• Transações – Protocolo Two-Phase Commit – Fase Commit
– Para o gerenciador chegar a uma decisão de término global de uma transação,duas regras governam essa decisão; juntas elas formam a regra de consolidação
global:
– Se até mesmo um participante votar por abortar a transação, o gerenciador tem de chegar a uma
decisão de abortar global.
– Se todos os participantes votarem por consolidar a transação, o gerenciador tem de chegar a uma
decisão de consolidação global.
• Sucesso na Two-Phase Commit
• Insucesso na Two-Phase Commit
• Algoritmo Coordenador Two-Phase Commit
• Algoritmo Participante Two-Phase Commit
• Problemas – Protocolo Two-Phase Commit
– Um dos problemas do consenso é garantir que a transação seja completada, pois pode ocorrer uma falha de um participante e a transação ficar em um estado de incerteza, porque os participantes não
conseguem alterar o seu voto e abortar a transação. – Um dos grandes problemas nos protocolos de commit
atômicos é o tempo em que as transações ficam nos estados de incerteza porque em alguns casos pode ocorrer que todos tenham aceitado realizar o commit e ocorrer uma falha de algum participante e a
• Problemas – Protocolo Two-Phase Commit
– Por exemplo, pode ocorrer uma falha do coordenador que vai ficar por tempo indeterminado fora, e neste período os dados da transação ficam bloqueados. Nesta situação, os participantes somente irão
completar a transação após a recuperação do coordenador.
• Transações – Protocolo Three-Phase Commit
– Este protocolo possui um conjunto de estados locais da transação (tr). Antes de iniciar o protocolo de
commit a transação encontra-se no estado de
execução (E) e logo após sua finalização, ele pode estar no estado de commit ( C ) ou de aborto (A). O processador entra no estado de incerteza (U) logo após votar sim para a operação de commit e o
próximo estado que ele vai entrar é o de committable (Ce) . Neste último estado é possível abortar a
transação, porém esta decisão não é local, mas um consenso entre os participantes. No caso de abortar
• Transações – Protocolo Three-Phase Commit
– Este protocolo utiliza estes estados para gravar o log da transação que pode ser utilizado em um processo de recuperação. Caso não ocorra falhas o 3PC
comporta-se como 2PC, porém incrementado com uma fase.
• Transição de estados de 3PC
• Algoritmo Coordenador Three-Phase Commit
• Algoritmo Participante Two-Phase Commit
• Conclusão
– Os algoritmos 2PC e 3PC são algoritmos planejados para suportar falhas de participantes e garantir a confiabilidade, atomicidade e durabilidade das transações.
– O comportamento do algoritmo 3PC, no caso de não ocorrer falhas, é idêntico ao algoritmo 2PC, porém com uma fase incrementada.
– O 3PC é um algoritmo não bloqueante, ou seja, permite que uma transação seja finalizada sem a necessidade de realizar bloqueios. No caso de falha de um participante, ele deve se recuperar sozinho, pois o protocolo vai guiar a transação a um estado de finalização independente dele.
– O 3PC tem a vantagem de não ser bloqueante, porém troca
• Controle Distribuído de Concorrência
– O mecanismo de controle de concorrência de um SGBD distribuído assegura que a consistência do
banco de dados seja mantida, assim se as transações são consistentes internamente, a maneira mais
simples de alcançar esse objetivo é executar cada
transação sozinha, mas claramente esta alternativa só tem interesse teórico e não pode ser implementada em sistema prático, pois minimiza a concorrência do sistema, em que o nível de concorrência talvez seja o parâmetro mais importante em sistemas distribuídos [BALTER, 1982].
• Controle Distribuído de Concorrência
– Há diversos modos de classificar as abordagens de controle da concorrência.
– Alguns algoritmos propostos exigem um banco de
dados totalmente replicado, enquanto outros operam sobre banco de dados parcialmente replicados.
– A análise dos algoritmos resulta em duas classes:
• Os que se baseiam em acesso mutuamente exclusivos a dados compartilhados (bloqueio);
• Os que ordenam a execução das transações de acordo com um conjunto de regras (protocolos).
• Controle Distribuído de Concorrência
– Os algoritmos são usados com dois pontos de vista:
• Visão pessimista – muitas transações entraram em conflitos entre si.
• Visão otimista – não haverá um número muito grande de transações que entrarão em conflito entre si.
– Na abordagem baseada em bloqueios, a sincronização das transações é alcançada empregando-se bloqueio físicos ou lógicos em alguma porção ou grânulo do banco de dados.
• Classificação de algoritmos de controle a concorrência
• Controle Distribuído de Concorrência
– Essa classe é subdividida, de acordo com o local em que as atividades de gerenciamento de bloqueios são executadas.
• Bloqueio centralizado, um dos sites da rede é designado como o site primário no qual são armazenadas as
tabelas de bloqueio para o banco de dados inteiro e recebe a responsabilidade de conceder bloqueios a transações.
• Bloqueio da cópia primária, uma das cópias (se houver várias) de cada unidade de bloqueio é designada como a cópia primária; essa é a cópia que tem que ser
bloqueada para o propósito de acessar essa unidade
• Bloqueio da cópia primária
Banco de Dados Distribuído
A unidade de bloqueio D é replicada em Paris,
Memphis e Los Angeles. Um site, por exemplo, LA é
selecionado como o site primário para D.
Todas as transações que desejam acesso a D obtêm seu bloqueio no site de LA antes de
poderem acessar uma cópia de D.
• Controle Distribuído de Concorrência
• Bloqueio descentralizado, a tarefa de gerenciamento de bloqueios é compartilhada por todos os sites de uma rede. Nesse caso, a execução de uma transação envolve a participação e a coordenação de escalonadores
presentes em mais de um site.
– A classe de ordenação de timbres de horas(TO –
timestamp ordering) envolve a organização da ordem de execução das transações de tal forma que elas
mantenham a consistência mútua de transações. Essa ordenação é mantida pela atribuição de timbres de hora às transações e também aos itens de dados que
• Controle Distribuído de Concorrência
– Em alguns algoritmos baseados em bloqueios, também são usados timbres de hora.
– Isto é feito principalmente para melhorar a eficiência e o nível de concorrência.
– Esta classe é denominada de algoritmo híbrido.
– Este algoritmo nunca foi implementado em nenhum SGBD distribuído comercial ou de pesquisa.
• Conclusão
– O mecanismo distribuído de controle de concorrência de um SGBD distribuído assegura que a consistência do banco de dados distribuído será mantida e,
portanto, é um dos componentes fundamentais de um SGBD distribuído.
– E isto é evidenciado pela quantidade significativa de pesquisas que foram conduzidas nessa área.