Table of Contents
Blue-green 배포는 현재 트래픽 (블루) 및 한 아이들 (그린)을 제공하는 두 가지 동일한 생산 환경을 실행하여 가동 시간과 위험을 줄이는 릴리스 관리 전략입니다. 응용 프로그램의 새로운 버전이 준비되면, 그것은 비활성 환경에 배포되며, 완전히 테스트 된 다음 트래픽이 계속 전환됩니다. 이 접근법은 유지 보수 창의 필요성을 제거하고 강력한 롤백을 가능하게하며, 오래된 새로운 코드 사이의 깨끗한 분리를 제공합니다. Martin Fowler와 JJFGET의 원래 대중화 된, 특히 DFS는 특히 현대의 개발이 될 때, CIFGET의 내장 된 배포판이 있습니다.
왜 블루그린 배포 매트
기존의 배포 방법- 롤링 업데이트 또는 캐리 릴리즈와 같은-실현은 전환 중에 부분 가동 중단 또는 등급의 성능에 노출. 새로운 것을 확인 때까지 오래된 환경을 완전히 작동 유지함으로써 블루 그린 배포 주소. 이것은 팀에게 자주 배포하는 신뢰를 제공합니다, 심지어 임무-실현 시스템. 주요 이점은 다음과 같습니다 :
- 영역 배포:응용 프로그램이 불가능할 때의 창이 없습니다.
- 일회 롤백: 문제 발생시 초에 오래된 환경에 트래픽을 재생합니다.
- 생산에 대한 절연 테스트: 사용자가 영향을받지 않고 실제 조건에서 새로운 버전을 검증합니다.
- ]단스크 데이타베이스 마이그레이션: 주의적인 스키마 버전과 백워드 호환성으로 처리할 수 있습니다.
- Improved team angle: 개발자는 더 적은 두려움으로 더 자주 릴리스 할 수 있습니다.
CI/CD 파이프 라인과 Blue-Green Deployment 통합
CI/CD 파이프라인은 빌드, 테스트, 배포 단계로 자동화됩니다. 블루그린과 결합할 때, 파이프라인은 환경 전환의 오케스트라가 됩니다. 전형적인 흐름은 다음과 같습니다.
- Build and Test: Code commits 트리거 빌드. Unit Test, Integration test, and security scans run in the 파이프라인.
- Deploy to Inactive Environment: 파이프라인은 현재 트래픽을 제공하지 않는 환경에 대한 의문을 배포합니다 (예를 들어, 푸른색이 활성화되면 녹색).
- Smoke and Acceptance Tests: 기능, 성능 및 데이터 일관성을 확인하기 위해 새로운 환경에 대한 자동 테스트 실행.
- Switch 트래픽: load balancer 또는 DNS 레코드는 새로운 환경에 모든 사용자 트래픽을 경로로 업데이트됩니다.
- Post-Deployment Validation: 건강 검사 및 모니터링은 재사용 대기 시간 동안 계속.
- 청소 (선택 사항): 오래된 환경은 롤백 대상으로 유지되거나 재사용 대기 시간 후에 파괴됩니다.
두 개의 Identical 환경을 설정
환경 패리티는 중요합니다. Blue 및 Green 환경은 하드웨어, 구성, 네트워크 토폴로지 및 애플리케이션 버전의 예외로 동일해야합니다. Terraform, CloudFormation 또는 Pulumi와 같은 코드 (IaC) 도구와 같은 인프라를 사용하여 동일한 템플릿에서 환경을 제공해야합니다. 데이터베이스 복제는 동일한 데이터 세트 (또는 안전한 스키마 변화를 허용하는 마이그레이션 전략이 있어야 함)를 공유하는 두 환경 모두 설정해야합니다.
데이터베이스 고려
Stateful services-특히 데이터베이스-complicate blue-green deploys. 일반적인 접근법은 다음과 같습니다.
- Backward-compatible 마이그레이션: 이전과 새로운 코드 모두 작업 변경 적용 (예를 들어, 열을 추가하지만 그들을 떨어 뜨리지 않습니다).
- 복제 및 복제를 읽습니다. 동일한 데이터베이스에 환경 모두 포인트를 모두 점하지만, 쓰기는 활성 환경에서만 발생합니다.
- Schema-per-environment:] 각 환경에 대한 절연 데이터베이스 및 마이그레이션 도구와 동기화를 처리합니다.
Flyway 또는 Liquibase 같은 도구는 파란색 녹색 흐름에 대한 안전 증가 마이그레이션을 관리 할 수 있습니다.
Automating 교통 전환
트래픽 스위치는 로드밸런서(Layer 7), DNS(Layer 4/7) 또는 라우터 레벨에서 구현할 수 있습니다. 클라우드 중립적인 배포를 위해 AWS ALB, Google Cloud Load Balancer, Kubernetes Service+Ingress와 같은 서비스들은 이 직선을 만듭니다. CI/CD 파이프라인은 API 통화 또는 구성 업데이트를 통해 스위치를 트리거해야 합니다. 주요 고려사항:
- 건강 검사: 로드밸런서는 새로운 환경을 확인해야 합니다.
- Graceful draining: 오래된 환경은 교체를 하기 전에 입력된 후 입력한 요청을 완료해야 합니다.
- Session persistence:] 앱이 끈적한 세션을 사용한다면, 스위치가 사용자 컨텍스트를 깨지 않도록 합니다. 외부 세션 스토어(Redis, Memcached)를 고려하십시오.
CI/CD로 블루그린을 단순화하는 도구
다양한 CI/CD 플랫폼과 배포 도구는 푸른 녹색 전략에 대한 기본 지원이 있습니다. 아래는 가장 인기있는 몇 가지입니다.
Ansible 또는 Spinnaker와 Jenkins
Jenkins는 매우 유연합니다. Ansible playbooks를 호출하여 부하 잔액 구성을 업데이트하거나 Spinnaker의 내장 된 Red / Black 전략을 사용할 수 있습니다. Spinnaker는 스위치 전에 수동 승인을위한 시각적 UI를 제공합니다.
GitLab CI와 자동 DevOps
GitLab Auto DevOps는 쿠버네티스에 배포될 때 내장된 “블루그린 배포” 단계를 포함합니다. 그것은 두 개의 배포(블루 및 그린)을 생성하고 `activeSelector` 레이블을 플립하는 서비스입니다. GitLab의 문서는 단계별 가이드를 제공합니다.
AWS CodeDeploy와 GitHub 작업
AWS CodeDeploy는 Blue-green 배포를 기본적으로 지원합니다. GitHub 작업 워크플로우는 S3 버킷에 코드를 밀어서 CodeDeploy 응용 프로그램 개정을 트리거할 수 있습니다. 배포 그룹은 자동으로 새로운 인스턴스를 제공, 건강 확인, 트래픽을 이동합니다. AWS 문서는 설정를 설명합니다.
Argo Rollouts의 쿠버네티스
Argo Rollouts는 청록색을 포함한 고급 배포 전략을 제공합니다. Ingress 컨트롤러 및 서비스 메쉬와 통합하여 트래픽 이동을 자동화합니다. 롤백은 선언이며, 메트릭을 기반으로 자동으로 트리거 될 수 있습니다. Argo Rollouts]에 대해 자세히 알아보기.
생산-Grade Deployments에 대한 모범 사례
Blue-green 구현은 단지 전환 서버보다 더 많은 것입니다. 일반적인 pitfalls를 방지하기 위해이 모범 사례를 따르십시오.
Automate 모든 것
수동 단계는 오류를 도입. 전체 파이프라인—물속을 전환하는 것부터 자동화됩니다. 버전 제어 파이프 정의 (예를 들어, `Jenkinsfile`, `.gitlab-ci.yml`, 워크플로우 YAML)를 사용하여 테스트가 각 배포에서 자동으로 실행됩니다.
기능 플래그 사용
기능 플래그와 블루 그린을 결합하여 배포에서 분리 할 수 있습니다. 새로운 기능을 숨겨져서 플래그 관리 도구 (LaunchDarkly, PostHog, Unleash)를 통해 점차적으로 활성화 할 수 있습니다. 이 기능은 실패하면 전체 환경을 롤하는 데 필요한 것을 피합니다.
종합시험
연기 테스트는 기본 HTTP 응답, 데이터베이스 연결, 긴요한 사용자 여행을 확인해야합니다. 합성 모니터링 도구 (예를 들어, 확인, Datadog 합성물)을 사용하여 전환하기 전에 비활성 환경에 대한 브라우저 테스트를 실행합니다. 성능 재귀를 잡는 부하 테스트를 포함하십시오.
지속적으로 감시
스위치 후, 애플리케이션 메트릭, 오류율, 대기 시간 및 비즈니스 KPI를 모니터링합니다. 경고 (PagerDuty, Opsgenie)를 사용하여 양극 임계값이 위반되는 경우 자동화된 롤백을 트리거하십시오. 예를 들어, 5xx 오류가 50% 증가하면 기존 환경에 트래픽을 뒤집습니다.
Stateful 구성 요소 계획
파일 업로드, 사용자 세션 및 작업 큐는 조심스럽게 처리해야합니다. 외부 공유 저장 (S3, EFS) 및 분산 캐시 (Redis, Memcached)를 사용하여 환경이 액세스 할 수 있습니다. 큐에 대해 메시지를 스위치 중에 손실하지 않습니다.
Cooldown 기간 정의
전환 트래픽 후, 설정 시간 (예를 들어, 30 분)을 실행하는 오래된 환경을 유지하여 하위 버그가 발견되면 빠른 롤백을 허용하십시오. 그 후 비용을 절약 할 수 있습니다.
도전과 How to Overcome Them
데이터베이스 Schema Migrations
가장 큰 도전은 데이터베이스가 다시 호환성을 깨는 변경을 처리하고 있습니다. 솔루션은 다음과 같습니다.
- 첨가제 마이그레이션만 사용 (열을 추가, 그들을 떨어뜨리지 않음).
- 별도의 포스트 스위치 마이그레이션에 오래된 열을 제거하십시오.
- 새 앱 버전의 이전 데이터베이스 변경을 배포하고, 오래된 코드를 여전히 실행할 수 있습니다.
의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의
두 가지 동일한 생산 환경을 두 배로 늘리고 있습니다. 부채: 테스트 중에 비활성 환경에 대한 더 작은 인스턴스를 사용하거나, 컨테이너화를 사용하여 아래 자원 공유를 사용할 수 있습니다. Cloud Auto-scaling은 폐기물을 줄일 수 있습니다.
세션 및 캐시 워밍업
트래픽 스위치가 되면 캐시가 추워집니다. 전환하기 전에 전형적인 사용자 요청을 시뮬레이션하여 새로운 환경을 전해집니다. Gatling이나 k6 같은 도구는 현실적인 부하를 생성 할 수 있습니다.
네트워크 구성
방화벽 규칙, DNS 레코드 및 SSL 인증서는 환경 전반에 걸쳐 동일해야합니다. 일관성을 보장하기 위해 IaC를 사용하십시오. DNS 기반 전환을 사용하는 경우, 전파 시간 (TTL)의 계정.
Real-World 예제: 전자 상거래 플랫폼
10 백만 명의 일일 방문자가 다운 타임없이 새로운 기능을 배포 할 필요가있는 온라인 소매 업체. 그들은 다음과 같은 설정으로 파란색 녹색 배포를 채택했습니다.
- AWS Auto Scaling Group(블루, 그린) 두 개.
- 동일한 인프라를 제공 할 수 있는 Terraform.
- GitLab CI 파이프라인: 빌드, 테스트, 녹색에 배포, Playwright 연기 테스트를 실행, 다음 ALB 대상 그룹 스위치를 트리거.
- 환경 전반에 걸쳐 공유된 세션을 위한 Redis.
- 데이터베이스 마이그레이션: Flyway와 백워드 호환.
- 오류율이 있는 경우 자동 롤백 > 1 % 첫 5 분.
결과: 배치 빈도는 매달에서 주간으로 증가, 6 개월 이상 0 가동 시간 사건.
관련 기사
이 웹 사이트는 귀하가 웹 사이트를 탐색하는 동안 귀하의 경험을 향상시키기 위해 쿠키를 사용합니다. 이 쿠키들 중에서 필요에 따라 분류 된 쿠키는 웹 사이트의 기본적인 기능을 수행하는 데 필수적이므로 브라우저에 저장됩니다. 또한이 웹 사이트의 사용 방식을 분석하고 이해하는 데 도움이되는 제 3 자 쿠키를 사용합니다. 이 쿠키는 귀하의 동의하에 만 브라우저에 저장됩니다. 이러한 쿠키를 거부 할 수도 있습니다. 이러한 쿠키 중 일부를 선택 해제하면 검색 환경에 영향을 미칠 수 있습니다. 이러한 쿠키 중 일부를 선택 해제하면 검색 환경에 영향을 미칠 수 있습니다.