
В моей компании около 10 разработчиков совместно используют сервер разработки Ubuntu. У нас есть отдельные каталоги кода, но из-за размера нашей базы данных (около 50 ГБ) нецелесообразно клонировать базу данных MySQL для каждого разработчика. Поэтому сейчас мы все совместно используем одну базу данных. Однако мне было интересно, возможно ли это:
Создайте главную файловую систему (ext4), которая хранит базу данных объемом 50 ГБ. Эта файловая система не будет иметь запущенного на ней сервера MySQL и будет на практике доступна только для чтения. Создайте виртуальную файловую систему для каждого разработчика, которая ссылается на главную файловую систему и хранит diff каждого изменения в ней. Запустите сервер MySQL на каждой виртуальной файловой системе. Затем каждый разработчик получит свою собственную базу данных, чтобы делать с ней все, что захочет, не дублируя без необходимости базу данных объемом 50 ГБ.
Я не смотрел, как MySQL хранит свои данные на диске, но из-за желания минимизировать дисковый ввод-вывод, я подозреваю, что небольшие изменения, которые мы вносим в ходе нашего планового тестирования, не приведут к большим различиям в виртуальной файловой системе.
Вот мои конкретные вопросы:
- Возможна ли такая архитектура?
- Самый ли это простой способ достичь моей цели?
- Существует ли уже такая виртуальная файловая система?
решение1
Чтобы ответить на ваши вопросы (в следующий раз, пожалуйста, пронумеруйте их, чтобы было легче на них ссылаться):
- Должно быть возможно
- Это НЕ похоже на самый простой способ.
- Да, такая виртуальная ФС существует.
Ваша идея звучит как хороший вариант использованияоверлеиfs. Вы можете использовать существующую базу данных FS как "нижнюю" файловую систему, а FS "diff" для каждого разработчика как "верхнюю" файловую систему. Overlayfs позволяет использовать каталоги как "верхние" и "нижние", поэтому вам не обязательно монтировать базы данных в разные каталоги.
Затем вам придется настроить каждый экземпляр MySQL для каждого разработчика на использование отдельного каталога данных.
Самый простой способ — стиснуть зубы, оснастить сервер, скажем, жестким диском на 1 ТБ, клонировать базу данных столько раз, сколько нужно для каждого разработчика, и либо запустить экземпляр MySQL для каждого разработчика, либо сделать так, чтобы один экземпляр управлял всеми базами данных. Разница для разработчиков здесь в указании другого порта вместо другого имени базы данных. IMHO, было бы проще иметь один экземпляр MySQL, так как это означает меньше движущихся частей.
Фактор, который следует здесь учитывать, — это то, сколько времени вам потребуется на разработку решения overlayfs по сравнению с тем, сколько стоит жесткий диск на 1 ТБ для вашего конкретного серверного оборудования. Ваше время имеет свою цену; если вы рассматриваете 3 дня работы по цене (скажем) 50 долларов в час (будучи ОЧЕНЬ консервативным здесь) на общую сумму 1200 долларов, а решение с жестким диском подразумевает 2 часа работы плюс, возможно, синхронизацию базы данных за ночь, которую вы можете запустить и забыть, то у вас будет бюджет в 1100 долларов на жесткий диск на 1 ТБ. Плюс обслуживание решения с большим диском проще, поскольку не требуется никаких «хаков» или уловок; это просто сервер БД с огромным жестким диском.
Конечно, если ваш сервер Ubuntu находится где-то в облаке, стоимость этого 1 ТБ-слоя хранения может быть выше. Тем не менее, пожалуйста, рассмотрите анализ затрат/выгод, чтобы принять решение; вы можете сэкономить деньги и время в долгосрочной перспективе :)