При в параллельной среде


Я собираюсь использовать liquibase в качестве плагина запуска приложений в некоторой параллельной среде (кластеризация или многопоточная инициализация). Есть ли гарантия корректного обновления базы данных в параллельной среде, поддерживаемой библиотекой liquibase, или мне придется делать это вручную? Спасибо!

1 2

1 ответ:

Liquibaseреализует исключительную блокировку, используя транзакционные функции ACID вашей СУБД. Это предотвращает одновременное выполнение миграций схем несколькими экземплярами Liquibase. Это достигается путем выполнения транзакционных обновлений таблицы DATABASECHANGELOGLOCK, которая добавляется в вашу схему с помощью Liquibase.

Однако этот механизм не предотвращает другие потенциальные проблемы параллелизма, которые могут возникнуть в результате операций, не выполняемых непосредственно Liquibase. Рассмотреть дело где один узел в кластере выполняет миграцию схемы, а другие узлы пытаются выполнить нормальную бизнес-логику с этой схемой. Другие узлы кластера видят схему в стабильном состоянии A , за которым следует некоторое количество промежуточных вариаций, а затем, наконец, в стабильном состоянии B. Приложение должно быть разработано для обработки такого рода переходов, иначе во время миграции потребуется время простоя.

Аналогичным образом, это приложение ответственность за работу с более старыми и новыми клиентами (например, во время скользящего обновления), когда концепция "правильной" версии схемы не является единогласно согласованной, если такая среда требуется.