2017-02-16 3 views
1

나는 수백만 명의 사람들이 공개적으로 액세스하는 SQLAlchemy/Flask 응용 프로그램을 가지고 있습니다.최소한의 서비스 중단 시간으로 SQLAlchemy 마이그레이션 파일을 스쿼시/분할하는 방법은 무엇입니까?

2 주마다이 애플리케이션의 새 버전을 출시하고 python manage.py db upgrade을 사용하여 데이터베이스 마이그레이션을 실행합니다. 그러면 마지막 마이그레이션 파일을 실행 한 이후에 만들어진 새 마이그레이션 파일이 실행됩니다.

이 방법의 문제점은 데이터베이스 테이블이 너무 커서 열 추가와 같은 간단한 마이그레이션 작업에 각각 15-20 분이 걸릴 수 있다는 것입니다. 따라서 응용 프로그램을 중지하고, 마이그레이션을 실행하고, 응용 프로그램 코드를 업데이트 한 다음 응용 프로그램을 다시 시작하면 시간이 오래 걸릴 수 있습니다. 이 가동 중지 시간을 최소화하려고합니다.

중단 시간을 최소화하기위한 전략은 배포를 시작하기 전에 서비스를 중지하지 않고 마이그레이션 파일 (또는 마이그레이션 파일의 많은 부분)을 실행하는 것입니다. 분명히 이런 방식으로 수행 할 수있는 작업이 있습니다. 예를 op.create_table()op.add_column를 들어

는() 안전하게 응용 프로그램의 작동을 방해하지 않고 코드를 업데이트하기 전에 실행할 수 있습니다. op.delete_column 수 없습니다.

응용 프로그램 작업에 영향을주지 않고 실행할 수있는 마이그레이션 명령과 응용 프로그램 작업에 영향을주는 마이그레이션 명령을 자동으로 구분하는 방법이 있습니까? 현재 수동으로 이러한 마이그레이션을 수동으로 수행하고 두뇌 수술을 수행해야합니다. 고통 스럽다. 그러나 나는이 문제를 경험할 수있는 유일한 사람이 될 수 없다. 그렇다면 다른 사람들이 사용하는 솔루션은 무엇입니까?

답변

0

두 개의 응용 프로그램 서버와 두 개의 데이터베이스를 사용하십시오. 첫 번째는 안정적인 현재 버전이고 두 번째는 새로 배포하는 버전입니다. 새로 업데이트 된 버전을 배포 할 때 (구성표 마이그레이션 및 데이터 마이그레이션 적용)이 웹 사이트 트래픽을이 새로 배포하는 버전으로 라우팅합니다. (그리고 오래된 데이터베이스와 앱 인스턴스를 재사용하거나 그냥 죽이고 새로운 것을 재 작성하십시오).

+0

두 번째 DB로 전환 할 때 복사본과 다시 라우팅 사이의 첫 번째 DB에서 발생하는 변경 사항이 손실 될 수 있으므로 작동하지 않습니다. –