2017-12-30 39 views
0

PHP + 데이터베이스 서버를 실행하고 데이터베이스 스키마와 PHP 소스를 수정하는 업데이트를 배포하려고한다고 가정 해 보겠습니다. 너는 그것을 정기적으로한다.PHP 서버에 업데이트를 원자 적으로 배포하는 방법, 즉 일관성을 유지 하시겠습니까?

문제는 업데이트하는 동안 서비스가 일시적으로 일관성없는 상태가되고 결과적으로 클라이언트에 임의의 오류가 발생한다는 것입니다. 먼저 스키마를 업데이트하는 동안 DB 테이블에서 불일치가 발생하고 DB와 소스 간의 불일치가 발생합니다. 소스를 직접 업데이트하면 파일이 매우 짧은 순간 동안 비어 있거나 부분적으로 표시되고 모듈간에 일관성이 없습니다. 업데이트하는 동안 클라이언트에 오류가 발생할 가능성이 있습니다.

질문은 이것을 방지하는 가장 좋은 방법은 무엇입니까?

내가 생각하고있는 해결책은 다음과 같습니다. 서버의 루트 인 .htaccess을 업데이트 기간 동안 HTTP 503 Service unavailable을 반환하는 것으로 대체 한 다음 원본을 다시 넣습니다 (스크립트가이 모든 작업을 수행한다고 가정). 클라이언트는 몇 초 내에 다시 시도 할 수 있습니다. 예를 들어 503은 10 초 이내에 3 회 이상 재 시도한다는 의미입니다.

하나의 잠재적 인 문제는 htaccess가 스왑되기 전에 일부 요청이 이미 진행 중이므로 모든 요청이 처리 될 때까지 대기 할 수있는 방법이 필요합니다. 가장 문제는 긴 파일 전송입니다. 클라이언트에게 파일을 제공하는 데 분 단위가 걸리면 서버가 분당 503 개 상태에 있음을 의미합니다.

또한 PHP를위한 특별한 솔루션이 있습니까?

답변

1

두 대의 서버가 있습니다. 페일 오버에서 업데이트를 실행 한 다음 페일 오버하고 기본 상자에서 업데이트를 실행 한 다음 페일 백하십시오. 서버를 업데이트하는 동안 서버의 클라우드 인스턴스를 가동하여 트래픽을 가져올 수도 있습니다. 다운 타임으로 인해 발생하는 비용에 달려 있다고 생각합니다. 잠시 동안 내려야 할 비용이 많이 들지 않는다면; Google이나 뭔가에서 귀하의 DNS를 가리 킵니다!

소득 인 경우; 어쨌든 두 대의 서버를 설치하는 것이 좋을 것입니다. 따라서 뭔가 잘못되었을 때 다시 실패 할 수 있습니다!