가능한 가장 정중한 방법으로 활발하고 바쁜 웹사이트를 어떻게 업데이트합니까?

StackOverflow https://stackoverflow.com/questions/67368

문제

실제 웹 사이트에 변경 사항을 적용할 때 변경 사항을 확인하는 방법은 무엇입니까? 살다 시스템이 제대로 작동하고 있나요?어떤 도구를 사용하시나요?누가 하는가?테스트 기간 동안 사이트 접속을 차단하나요?어느 정도의 가동 중지 시간이 허용됩니까?

도움이 되었습니까?

해결책

나는 모든 테스트를 다른 환경(라이브 환경이 아닌!)에서 수행하는 경향이 있습니다.이를 통해 코드가 제대로 작동해야 한다는 것을 알고 라이브 사이트에 업데이트를 푸시할 수 있으며 라이브 데이터에 대한 온전성 테스트만 수행할 수 있습니다. 파일을 어딘가에 잊어버렸는지, 아니면 뭔가 이상한 일이 발생했는지 확인하세요.

따라서 테스트 또는 스테이징 환경에서 적절한 테스트를 수행한 다음 사소한 온전성 검사만 수행합니다.가동 중지 시간이 필요하지 않습니다.

다른 팁

이미 좋은 조언이 많이 있습니다.

사람들이 언급했듯이, 관련된 단일 지점이 없다면 한 번에 앱 서버를 업그레이드하여 변경 사항을 단계적으로 적용하는 것이 간단합니다.하지만 그런 경우는 거의 없으므로 무시하고 어려운 부분에 집중하겠습니다.

일반적으로 거기에는 다른 모든 것에 공통되는 DB가 있습니다.이는 전체 시스템의 가동 중지 시간을 의미합니다. 그것을 어떻게 최소화합니까?

오토메이션.전체 배포 절차를 스크립트로 작성합니다.여기에는 특히 데이터베이스 스키마 변경이 포함됩니다.여기에는 특히 스키마 버전 간에 필요한 데이터 마이그레이션이 포함됩니다.

품질 관리.테스트가 있는지 확인하십시오.자동화된 승인 테스트(비즈니스 로직/경험 관점에서 사용자가 보고 기대하는 것)읽기 전용 활동을 테스트하기 위해 스크립트를 작성할 수 있는 테스트 계정을 프로덕션 시스템에 갖는 것을 고려하십시오.다른 외부 시스템과 상호 작용하지 않는 경우 쓰기 활동도 고려해 보세요.특히 돈과 회계를 다루는 경우 시스템의 특정 부분에서 테스트 계정 활동을 필터링해야 할 수도 있습니다.콩 카운터는 콩이 일치하지 않을 때 정당한 이유 때문에 화를 냅니다.

리허설.프로덕션 환경과 최대한 동일한 스테이징 환경에 배포하세요.프로덕션 데이터 볼륨 및 프로덕션 데이터에 대해 이를 수행합니다.변경 테이블이 얼마나 오래 걸리는지 느껴야 합니다.그리고 변경 테이블이 구조적으로 작동하고 실제 데이터의 모든 외래 키와 함께 작동하는지 확인해야 합니다.

대규모 데이터 볼륨이 있는 경우 스키마 변경에는 시간이 걸립니다.어쩌면 당신이 감당할 수 있는 것보다 더 많은 시간을 보낼 수도 있습니다.한 가지 해결책은 다음을 사용하는 것입니다. 단계적 데이터 마이그레이션, 를 사용하면 가동 중지 시간 동안 스키마 변경 사항이 "최근" 또는 "현재"(예: 1개월 또는 3개월 전) 데이터로 채워지고 다시 온라인 상태가 된 후 나머지 5년 동안의 데이터가 조금씩 유입될 수 있습니다.최종 사용자에게는 모든 것이 괜찮아 보이지만 몇 시간/일/무엇이든 일부 기능에 액세스할 수 없습니다.

직장에서 우리는 테스트 환경에서 코드가 고정된 상태로 일정 시간을 보냅니다.그런 다음 몇 주 후에 통지를 받은 후 금요일 밤 자정에 사이트를 폐쇄하고 밤새도록 배포 및 검증 작업을 한 다음 토요일 늦은 아침에 게시합니다.교통 통계에 따르면 이때가 이를 수행하기에 가장 좋은 기간이었습니다.

로드 밸런싱된 서버 세트가 있는 경우 하나씩 오프라인으로 전환하여 업데이트할 수 있습니다.사용자에게는 가동 중지 시간이 없습니다!

귀엽고 마음을 사로잡는 이미지 및/또는 백업 페이지를 만드세요.일부 사이트에서는 업데이트를 기다리는 동안 사용자를 바쁘게 만들기 위해 간단한 자바스크립트 게임을 구현합니다.

예를 들어, 고래 실패.

-아담

제가 마지막으로 일했던 곳에서는 QA가 QA 환경에서 테스트를 수행했습니다.모든 주요 문제는 출시 전에 수정, 테스트 및 검증됩니다.

QA를 통해 빌드가 인증된 후 프로덕션 지원 팀은 클라이언트가 사이트를 보고 모든 것이 원하는 대로인지 확인하는 스테이징 환경에 코드를 푸시했습니다.

실제 생산 롤아웃은 업무 외 시간(오후 9시 이후)에 이루어집니다.긴급 야간 푸시인 경우 또는 오전 5시부터- 오전 8시정상적으로 예정된 출시인 경우).

사이트는 F5 로드 밸런서를 사용하여 로드 밸런싱되는 여러 서버에서 호스팅됩니다.

  • 두 대의 서버가 프로덕션에서 제거되었습니다.
  • 코드가 설치되어 있고
  • 서버를 풀에 다시 넣기 전에 서버에 대해 대략적인 검사가 수행됩니다.

모든 서버가 최신 코드로 업그레이드되어 사이트가 항상 유지될 때까지 이 과정이 반복됩니다.

이 프로세스는 이상적이지만 데이터베이스도 업그레이드해야 하는 경우가 있습니다.이 경우 새 데이터베이스로 인해 사이트가 중단되는지 여부에 따라 두 가지 옵션이 있습니다.

새 데이터베이스가 기존 프런트 엔드와 호환되지 않는 경우 사이트가 다운되는 시간을 가질 수밖에 없습니다.

그러나 새 데이터베이스가 기존 프런트 엔드와 호환되는 경우 실제 가동 중지 시간 없이 코드를 푸시할 수 있지만 이를 위해서는 두 개의 프로덕션 데이터베이스 서버가 필요합니다.

  • 모든 트래픽은 두 번째 DB로 라우팅되고 첫 번째 DB 서버는 풀링됩니다.
  • 첫 번째 DB를 업그레이드하고 검증이 완료된 후 다시 프로덕션에 투입됩니다.
  • 모든 트래픽은 첫 번째 DB로 라우팅되고 두 번째 DB는 풀링됩니다.
  • 2차 DB를 업그레이드하고 검증 완료 후 다시 프로덕션에 투입합니다.
  • 다음 단계는 위에서 설명한 대로 부분 업그레이드를 수행하는 것입니다.

요약하자면:

  • 라이브 웹 사이트에 변경 사항을 적용할 때 라이브 시스템이 올바르게 작동하는지 어떻게 확인합니까? 가장 좋은 경우에는 이 작업이 점진적으로 수행됩니다.

  • 어떤 도구를 사용하시나요? 자동화 도구를 사용하여 몇 가지 기본 자동화 테스트와 함께 코드가 올바르게 설치되었는지 수동으로 확인합니다.우리는 셀레늄 IDE를 사용했습니다.

  • 누가 하는가? DBA는 DB 업그레이드를 수행하고, 기술 지원/시스템 관리자는 서버 푸시/풀 및 코드 설치를 수행하며, QA 또는 프로덕션 지원은 수동 테스트 및/또는 자동화 테스트를 실행합니다.

  • 테스트 기간 동안 사이트 접속을 차단하나요? 가능하다면 이는 어떤 대가를 치르더라도 피해야 하며, 특히 Gilles가 앞서 언급한 것처럼 유료 사이트인 경우에는 더욱 그렇습니다.

  • 어느 정도의 가동 중지 시간이 허용됩니까? 다운타임은 사용자가 사이트를 사용할 가능성이 가장 낮은 시간으로 제한되어야 하며 3시간 이내에 완료되어야 합니다.
    메모: 3시간은 정말 넉넉해요.언급한 jplindstrom처럼 연습과 리허설을 마친 후 팀은 전체 프로세스를 완료하고 때로는 1시간 이내에 들어오고 나갈 수 있습니다.

도움이 되었기를 바랍니다!

그 중 일부는 데이터베이스 업데이트 여부에 따라 달라집니다.과거에는 DB가 업데이트되는 경우 계획된(및 게시된) 유지 관리 기간 동안 사이트를 다운시켰습니다. 일반적으로 영향이 최소화되는 근무 시간 외 시간이었습니다.업데이트에 DB가 포함되지 않은 경우 로드 밸런싱된 환경에서 혼합에서 하나의 상자를 가져와 배포 및 테스트합니다.성공하면 믹스에 들어가고 다른 상자(상자 2개 가정)를 가져와서 업데이트/테스트했습니다.

메모:우리는 코드를 테스트하지 않습니다. 단지 배포가 원활하게 진행되어 다운타임이 최소화되었다는 것뿐입니다.앞서 언급했듯이 코드는 이미 다른 환경에서 테스트를 통과했어야 합니다.

IMHO 긴 가동 중지 시간(시간)은 무료 사이트에 허용됩니다.사용자를 충분히 교육한다면 사용자는 그것이 필요하다는 것을 이해할 것입니다.웹사이트가 다시 복구될 때까지 가지고 놀 수 있는 무언가를 제공할 수도 있습니다(예:플래시 게임, 개발팀의 직장 모습을 보여주는 웹캠 라이브 피드 등).사람들이 액세스하기 위해 비용을 지불하는 웹 사이트의 경우 정기적인 다운타임을 제공하면 많은 사람들이 불만으로 시간을 낭비하게 될 것입니다.사용자에게 요금을 부과하는 서비스를 운영한다면 전염병과 같은 다운타임을 피하고 업데이트를 정말 천천히 그리고 신중하게 출시할 것입니다.

현재 설정에는 변경 사항을 테스트하기 위해 Live Copy와 동일한 데이터베이스 및 캐시에 연결된 보조 웹 사이트가 있습니다.

또한 정규식을 사용하여 웹 사이트가 주요 페이지를 올바르게 렌더링하는지 확인하는 cron 작업에서 실행되는 여러 "페이지 감시자" 스크립트가 있습니다.

대답은 "상황에 따라 다르다"이다.우선, 당신이 출시하는 환경의 종류에 따라.어딘가의 공유 호스트에 있는 "hello, world" 유형의 웹사이트인가요, 아니면 50만 개의 서버가 있는 google.com인가요?일반적으로 하루에 한 명 정도의 사용자가 있습니까? 아니면 몇 백만 명 정도입니까?HTML/CSS/JPG를 게시하고 있습니까? 아니면 SQL 서버, 중간 계층 서버, 분산 캐시 등이 포함된 대규모 백엔드가 있습니까?

일반적으로 개발, QA, 스테이징, 프로덕션을 위한 별도의 환경을 가질 여유가 있다면 그렇게 하세요.리소스가 있는 경우 클릭 한 번으로 전체 설치 가능한 패키지를 구축할 수 있도록 생태계를 만드세요.그리고 꼭 확인하세요 똑같다 한 번만 클릭하면 DEV/QA/STAGE/PROD에 바이너리 설치가 성공적으로 설치될 수 있습니다.이 주제에 관해 수많은 글이 쓰여 있으므로 합리적인 답변을 얻으려면 질문을 좀 더 구체적으로 설명해야 합니다.

80이 아닌 다른 포트에서 메인 서버를 실행하세요.경량 서버(예:nginx)가 포트 80 앞에 있습니다.사이트를 업데이트할 때 새 포트에서 다른 인스턴스를 시작하십시오.시험.올바르게 배포되었다고 만족하면 프록시 구성 파일을 편집하고 다시 시작하세요.nginx의 경우 가동 중지 시간이나 요청 실패가 발생하지 않으며 보다 일반적인 Apache 전용 호스팅 옵션에 비해 성능 향상을 제공할 수도 있습니다.

물론 이는 적절한 스테이징 서버를 대체할 수 없으며 제한된 리소스로 핸드오버를 수행하는 '정중한' 방법일 뿐입니다.

라이브가 진행되기 전에 별도의 DEV 사이트에서 가능한 모든 것을 테스트하려면 Selenium (웹 페이지 테스터)을 사용하여 사이트의 모든 탐색 가능한 부분을 통과하고 더미 값을 양식으로 채우고 해당 값이 오른쪽에 나타나는지 확인하십시오. 결과적으로 장소 등

많은 JavaScript 또는 역동적 인 것들을 확인할 수있을만큼 강력합니다.

그런 다음 라이브 사이트를 업그레이드 한 후 다시 Selenium으로 빠른 실행으로 업데이트가 작동했으며 누락 된 링크 또는 데이터베이스 오류가 없음을 확인합니다.

수동으로 깜박임을 놓친 미묘한 오류를 잡음으로써 몇 번 저축되었습니다.

또한 라이브 사이트를 일종의 "리버스 프록시"또는로드 밸런서 (큰 경우) 뒤에 놓으면 문제가있는 경우 이전 버전으로 다시 전환 할 수 있습니다.

사용자에게 이를 투명하게 만드는 유일한 방법은 로드 밸런싱된 프록시 뒤에 배치하는 것입니다.다른 서버를 업데이트하는 동안 한 서버를 중단합니다.그런 다음 업데이트를 완료하면 업데이트한 항목을 온라인에 놓고 다른 항목을 삭제합니다.그것이 우리가 하는 방법입니다.

어떤 종류의 '베타' 빌드가 있는 경우 라이브 서버에 출시하지 마세요.'활성화되고 바쁜 사이트'가 있는 경우 사람들이 이를 두드려 무언가를 망가뜨릴 가능성이 있습니다.

이는 일반적인 고가용성 설정으로, 고가용성을 유지하려면 최소 3대의 서버가 필요합니다.라이브 서버 2개와 테스트 서버 1개.전용 DB 등을 갖고 싶다면 다른 추가 서버도 필요합니다.

호스트 클래스를 만들고 해당 호스트 클래스에 라이브 사이트를 배포합니다.호스트 클래스란 로드 밸런싱이 설정되어 있고 클래스에서 호스트를 쉽게 추가하고 제거할 수 있는 호스트 집합을 의미합니다.

베타 테스트가 완료되고 프로덕션 준비가 되면 사이트를 중단할 필요가 없습니다. 프로덕션 호스트 클래스에서 일부 호스트를 제거하고 새 호스트 클래스에 추가한 후 거기에 최신 코드를 배포하고 올바르게 테스트하면 됩니다.모든 것이 제대로 작동한다고 확신하면 모든 호스트를 점차적으로 새 호스트로 이동하고 새 호스트 클래스를 프로덕션 호스트 클래스로 지정합니다.또는 처음에 사용했던 것과 동일한 것을 사용할 수 있습니다. 이 활동의 ​​기본 아이디어는 배포 문제가 무섭고 디버그하기 어렵기 때문에 배포 후 사이트가 실행될 프로덕션 상자에서 배포를 테스트하고 있는지 확인하는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top