고속 (1 초 미만) 및 느린 데이터베이스 마이그레이션 (> 30 초)이 혼합 된 응용 프로그램이 있습니다. 현재 CI의 일부로 데이터베이스 마이그레이션을 실행하고 있지만 CI 도구는 여러 환경에서 앱에 대한 모든 데이터베이스 연결 문자열을 알고 있어야합니다. 응용 프로그램을 시작할 때 자체 데이터베이스 마이그레이션을 실행하도록이 프로세스를 변경하려고합니다.
상황은 다음과 같습니다.
이 애플리케이션의 인스턴스는 여러 개 (약 5 개) 있습니다. 그들에게 전화합시다 node1, ..., node5
. 각 앱은 단일 SQL Server 인스턴스에 연결되며 롤링 배포를 사용하지 않습니다 (알고있는 한 모든 앱이 동시에 배포 됨)
문제 : 마이그레이션이 오래 진행되고 있다고 가정합니다. 이 경우 node1
마이그레이션을 시작한 다음 실행을 시작합니다. 이제 node4
시작하고 장기 실행 마이그레이션이 아직 완료되지 않았으므로 node4
마이그레이션 실행-> 데이터 손상 가능성이 있습니까? 이 문제를 어떻게 방지 할 수 있습니까, 아니면 걱정할 정도로 중요한 문제입니까?
분산 잠금 (사용 etcd
하거나 그 라인을 따라) 으로이 문제를 해결하려고 생각했습니다 . 기본적으로 모든 앱은 잠금을 획득하려고 시도하며 그 중 하나만 가져 와서 마이그레이션을 실행 한 다음 잠금을 해제합니다. 나머지 앱이 시작되어 중요 섹션에 들어가면 모든 마이그레이션이 이미 실행되었으므로 마이그레이션 스크립트가 종료됩니다.
그러나 내 직감은 "이것은 과잉입니다. 더 간단한 해결책이 있어야합니다."라고 말하면서 다른 사람에게 더 좋은 아이디어가 있는지 물어볼 것이라고 생각했습니다.