Virtuelles Dateisystem, das als Klon+Differenz eines Masterdateisystems fungiert

Virtuelles Dateisystem, das als Klon+Differenz eines Masterdateisystems fungiert

In meiner Firma teilen sich etwa 10 Entwickler einen Ubuntu-Entwicklungsserver. Wir haben separate Codeverzeichnisse, aber aufgrund unserer Datenbankgröße (etwa 50 GB) ist es nicht praktikabel, die MySQL-Datenbank für jeden Entwickler zu klonen. Im Moment teilen wir uns also alle eine einzige Datenbank. Ich habe mich jedoch gefragt, ob dies möglich ist:

Erstellen Sie ein Master-Dateisystem (ext4), das die 50 GB große Datenbank speichert. Auf diesem Dateisystem würde kein MySQL-Server laufen und es wäre in der Praxis schreibgeschützt. Erstellen Sie für jeden Entwickler ein virtuelles Dateisystem, das auf das Master-Dateisystem verweist und eine Diff-Datei jeder Änderung daran speichert. Lassen Sie auf jedem virtuellen Dateisystem einen MySQL-Server laufen. Dann erhält jeder Entwickler seine eigene Datenbank, mit der er machen kann, was er will, ohne die 50 GB große Datenbank unnötig zu duplizieren.

Ich habe mir nicht angesehen, wie MySQL seine Daten auf der Festplatte speichert, aber aufgrund des Wunsches, den Festplatten-E/A zu minimieren, gehe ich davon aus, dass die kleinen Änderungen, die wir bei unseren Routinetests vornehmen, keine großen Unterschiede im virtuellen Dateisystem verursachen werden.

Im Einzelnen sind dies meine Fragen:

  • Ist diese Architektur möglich?
  • Ist dies der einfachste Weg, mein Ziel zu erreichen?
  • Gibt es ein solches virtuelles Dateisystem bereits?

Antwort1

Um Ihre Fragen zu beantworten (nummerieren Sie sie das nächste Mal bitte, damit Sie leichter darauf zurückgreifen können):

  • Sollte möglich sein
  • Klingt NICHT nach dem einfachsten Weg
  • Ja, ein solches virtuelles FS existiert.

Ihre Idee klingt nach einem guten Anwendungsfall für eineÜberlagerungen. Sie können Ihr vorhandenes Datenbank-FS als „unteres“ Dateisystem und ein „Diff“-FS pro Entwickler als „oberes“ Dateisystem verwenden. Overlayfs ermöglicht die Verwendung von Verzeichnissen als „oberes“ und „unteres“, sodass Sie Datenbanken nicht unbedingt in verschiedenen Verzeichnissen mounten müssen.

Dann müssten Sie jede MySQL-Instanz pro Entwickler so konfigurieren, dass sie ein anderes Datenverzeichnis verwendet.

Der bei weitem einfachste Weg ist, in den sauren Apfel zu beißen, Ihren Server beispielsweise mit einer 1-TB-Festplatte auszustatten, die Datenbank so oft zu klonen, wie Sie es für jeden Entwickler benötigen, und entweder für jeden Entwickler eine MySQL-Instanz auszuführen oder eine Instanz alle Datenbanken verwalten zu lassen. Der Unterschied für die Entwickler besteht hier darin, dass sie einen anderen Port als einen anderen Datenbanknamen angeben müssen. Meiner Meinung nach wäre es einfacher, nur eine MySQL-Instanz zu haben, da dies weniger bewegliche Teile bedeutet.

Der hier zu berücksichtigende Faktor ist, wie lange Sie brauchen, um die OverlayFS-Lösung zu entwickeln, im Vergleich dazu, wie viel eine 1-TB-Festplatte für Ihre spezielle Serverhardware kostet. Ihre Zeit hat ihren Preis. Wenn Sie 3 Tage Arbeit zu (sagen wir) 50 USD pro Stunde (hier SEHR konservativ gerechnet) für insgesamt 1200 USD einplanen und die Festplattenlösung 2 Stunden Arbeit plus vielleicht eine nächtliche Datenbanksynchronisierung erfordert, die Sie dann einfach beenden können, dann hätten Sie ein Budget von 1100 USD für eine 1-TB-Festplatte. Außerdem ist die Wartung der großen Festplattenlösung einfacher, da keine „Hacks“ oder Tricks erforderlich sind. Es handelt sich lediglich um einen DB-Server mit einer riesigen Festplatte.

Wenn Ihr Ubuntu-Server irgendwo in der Cloud liegt, können die Kosten für diesen 1-TB-Speicherbereich natürlich höher sein. Berücksichtigen Sie bei Ihrer Entscheidung dennoch die Kosten-Nutzen-Analyse. Auf lange Sicht können Sie dadurch Geld und Zeit sparen :)

verwandte Informationen