Как миграции playframework работают с несколькими серверами?

#scala #playframework

#scala #playframework

Вопрос:

Если у меня есть миграции, которые необходимо запустить в рабочей среде, если мое приложение play развертывается, скажем, на 20 серверах, как будут управляться миграции?

Не будут ли попытки миграции выполняться 20 раз на каждом сервере?

Ответ №1:

Зависит от ваших настроек.

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

Если у вас есть какая-то конфигурация, переданная в экземпляр (например, вы используете переменные env для установки того, какие миграции выполняются в конфигурации), то те, у которых включена миграция, будут выполняться во время.

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

С положительной стороны, миграции SQL выполняются в транзакциях, а библиотеки миграции хранят текущую версию в БД и выполняют различие между текущей и целевой версиями, поэтому это не должно нарушать работу вашей БД, в худшем случае 2 миграции, выполняемые одновременно, приводят к сбою одной из попыток с исключением, но БД все равно закончится с действительной версией. Возможно, экземпляр выйдет из строя, но при следующем запуске все будет в порядке.

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

Этот совет не зависит от конкретной игры, он такой же, если вы используете Flyway или что-то еще.