Sistema de arquivos virtual agindo como um clone + diferença de um sistema de arquivos mestre

1

Na minha empresa, cerca de 10 desenvolvedores compartilham um servidor de desenvolvimento do Ubuntu. Nós temos diretórios de código separados, mas devido ao tamanho do nosso banco de dados (cerca de 50 GB), não é prático clonar o banco de dados mysql para cada desenvolvedor. Então, agora, estamos todos compartilhando um único banco de dados. No entanto, eu queria saber se isso é possível:

Crie um sistema de arquivos mestre (ext4) que armazene o banco de dados de 50 GB. Este sistema de arquivos não teria um servidor mysql sendo executado e seria na prática somente leitura. Crie um sistema de arquivos virtual para cada desenvolvedor que faça referência ao sistema de arquivos mestre e armazene um diff de cada mudança para ele. Tem um servidor mysql rodando em cada sistema de arquivos virtual. Em seguida, cada desenvolvedor obtém seu próprio banco de dados para fazer o que quiser, sem duplicar desnecessariamente o banco de dados de 50 GB.

Eu não olhei como o mysql armazena seus dados no disco, mas devido ao desejo de minimizar o i / o do disco, eu suspeito que as pequenas mudanças que nós fazemos em nossos testes de rotina não criarão um enorme diffs no sistema de arquivos virtual.

Especificamente, estas são as minhas perguntas:

  • Esta arquitetura é possível?
  • Essa é a maneira mais fácil de alcançar meu objetivo?
  • Esse sistema de arquivos virtual já existe?
por Joel 09.06.2014 / 18:46

1 resposta

1

Para responder às suas perguntas (da próxima vez, por favor, numere-as para facilitar a sua referência):

  • Deve ser possível
  • NÃO parece a maneira mais fácil
  • Sim, esse FS virtual existe.

Sua ideia parece um bom caso de uso para um overlayfs . Você pode usar seu FS de banco de dados existente como o sistema de arquivos "inferior", e um FS "diff" por desenvolvedor como o sistema de arquivos "superior". O Overlayfs permite usar diretórios como "superior" e "inferior", portanto você não precisa necessariamente montar bancos de dados em diretórios diferentes.

Em seguida, você precisaria configurar cada instância do MySQL por desenvolvedor para usar um datadir diferente.

De longe, a maneira mais fácil é abocanhar a bala, equipar seu servidor com um disco rígido de 1 TB, clonar o banco de dados quantas vezes precisar para cada desenvolvedor e executar uma instância do MySQL para cada desenvolvedor ou uma instância gerencia todos os bancos de dados. A diferença para os desenvolvedores aqui é especificar uma porta diferente versus um nome de banco de dados diferente. IMHO seria mais simples ter apenas uma instância do MySQL, pois significa menos partes móveis.

O fator a considerar aqui é quanto tempo levará para desenvolver a solução overlayfs vs. quanto custa um disco rígido de 1 TB para o seu hardware de servidor específico. Seu tempo tem um custo; se você está olhando para 3 dias de trabalho em (digamos) US $ 50 por hora (sendo muito conservador aqui) para um total de US $ 1200, e a solução de disco rígido implica 2 horas de trabalho e talvez uma sincronização de banco de dados que pode ser acionada e esqueça, então você teria um orçamento de US $ 1100 para um disco rígido de 1 TB. Além disso, a manutenção da solução de disco grande é mais fácil, pois não há "hacks" ou truques envolvidos; é apenas um servidor de banco de dados com um disco rígido enorme.

É claro que, se o seu servidor Ubuntu estiver na nuvem em algum lugar, o custo dessa fatia de armazenamento de 1 TB poderá ser maior. Ainda assim, considere a análise de custo / benefício para tomar sua decisão; você pode acabar economizando tempo e dinheiro a longo prazo:)

    
por roadmr 09.06.2014 / 19:17