Sistema de archivos virtual que actúa como un clon+diferencia de un sistema de archivos maestro

Sistema de archivos virtual que actúa como un clon+diferencia de un sistema de archivos maestro

En mi empresa, unos 10 desarrolladores comparten un servidor de desarrollo Ubuntu. Tenemos directorios de código separados, pero debido al tamaño de nuestra base de datos (alrededor de 50 GB), no es práctico clonar la base de datos MySQL para cada desarrollador. Así que ahora todos compartimos una única base de datos. Sin embargo, me preguntaba si esto es posible:

Cree un sistema de archivos maestro (ext4) que almacene la base de datos de 50 GB. Este sistema de archivos no tendría un servidor mysql ejecutándose y en la práctica sería de solo lectura. Cree un sistema de archivos virtual para cada desarrollador que haga referencia al sistema de archivos maestro y almacene una diferencia de cada cambio en él. Tener un servidor MySQL ejecutándose en cada sistema de archivos virtual. Luego, cada desarrollador obtiene su propia base de datos para hacer lo que quiera, sin duplicar innecesariamente la base de datos de 50 GB.

No he visto cómo MySQL almacena sus datos en el disco, pero debido al deseo de minimizar la E/S del disco, sospecho que los pequeños cambios que hacemos en nuestras pruebas de rutina no crearán grandes diferencias en el entorno virtual. sistema de archivos.

En concreto, estas son mis preguntas:

  • ¿Es posible esta arquitectura?
  • ¿Es esta la forma más fácil de lograr mi objetivo?
  • ¿Existe ya tal sistema de archivos virtual?

Respuesta1

Para responder a sus preguntas (la próxima vez, numérelas para que sea más fácil consultarlas):

  • debería ser posible
  • NO parece la forma más fácil
  • Sí, existe un FS virtual de este tipo.

Su idea parece un buen caso de uso para unsuperposiciones. Puede utilizar el FS de su base de datos existente como sistema de archivos "inferior" y un FS "diff" por desarrollador como sistema de archivos "superior". Overlayfs permite usar directorios como "superior" e "inferior", por lo que no es necesario montar bases de datos en directorios diferentes.

Luego, deberá configurar cada instancia de MySQL por desarrollador para usar un directorio de datos diferente.

Con diferencia, la forma más sencilla es hacer de tripas corazón, equipar su servidor con, digamos, un disco duro de 1 TB, clonar la base de datos tantas veces como sea necesario para cada desarrollador y ejecutar una instancia de MySQL para cada desarrollador o hacer que una instancia administre. todas las bases de datos. La diferencia para los desarrolladores aquí es especificar un puerto diferente frente a un nombre de base de datos diferente. En mi humilde opinión, sería más sencillo tener solo una instancia de MySQL, ya que significa menos partes móviles.

El factor a considerar aquí es cuánto tiempo le llevará desarrollar la solución overlayfs frente a cuánto cuesta un disco duro de 1 TB para el hardware de su servidor en particular. Tu tiempo tiene un costo; Si está considerando 3 días de trabajo a (digamos) $ 50 la hora (siendo MUY conservador aquí) para un total de $ 1200, y la solución del disco duro implica 2 horas de trabajo más tal vez una sincronización de la base de datos durante la noche que puede realizar. y olvídese, entonces tendría un presupuesto de $1100 para un disco duro de 1 TB. Además, el mantenimiento de la solución de disco grande es más fácil ya que no hay "trucos" ni engaños involucrados; es solo un servidor de base de datos con un disco duro enorme.

Por supuesto, si su servidor Ubuntu reside en algún lugar de la nube, el costo de esa porción de almacenamiento de 1 TB puede ser mayor. Aun así, considere el análisis costo/beneficio para tomar una decisión; puedes terminar ahorrando dinero y tiempo a largo plazo :)

información relacionada