가동 중지 시간이없는 배포를 달성하려고 노력하여 근무 외 시간에는 더 적게 배포하고 "느린"시간에는 이론적으로 더 많이 배포 할 수 있습니다.
내 현재 설정은 다소 단순화되었습니다.
- 웹 서버 A (.NET 앱)
- 웹 서버 B (.NET 앱)
- 데이터베이스 서버 (SQL Server)
내 현재 배포 프로세스 :
- 웹 서버 A와 B의 사이트를 "중지"
- 배포중인 앱 버전에 대한 데이터베이스 스키마 업그레이드
- 웹 서버 A 업데이트
- 웹 서버 B 업데이트
- 모든 것을 다시 온라인으로 가져 오십시오
현재 문제
이로 인해 매월 소량의 다운 타임이 발생합니다 (약 30 분). 나는 근무 외 시간 에이 작업을 수행하므로 큰 문제는 아니지만 내가 멀리하고 싶은 것입니다.
또한 실제로 '돌아갈'방법은 없습니다. 롤백 DB 스크립트를 만들지 않고 업그레이드 스크립트 만 만듭니다.
로드 밸런서 활용
한 번에 하나의 웹 서버를 업그레이드 할 수 있기를 바랍니다. Web Server A를로드 밸런서에서 꺼내고 업그레이드 한 후 다시 온라인으로 전환 한 다음 Web Server B에 대해 반복하십시오.
문제는 데이터베이스입니다. 내 소프트웨어의 각 버전은 다른 버전의 데이터베이스에 대해 실행해야하므로 일종의 "고착"상태입니다.
가능한 해결책
현재 고려중인 솔루션은 다음 규칙을 채택하는 것입니다.
- 데이터베이스 테이블을 삭제하지 마십시오.
- 데이터베이스 열을 삭제하지 마십시오.
- 데이터베이스 열의 이름을 바꾸지 마십시오.
- 열을 다시 정렬하지 마십시오.
- 모든 저장 프로시 저는 버전이 지정되어야합니다.
- 의미- 'spFindAllThings'는 편집시 'spFindAllThings_2'가됩니다.
- 그런 다음 다시 편집하면 'spFindAllThings_3'이됩니다.
- 뷰에도 동일한 규칙이 적용됩니다.
그러나 이것은 약간 극단적 인 것처럼 보입니다. 문제를 해결한다고 생각합니다. 각 버전의 응용 프로그램은 끊임없는 방식으로 DB에 충돌합니다. 코드는 뷰 / 저장 프로 시저의 특정 결과를 예상하며 '계약'을 유효하게 유지합니다. 문제는 단지 부주의 한 것 같습니다. 앱이 잠시 배포 된 후 오래된 저장 프로 시저를 정리할 수 있지만 더럽게 느껴집니다. 또한-이 규칙을 따르는 모든 개발자에게 달려 있으며, 대부분의 경우에 발생하지만 누군가 실수를 저지를 것입니다.
마지막으로-내 질문
- 이 조잡하거나 해킹입니까?
- 다른 사람이 이런 식으로하고 있습니까?
- 다른 사람들이이 문제를 어떻게 해결하고 있습니까?