Мне просто интересно, как Flyway имеет дело с тем, что несколько динозавров могут пытаться запустить миграцию базы данных несколько раз в кластерной среде, такой как Heroku, тем самым вызывая конфликт?Как Flyway справляется с тем, что несколько динозавров могут пытаться параллельно запускать несколько миграций?
ответ
Кажется, что Flyway использует блокировку для решения этой проблемы.
Процитирую документацию:
Могут ли несколько узлов мигрировать параллельно? Да! Flyway использует технологию блокировки вашей базы данных для координации нескольких узлов. Это обеспечивает , что даже если даже несколько экземпляров вашего приложения попытаются выполнить , то миграция базы данных будет выполняться одновременно. Конфигурации кластера полностью поддерживаются.
Это question объясняет, как работает блокировка. Как представляется, для блокировки схемы схемы пролета FlyLock существует блокировка: select * from dbschema.schema_version for update
, что может вызвать проблемы для более длительных мигрантов, поскольку параметр innodb_lock_wait_timeout
может привести к таймауту, по крайней мере, в случае MySQL.