Re: [firebase-br] Ajuda com replicação de bases de dados
Jean Vichinheski
jean em equipesul.com.br
Sex Maio 12 13:12:29 -03 2006
Essas informações foram tiradas de um documento da web que não me lembro
onde peguei mais da uma ideia basica de como funciona a replicação e alguns
problemas.
Replicação
Replicação de dados é a criação e a manutenção de cópias de uma base de
dados ou sistema de arquivos. Estas cópias são mantidas em servidores
independentes para aumentar a confiabilidade e garantir acesso local. Um dos
aspectos centrais a ser considerado em replicação de dados é a política de
gerenciamento na atualização das réplicas dos dados no sistema distribuído.
Quando da atualização de uma cópia do repositório de dados, em um dos
servidores, as demais cópias devem refletir, imediatamente ou de forma
diferida, esta alteração. A replicação de dados em sistemas distribuídos é
utilizada para torná-los mais confiáveis e seguros, pois o sistema pode
sobreviver à falhas de uma ou mais cópias do componente replicado. Além
disso, é desejável que os detalhes da replicação sejam escondidos dos
usuários finais, proporcionando transparência de localização: o usuário
utiliza uma das réplicas sem perceber qual.
Utilizando a replicação, os dados compartilhados podem ser distribuídos
automaticamente para a plataforma destino, diminuindo o tráfego na rede e
melhorando os requisitos de disponibilidade, isto pode ser usado para
aplicações que são obrigadas a compartilhar dados com outras aplicações.
A tecnologia de replicação pode suportar as aplicações de suporte a decisão
pela melhora de disponibilização dos dados, performance no acesso aos dados,
e usabilidade dos dados. Isto ajuda os funcionários de uma empresa a terem
informações seguras e atualizadas para poderem tomar decisões efetivas e
exatas. Também é possível consultar informações antigas, e estas podem
conter o que mudou e quando mudou.
Os clientes que estão migrando suas aplicações antigas ou replicando os
dados entre vários ambientes podem utilizar a replicação para reduzir o
tempo de desenvolvimento e o custo de manutenção da aplicação, os dados
podem ser formatados através do acesso compartilhado de várias fontes de
dados.
Os sistemas estão direcionados para ter cada vez mais disponibilidade,
mantendo a competitividade e a satisfação da demanda de clientes. Isto acaba
gerando uma pressão sobre a janela batch que geralmente ajuda na
reorganização do banco de dados. A replicação cria um backup do sistema onde
o acesso pode ser redirecionado durante quedas planejadas e ajuda a eliminar
o processo de extração do processo de batch pela replicação dos dados em
background ao longo do dia.
Pode-se distinguir três formas de replicação de arquivos em sistemas
distribuídos
· replicação em lotes: a comunicação é estabelecida em intervalos de
tempo e é baseada em transações enfileiradas que são agendadas para
processamento posterior nos servidores que possuam réplicas dos dados. As
políticas de agendamento variam podendo ocorrer em um determinado intervalo
de tempo ou em função da quantidade de alterações acumulada ou, ainda, em
instantes específicos de um ciclo de processamento. Uma vez que a
comunicação é estabelecida, conjuntos de dados são copiados para o servidor
com dados replicados. Os protocolos mais utilizados são FTP e RDIST. Esta
forma é muito usada para sincronização de espelhos de sites Web na Internet;
· replicação por demanda: os servidores replicados obtêm o conteúdo
quando necessário devido à demanda das aplicações. Quando uma aplicação
solicita um recurso que não esteja no conjunto de dados do servidor
replicado ou que esteja desatualizado é atendido o pedido buscando o recurso
no servidor original. Os protocolos mais utilizados são FTP, HTTP e ICP;
· replicação sincronizada: os servidores replicados cooperam usando
estratégias sincronizadas e protocolos especializados de réplica para manter
os conjuntos de dados replicados coerentes (two phase lock and commit
protocols).
As estratégias de sincronização variam desde fortemente coerentes (alguns
poucos minutos) até fracamente coerentes (algumas horas). As atualizações
ocorrem entre as réplicas baseadas nas restrições de tempo do modelo de
coerência empregado e são feitas, geralmente, apenas através dos dados que
foram modificados.
Ao se utilizar arquivos replicados, surge a questão de que se deve replicar
todo o conteúdo ou simplesmente particionar os dados em servidores
diferentes. Ao se escolher a replicação, deve-se estar ciente de que o
conteúdo deve estar sincronizado em servidores diferentes.
Um problema a ser resolvido é como replicar o conteúdo de forma
transparente, autônoma e com alto desempenho. Deve-se avaliar,
cuidadosamente, que aspectos devem ser privilegiados, como a consistência, a
disponibilidade dos dados ou o desempenho que se deseja alcançar. As
questões anteriores devem ser tratadas ao se trabalhar com replicação no
ambiente distribuído: algoritmos de distribuição das réplicas, colocação das
réplicas, consistência e atualização de versões.
Sendo a cópia de informações de um ou mais Banco de dados para outro
semelhante, depois das informações estarem consistentes existem dois tipos
básicos de replicação - SÍNCRONA E ASSÍNCRONA
Replicação Síncrona:
Todas as cópias ou replicações de dados serão feitas no instante da
sincronização e consistência. Se alguma cópia do banco é alterada, essa
alteração será imediatamente aplicada a todos os outros bancos dentro da
transação. A Replicação Síncrona é apropriada em aplicações comerciais onde
a consistência exata das informações é de extrema importância.
Replicação Assíncrona:
Armazena e faz a replicação. A cópia de dados fica fora de sincronia entre
os BDs. Se um BD é alterado, a alteração será propagada e aplicada para
outro BD num segundo passo, dentro de uma transação separada sendo que esta
poderá ocorrer segundos, minutos, horas ou até dias depois. A cópia poderá
ficar temporariamente fora de sincronia, mas quando a sincronização ocorrer
os dados convergirão para todos os locais especificados.
Este documento trata exclusivamente sobre replicação de dados assíncrono.
Quais componentes são necessários para a replicação de dados
Capturando as alterações no banco de dados de origem.
Toda estratégia de replicação de dados requer um método para capturar as
alterações para um banco de dados de replicação. Há dois mecanismos
principais - Logs de Transação e Triggers.
Logs de transação abordam a utilização de uma técnica chamada "log Sniffing"
a qual replica uma transação sinalizada para replicação para um plataforma
de transmissão. Esta técnica causa um impacto menor no servidor de Banco de
Dados porque requer menos CPU quando da leitura de "Log" na memória e também
na gravação para o disco. Este método de replicação é utilizado também por
outros fabricantes de Bancos como Sybase, Informix e MS SQL/Server.
A Segunda técnica usa triggers no Banco de dados para propagar as alterações
quando elas ocorrem. Como a Linguagem procedural de Banco de dados pode ser
utilizada nesse método, ela provê maior flexibilidade a medida que os dados
são replicados. Esta implementação de replicação é utilizada pelo Ingres, e
Oracle, também é a técnica que nós utilizamos ao trabalharmos com replicação
com Interbase e as triggers que utiliza o replicador é de insert, update e
delete.
Transmitindo alterações de um de Banco de Dados para o(s) Banco de dados
Destino
Para a transmição das alterações para o BD destino é requerido um Software
que lê as alterações e as transmite ao BD Destino situado em algum lugar da
rede e grava as alterações.
Este Software é conhecido como um gerenciador de replicação (Replicador) e
também controla erros e conflito de Updates.
Conflitos de Update
Erro mais freqüente e que mais implica na segurança para replicação
Assíncrona é crítica para quase todas as aplicações. Porém, o que
aconteceria se o mesmo elemento de dados (por exemplo, a mesma coluna de um
mesmo registro) for atualizada em dois locais diferentes ao mesmo tempo, ou
mais precisamente no mesmo intervalo de replicação?
Isto é conhecido como conflito de Update. Sendo assim quanto menor for o
tempo de atualização da réplica (ou seja, menor o intervalo(ciclo) de
atualização) menor será a possibilidade de ocorrer conflitos de atualização.
Alternativamente, os conflitos de atualizações podem ser evitados limitando
o "ownership" ou o direito para atualizar um elemento de dado para um
determinado local. Na realidade, muitos acreditam que resolução de conflito
é uma questão de processamento e não uma questão para os desenvolvedores de
software. Eliminando a possibilidade de conflitos através de design e
procedimentos, o software não precisaria resolver conflitos de updates pois
os mesmos nunca ocorreriam, na teoria não é o que acontece hoje.
Essa visão no entanto é muito limitada quando os clientes estão exigindo que
várias opções para resolução de conflitos sejam incorporadas nas ferramentas
de replicação de dados.
Unique Keys e Generators
Tipicamente quando se trabalha com chaves únicas inteiras, uma trigger de
BEFORE INSERT é utilizada adicionar e recuperar um novo valor de um
generator. Quando se trabalha com replicação isso pode gerar alguns
problemas.
O problema está em manter dois ou mais Banco de Dados sincronizados. Veja o
exemplo abaixo:
Em um BD, o generator contém o valor 5. Quando um novo registro é
adicionado, a trigger incrementa o valor do generator em 1 e o valor para a
chave do novo registro passa à ser 6.
Este registro é replicado para um outro Banco de Dados.
Nesse segundo BD, o valor do generator é de 100. Quando o registro replicado
for inserido no segundo BD, uma trigger sobrepõe o valor da chave (6) com o
próximo valor do generator (101).
A solução tem duas possibilidades:
A primeira é confiar que o Cliente irá dar um valor a chave e não usar
trigger.
A Segunda é dar intervalos de valores para cada BD o que acontece hoje com o
replicador, sendo que cada local possuirá certos valores de chave. Como no
Interbase um valor do tipo Interger pode chegar a 2 bilhões de números, os
intervalos de números poderiam ser divididos em partes de milhões se for
necessário. O Generator para cada local poderá ser inicializado com um
intervalo diferente usando para isso o comando para alterar o valor inicial
do Generator:
SET GENERATOR GEN_NAME TO 1000000;
Inicialização
Se você replicar uma origem de dados para um destino, então você precisará
inicializar o destino pois ele estará fora de sincronia com a origem..
Tipicamente, você poderá fazer isto simplesmente implementando uma recarga
dos dados da origem para o destino, ou seja do Banco de Dados para sua
Replicação.
Alterações na DDL e DML
O Replicador é responsável pela manipulação do DML que é a linguagem de
manipulação de dados enquanto precisa ter implementado algum dispositivo
para manipular o DDL que seria a linguagem do banco onde é possível alterar
a estrutura do banco e atualizar com as novas implementações que serão
feitas e uma quisito importante para uma replicação segura é sempre manter
as estruturas idênticas dos bancos replicados.
----- Original Message -----
From: "Francisco A Souza" <francisco em logosinfo.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Friday, May 12, 2006 11:32 AM
Subject: Re: [firebase-br] Ajuda com replicação de bases de dados
eu gostaria de mais detalhes, se puder passar algum documento. ex. seria
bom. obrigado
----- Original Message -----
From: "Jean Vichinheski" <jean em equipesul.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Friday, May 12, 2006 11:22 AM
Subject: Re: [firebase-br] Ajuda com replicação de bases de dados
Trabalho com replicação Assincorna
de banco de dados a quase 5 anos com diversos SGDBs, temos um software
desenvolvido
aqui mesmo ele trabalha ate com linha discada se tiverem alguma duvida como
funciona a replicação !!!
abs,
Jean
----- Original Message -----
From: "Eduardo Jedliczka (TeamFB)" <jedyfb em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Friday, May 12, 2006 10:54 AM
Subject: Re: [firebase-br] Ajuda com replicação de bases de dados
Bom, deixa eu dar o meu pitaco...
Durante o estuda da minha pós em banco de dados, estudei muito sobre
replicação de dados, este foi minha primeira tentativa de tema para a
monografia!!!
Descobri, que a maioria dos bancos tidos como "grandes" possui ferramentas
internas de replicação e/ou auditoria. Coisas estas inexistentes no FB, mas
possíveis de implementação mediante algum "trabalho".
bom, de forma resumida, qualquer replicador tido como "EFICIENTE" trabalha
com triggers para alimentar as tabelas "sombra", ou seja, duplicando o banco
local em outras tabelas contendo apenas os registros inseridos, alterados e
excluidos.
depois disto, ha um programa que lê as tabelas sombra em um banco e executa
estas operações em outro banco.
Se você for fazer isto pela web, funcioná sem problemas. O único senão, é
que o firebird possui um protocolo muito pesado, ou seja, quase que
impraticável. Mas dá para contornar utilizando WebServices, WebSphere ou até
mesmo um "protocolo leve" via ASP ou PHP, isto sem citar acesso remoto via
4 camadas. (banco origem -> servidor web c/ php ou aplicacao servidora ->
aplicação cliente -> banco destino )
Só que nenhum dos replicadores que eu estudei foram projetados para
trabalhar com pouca largura de banda.
Se desejarem conversar sobre uma possível abordagem, posso escrever algo
mais detalhado (e publicar em algum lugar mediante ajuda do Mestre Cantu).
Mas gostaria de afirmar que não sou dono da verdade, e que nesta lista há
pessoas muito mais hábeis e versadas em replicação do que eu, que poderiam
contribuir grandemente neste assunto.
======================
Eduardo Jedliczka
Membro do TeamFB - FireBase
Apucarana - PR
======================
----- Original Message -----
From: "Rodrigo Schiavo" <rodrigo.schiavo em sti.ind.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Friday, May 12, 2006 7:41 AM
Subject: Re: [firebase-br] Ajuda com replicação de bases de dados
Sim, como eu disse no corpo do e-mail, a velocidade da replicação
on-line não foi satisfatória, ficou bastante lenta. Acredito que meu
problema seja resolvido com a replicação off-line.
Vou entrar em contato hoje com o desenvolvedor do FBReplicator para ver
se alguma forma de replicação off-line sera implementada, ou se devo
fazer isso por conta própria.
Rodrigo A. de Freitas escreveu:
> Como ficou o desempenho da replicação sendo feita via internet ? Não é
> um tanto quanto lento ?
>
> []'s
>
>
> Rodrigo A. de Freitas
> Análise e Desenvolvimento
> -----------------------------------
> Soluções & Informática
> www.solucoeseinformatica.com.br
>
>
> Rodrigo Schiavo escreveu:
> > Consegui resolver meu problema com ele aqui.
> >
> > Suporta sim, estou testando a seguinte estrutura aqui:
> >
> > SERVIDOR_REDE_INTERNA > MAQUINA_REPLICADORA > SERVIDOR_MAQUINA_REMOTA
> >
> > Estou usando 3 máquinas para esta operação, uma delas é dedicada ao
> > replicador, porém como minhas bases sofrem muitas inserções e deletes
> > por segundo, a velocidade de replicação online não ficou satisfatória,
> > estou tentando configurar replicação por arquivos OffLine de alterações
> > agora.
> >
> > Att.
> > Rodrigo Schiavo
> >
> >
>
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
>
>
>
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
--
Internal Virus Database is out-of-date.
Checked by AVG Anti-Virus.
Version: 7.0.344 / Virus Database: 267.12.5/147 - Release Date: 24/10/2005
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.1.392 / Virus Database: 268.5.6/337 - Release Date: 11/05/2006
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
--
Internal Virus Database is out-of-date.
Checked by AVG Anti-Virus.
Version: 7.0.344 / Virus Database: 267.12.5/147 - Release Date: 24/10/2005
Mais detalhes sobre a lista de discussão lista