Como manter vários servidores de banco de dados de leitura / gravação em sincronia?

3

Estou curioso para saber como grandes sites espalham a carga entre o servidor de banco de dados diferente no caso em que os usuários escrevem o quanto lêem, por exemplo. quando a solução padrão de ter um mestre para aceitar escrever, e vários escravos que só permitem que os usuários leiam dados não funcionem, porque isso simplesmente transforma o servidor mestre no gargalo.

Para aqueles que gerenciam um site grande com um balanceador de carga - > vários servidores da web - > vários servidores de banco de dados, como você distribui a carga uniformemente entre os servidores de banco de dados para que os usuários (na melhor das hipóteses) não precisem esperar que o mestre atualize os escravos ou (na pior das hipóteses) os usuários acabam lendo dados sujos de escravos que ainda não foi atualizado?

Obrigado.

    
por OverTheRainbow 26.08.2009 / 09:38

6 respostas

3

Confira o link

Você pode usar métodos mais complicados de armazenar os dados, basicamente, para desnormalizar e segmentá-los em partes que podem ser carregadas em todos os servidores. Procure por fragmentos.

A resposta geral parece ser tornar a única máquina de escrita DB mais e mais poderosa o maior tempo possível antes de você passar para esses outros métodos.

Na maioria dos casos, a melhor maneira de resolver o problema é repensar o modo como seu site trabalha para reduzir o número de gravações / torná-las acessíveis.

    
por 26.08.2009 / 11:16
1

O que você precisa é de um banco de dados multi-mestre adequado. E até onde sei, o único mecanismo de banco de dados que até agora implementou isso de maneira confiável é o Oracle. O que explica de alguma forma porque todos os garotos grandes usam o Oracle.

Tendo dito isso, o MySql suporta replicação multi-master, embora (AFAIK) não esteja em uma versão completa de produção. Consulte o link para obter mais detalhes.

    
por 26.08.2009 / 16:03
0

Eu presumo que você esteja falando sobre o MySQL, baseado em seus termos. Infelizmente este DBMS tem falta de suporte para as gravações distribuídas, apenas o NDB suporta isso.

link

link

Outra solução pode ser: usar partição de nível de DNS com base na sua localização de cliente GEO resolver endereços IP diferentes onde se conectar e basicamente separar os dados por essa informação. Há um problema com este tipo de solução, se você tem uma consulta, por exemplo, você quer saber quantos itens você tem globalmente, então isso não vai funcionar muito bem.

    
por 26.08.2009 / 13:33
0

Depende do site e da parte do site.

Algumas partes terão um único servidor de gravação, que será replicado em vários servidores de leitura.

Outras partes do site terão vários servidores, cada um contendo uma pequena parte dos dados contidos neles. Por exemplo, um par de milhões de contas de clientes por servidor de banco de dados com lógica no aplicativo, para que ele saiba com qual servidor você está baseado em seu UserId.

    
por 26.08.2009 / 15:43
0

Uma solução é repensar seu aplicativo para que você possa dividir dados entre vários servidores de banco de dados. Às vezes é fácil ... às vezes não.

    
por 26.08.2009 / 16:05
0

Essa resposta não responde ao título da pergunta porque não tenta manter os bancos de dados em sincronia, mas responde ao corpo da pergunta relacionada à distribuição de solicitações de sites de alta escala.

Você pode usar o Sharding para dividir seus dados, por exemplo, você tem 26 servidores de banco de dados, um para cada letra do alfabeto. Todos os usuários com o nome começando com A vão para um servidor. Você pode usar vários algoritmos para dividir suas solicitações de maneira uniforme. É uma solução complexa que não deve ser usada até que outras opções sejam esgotadas.

link

    
por 22.11.2017 / 16:49