Server

롤링 배포 (Rolling Deployment) vs 블루-그린 배포 (Blue-Green Deployment) vs 카나리 배포 (Canary Deployment)

Raconer 2024. 8. 26. 23:28
728x90

1. 롤링 배포 (Rolling Deployment)

설명:

  • 점진적 업데이트: 전체 시스템을 동시에 업데이트하지 않고, 시스템의 일부 인스턴스에서만 새 버전을 점진적으로 배포합니다.
  • 작업 방식: 기존 인스턴스를 하나씩 교체하면서 새로운 버전을 배포하고, 전체 시스템이 새 버전으로 완전히 전환될 때까지 계속됩니다.

장점:

  • 무중단 배포: 전체 시스템이 항상 운영 중이므로 서비스 중단 없이 배포할 수 있습니다.
  • 리소스 효율적: 한 번에 전체 시스템을 업데이트할 필요가 없으므로 리소스를 절약할 수 있습니다.

단점:

  • 상태 불일치: 새로운 버전과 기존 버전이 동시에 운영되기 때문에, 버전 간의 호환성 문제를 주의해야 합니다.
  • 문제 발견 시 롤백 어려움: 문제가 발생하면 이미 업데이트된 인스턴스와 업데이트되지 않은 인스턴스가 혼재하여 문제를 파악하고 해결하기 어려울 수 있습니다.

배포 :

 

  • 시스템이 여러 인스턴스(예: 서버, 컨테이너)로 구성되어 있습니다.
  • 기존 버전과 새 버전의 인스턴스가 번갈아가며 운영됩니다.
  • 전체 시스템의 일부 인스턴스가 새 버전으로 업데이트되고, 나머지는 기존 버전을 유지합니다.
  • 모든 인스턴스가 새 버전으로 교체될 때까지 계속됩니다.
시간 →
  인스턴스 A() 인스턴스 B(구)  인스턴스 C(구)  인스턴스 D(구)
1
  인스턴스 A() 인스턴스 B(구)  인스턴스 C(구) 인스턴스 D(구)
2
  인스턴스 A() 인스턴스 B() 인스턴스 C(구) 인스턴스 D(구)
3
  인스턴스 A() 인스턴스 B() 인스턴스 C() 인스턴스 D(구)
4
  인스턴스 A(신) 인스턴스 B() 인스턴스 C() 인스턴스 D()

 

2. 블루-그린 배포 (Blue-Green Deployment)

설명:

  • 두 개의 환경: 두 개의 환경(블루와 그린)을 운영하여, 한 환경에서는 현재 버전이 실행되고, 다른 환경에서는 새 버전이 실행됩니다.
  • 트래픽 전환: 새 버전의 테스트가 완료된 후, 트래픽을 기존 환경에서 새 환경으로 전환하여 사용자에게 새 버전을 제공합니다.

장점:

  • 간단한 롤백: 문제가 발생하면 트래픽을 기존 환경으로 쉽게 되돌릴 수 있어 롤백이 간단합니다.
  • 테스트 용이: 새로운 버전이 완전히 테스트된 후 트래픽을 전환할 수 있어 안정성이 높습니다.

단점:

  • 자원 소모: 두 개의 환경을 동시에 운영하므로 자원이 두 배로 소모될 수 있습니다.
  • 배포 비용: 인프라를 두 배로 유지해야 하므로 비용이 증가할 수 있습니다.

배포:

 

  • 블루 환경: 현재 운영 중인 버전의 시스템.
  • 그린 환경: 새 버전이 배포된 테스트 환경.
  • 트래픽이 블루 환경에서 그린 환경으로 전환됩니다.
  • 문제 발생 시, 트래픽을 블루 환경으로 다시 전환할 수 있습니다.
초기 상태:
[ 블루 환경 (구 버전) ] 트래픽 [ 사용자 ]
배포 중:
[ 블루 환경 (구 버전) ] 일부 트래픽 [ 사용자 ]
[ 그린 환경 (신 버전) ] 일부 트래픽 [ 사용자 ]
배포 완료:
[ 그린 환경 (신 버전) ] 트래픽 [ 사용자 ]

 

 

3. 카나리 배포 (Canary Deployment)

설명:

  • 부분 배포: 새 버전을 전체 사용자에게 배포하기 전에 소수의 사용자에게 먼저 배포하여 문제를 조기에 발견합니다.
  • 점진적 확산: 문제가 없으면 점진적으로 배포 범위를 확대하여 전체 사용자에게 배포합니다.

장점:

  • 위험 최소화: 전체 사용자에게 배포하기 전에 소수의 사용자로부터 피드백을 받을 수 있어 위험을 줄일 수 있습니다.
  • 문제 조기 발견: 배포 후 문제가 발견되면 작은 사용자 그룹에만 영향을 미치므로 수정이 용이합니다.

단점:

  • 복잡성 증가: 배포 프로세스가 복잡해질 수 있으며, 일부 사용자만 새 버전을 경험하게 됩니다.
  • 데이터 불일치: 새 버전과 구 버전 간의 데이터 불일치 문제가 발생할 수 있습니다.

배포:

 

  • 전체 시스템에 새 버전을 한 번에 배포하지 않고, 일부 사용자에게 먼저 배포합니다.
  • 카나리 배포: 소수의 사용자에게 새 버전을 배포하여 문제를 조기에 발견합니다.
  • 문제가 없으면 점진적으로 전체 사용자에게 배포합니다.

 

초기 상태:
[ 구 버전 ] 전체 사용자
배포 중:
[ 구 버전 ] 95% 사용자
[ 신 버전 ] 5% 사용자
배포 확장:
[ 구 버전 ] 70% 사용자
[ 신 버전 ] 30% 사용자
배포 완료:
[ 신 버전 ] 전체 사용자
728x90

'Server' 카테고리의 다른 글

[Redis] Pub/Sub  (0) 2024.03.01
[Caching] 캐싱의 원리 와 목적  (0) 2024.02.29
[Session] Spring Boot에서의 세션 관리  (0) 2024.02.28
Session 이란?  (0) 2024.02.24
동시성 제어  (0) 2024.02.18