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

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

Na minha empresa, cerca de 10 desenvolvedores compartilham um servidor de desenvolvimento Ubuntu. 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 em execução e seria somente leitura na prática. Crie um sistema de arquivos virtual para cada desenvolvedor que faça referência ao sistema de arquivos mestre e armazene uma comparação de cada alteração nele. Tenha um servidor mysql rodando em cada sistema de arquivos virtual. Então, 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 observei como o mysql armazena seus dados no disco, mas devido ao desejo de minimizar a E/S do disco, suspeito que as pequenas mudanças que fazemos em nossos testes de rotina não criarão grandes diferenças no ambiente virtual. sistema de arquivo.

Especificamente, estas são minhas perguntas:

  • Essa arquitetura é possível?
  • Esta é a maneira mais fácil de atingir meu objetivo?
  • Esse sistema de arquivos virtual já existe?

Responder1

Para responder às suas perguntas (da próxima vez, numere-as para que seja mais fácil consultá-las):

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

Sua ideia parece um bom caso de uso para umsobreposições. 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". Overlayfs permite usar diretórios como "superiores" e "inferiores" para que você não precise necessariamente montar bancos de dados em diretórios diferentes.

Então você precisaria configurar cada instância do MySQL por desenvolvedor para usar um datadir diferente.

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

O fator a considerar aqui é quanto tempo você levará para desenvolver a solução overlayfs versus quanto custa um disco rígido de 1 TB para o hardware de seu servidor específico. Seu tempo tem um custo; se você está pensando em 3 dias de trabalho por (digamos) US$ 50 por hora (sendo MUITO conservador aqui) para um total de US$ 1.200, e a solução de disco rígido implica 2 horas de trabalho mais talvez uma sincronização noturna de banco de dados que você pode disparar- e esqueça, então você teria um orçamento de US$ 1.100 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, se o seu servidor Ubuntu reside em algum lugar na nuvem, o custo dessa fatia de armazenamento de 1 TB pode ser maior. Ainda assim, considere a análise custo/benefício para tomar sua decisão; você pode acabar economizando tempo e dinheiro no longo prazo :)

informação relacionada