Обновление проектов — новый подход. Выбираем путь стабильности | Блог Work Solutions
Обновление проектов — новый подход. Выбираем путь стабильности
ГлавнаяБлогРазработчикамОбновление проектов — новый подход. Выбираем путь стабильности
Разработчикам30 июня 2017

Обновление проектов — новый подход. Выбираем путь стабильности

Фотография автора
Максим МулCEO

Мы, как и любая другая команда, постоянно сталкиваемся с проблемами обновления проектов на production-серверах. Самый простой способ заставить проект не работать — допустить ошибку при обновлении. Есть два способа избегать неприятностей подобного рода:

  • Мотивировать команду быть сосредоточенными при обновлении, составить пошаговый план и не пропустить всех пунктов сценария обновления;
  • Максимально автоматизировать процесс обновления production-сервера проекта, тем самым снизить роль человеческого фактора.

Для себя выбрали второй вариант и не ошиблись, но путь этот был не таким безоблачным как нам бы этого хотелось.

Одной из наших специализаций является разработка проектов на платформе «1С-Битрикс». Решения по развороту и обновлению продукта не входят в коробку. Проанализировав доступные решения на тот момент, мы пришли к выводу что подходящих не существует и для необходимой автоматизации придется реализовывать решение самостоятельно.

Если проблему обновления исходного кода за нас решает система версионирования, то с базой данных дела обстоят иначе. Наиболее популярным решением обновлений баз данных являются механизмы миграций — это такая абстракция, при которой все изменения в базе данных осуществляются специально подготовленным исходным кодом (сценариями миграций или проще говоря миграциями).

Так вышел на свет наш первый модуль «Миграции схемы данных» с поддержкой механизма автоматических миграций (миграции создаются без программистов на основе реакций на изменения состояний сущностей через обработку событий). При выпуске это было преимуществом, но потом, как выяснилось, это стало недостатком. Постоянный поток трудностей связанных с автоматическим обновлением заставил нас усомниться в правильности решения. Конечно, впоследствии появились и сценарии миграций которые создаются программистом, но автоматические также приходилось поддерживать. Проанализировав трудности применения модуля была разработана новая версия модуля «Упрощенные миграции». Ниже перечислим главные преимущества решения.

Стабильность

За миграцию отвечает программист. Модуль миграций используется как инструмент, не пытаясь возложить на себя ответственность по развороту конкретных данных и схем. Процесс каждой миграции запускается исходным кодом. Модуль только определяет очередность выполнения.

Изображение статьи

Учет времени обновления

Для каждой миграции можно задать примерное время выполнения. Перед обновлением это время можно просуммировать и определить длительность сессии обновления. Это очень важно при обновлении production-сервера проекта. К примеру, если у вас есть список миграций которые обновляются два часа, то лучше запускать обновление ночью, если же время не превышает и одной секунды, то можно смело обновиться и днем.

Изображение статьи

Приоритет выполнения

Такая потребность возникла в тот момент, когда миграции повсеместно стали использоваться и как инструмент актуализации данных. Например, обратиться к внешнему источнику и обновить контент у себя на проекте. Такие сценарии нужны для одноразового использования на проекте и миграции как нельзя лучше подходят на эту роль. Они гарантируют что исходный код одной миграции будет выполнен только один раз. Правда такие миграции как раз и мешают при большом обновлении, потому что их время выполнения обычно большое, а в очереди стоят миграции которые работают со схемой данных без выполнения которых проект просто не будет работает. Тут и возникло решение внедрить понятие приоритета выполнения. Таким образом миграциям, которые меняет схему данных проекта, программист должен установить наивысший приоритет, что обеспечит их немедленное выполнение, а «долгие» миграции будут выполняться уже после. Такое решение обеспечило необходимую стабильность обновлению.

Изображение статьи

Удобная работа через консоль

Изображение статьи

При выпуске первого модуля мы не уделили терминалу должного внимания и всё управление миграциями реализовали через web-интерфейс. Это была еще одна наша ошибка, так как web-интерфейс не обеспечивает нам необходимой стабильности. При обновлении разработчик в основном взаимодействует с системой через ssh-интерфейс: он обновляет исходный код, обновляет сторонние библиотеки и web-интерфейс миграций данных нарушал эту единую точку входа. Теперь основная работа с миграциями организована через консоль, со множеством удобной информации,что обеспечивает единый интерфейс и повышает устойчивость обновления проекта.

Решение доступно каждому желающему на GitHub. Мы заботимся о том, чтобы сделать наш труд более профессиональным, поэтому постоянно выделяем ресурсы на доработку и улучшение проекта.

167
2

Другие статьи

Ко всем статьям
Фоновое изображение: четверть круга закрыват часть круга

Интересные статьи и кейсы
от Work Solutions

Нажимая кнопку «Подписаться», я даю согласие на обработку персональных данных

Спасибо за подписку!

Фоновое изображение: верхний полукруг