#scala #playframework
#scala #playframework
Вопрос:
Если у меня есть миграции, которые необходимо запустить в рабочей среде, если мое приложение play развертывается, скажем, на 20 серверах, как будут управляться миграции?
Не будут ли попытки миграции выполняться 20 раз на каждом сервере?
Ответ №1:
Зависит от ваших настроек.
Если у каждого вашего приложения включена безоговорочная миграция, каждый instant будет пытаться выполнить миграцию.
Если у вас есть какая-то конфигурация, переданная в экземпляр (например, вы используете переменные env для установки того, какие миграции выполняются в конфигурации), то те, у которых включена миграция, будут выполняться во время.
Никакое волшебство автоматически не гарантирует, что только один экземпляр выполняет миграции.
С положительной стороны, миграции SQL выполняются в транзакциях, а библиотеки миграции хранят текущую версию в БД и выполняют различие между текущей и целевой версиями, поэтому это не должно нарушать работу вашей БД, в худшем случае 2 миграции, выполняемые одновременно, приводят к сбою одной из попыток с исключением, но БД все равно закончится с действительной версией. Возможно, экземпляр выйдет из строя, но при следующем запуске все будет в порядке.
Итак, обычно худшее, что может случиться (зависит от конфигурации), — это то, что некоторые экземпляры выходят из строя и требуют перезапуска, а затем работают, но если вы боитесь, что это могут быть не те случаи, используйте правильную конфигурацию в вашем кластере / хосте, чтобы включить миграцию только в одном экземпляре, а не в других.
Этот совет не зависит от конкретной игры, он такой же, если вы используете Flyway или что-то еще.