[서비스 배포 전략 구상하기] 무중단 배포 3가지 방식 (Rolling, Blue-Green, Canary)
무중단 배포
서비스를 운영할 때 새로운 버전을 배포하는 동안 기존 운영되는 애플리케이션이 종료된다는 문제가 있다. 실제 서비스하는 앱이라면 클라이언트에게 아주 안좋은 UX환경을 제공하게 된다. 흔히 사용하는 앱에서는 해킹이나 서버에 큰 오류가 발생하지 않는 한 서비스가 정지되는 경우는 없다. 어떻게 서비스 중단 없이 새로운 버전을 계속 배포할 수 있는지 알아보자.
무중단 배포 방식
- 롤링(Rolling Update) 방식
- 블루 그린(Blue-Green Deployment) 방식
- 카나리(Canary Release) 방식
1. 롤링(Rolling Update) 방식
롤링 업데이트 방식은 사용중인 인스턴스 내에서 새 버전을 교체하는 가장 기본적인 방식이다. 서비스 중인 인스턴스 하나를 로드밸런서에서 라우팅하지 않도록 한 뒤 새 버전을 적용하여 다시 라우팅하도록 한다. 그렇게 모든 배포된 모든 인스턴스를 순차적으로 한 대씩 새로운 버전으로 교체해준다.
장점
- 롤링 방식은 구성된 자원을 그대로 유지한 채로 무중단 배포가 가능하므로 관리가 편하다.
- 인스턴스마다 차례로 배포를 진행하기 때문에 상황에 따라 손쉽게 롤백(Roll Back)이 가능한 장점이 있다.
단점
- 롤링 배포 방식은 가용 자원(인스턴스)이 제한적일 경우에 사용되며 새 버전을 배포할 때 인스턴스 수가 감소하기 때문에 서비스 처리 용량을 고려해야 한다. (예로, 롤링 업데이트 과정에 새로운 버전 인스턴스가 1개만 존재 할 경우 트래픽이 몰리면 과부하가 발생할 수 있다.)
- 또한 배포가 진행되는 동안 구버전과 신버전이 공존하기 때문에 호환성 문제가 발생할 수 있다.
2. 블루 그린(Blue-Green Deployment) 방식
블루 - 구 버전, 그린 - 신 버전이라 해서 붙여진 이름이다. 운영 환경에서 구 버전과 동일하게 신 버전을 배포하고 일제히 전환하여 모든 연결(트래픽)을 신 버전으로 전환하는 배포 방식이다.
장점
- 롤링 배포와 마찬가지로 빠른 롤백이 가능하다.
- 구 버전과 동일한 환경에서 신 버전 인스턴스를 구성하기 때문에 실제 서비스 환경에서 신 버전을 미리 테스트 할 수 있다.
- 배포가 완료된 후 남아있는 구 버전 환경을 다음 배포에 재사용 할 수 있다.
- 신 버전 배포가 진행되는 동안 서버 과부하가 일어날 확률이 적다.
단점
- 하지만 블루-그린을 위해서는 시스템 자원이 롤링보다 2배 이상으로 필요하여 비용 등 문제로 소규모 프로젝트에 적용하기 어렵다.
블루 그린 방식은 물리적인 서버를 대상으로 사용하기에는 비용상 버겁다. 그래서 클라우드 환경에서 쉽게 인스턴스를 생성하거나 없앨 수 있는 AWS나 Docker 컨테이너와 같은 가상 환경에서 사용하는 것이 더 좋다.
3. 카나리(Canary Release) 방식
'카나리아'라는 새는 유독가스에 굉장히 민감한 동물이다. 옛날 광부들이 유독 가스에 민감한 카나리아 새를 이용해 석탄 광산에서 유독가스 누출의 위험을 알리는 용도로 사용되어왔다. 미리 잠재적 위험을 감지하기 위함이다.
카나리 배포 방식은 위험을 빠르게 감지할 수 있는 배포 전략이다. 신 버전의 제공 범위를 늘려가면서 모니터링 및 피드백 과정을 거칠 수 있다. 로드밸런서를 통해 신버전의 제품을 경험하는 사용자를 조절할 수 있는 것이 특징으로 신버전을 특정 사용자(예: 모바일 이용자) 혹은 단순 비율에 따라 구분해 제공할 수 있다. 이렇게 서버의 트래픽 일부를 신 버전으로 분산하여 오류 여부를 확인할 수 있다.
장점
- 블루-그린 처럼 신 버전 배포 전에 실제 운영 환경에서 미리 테스트할 수 있다.
- 카나리 배포는 단계적인 전환 방식을 통해 부정적 영향을 최소화하고 상황에 따라 트래픽 양을 늘리거나 롤백할 수 있다.
단점
- 롤링 배포와 마찬가지로 신·구 두 버전이 운영되기 때문에 버전 관리가 필요하다.
참고
https://subicura.com/2016/06/07/zero-downtime-docker-deployment.html