무중단 배포란? 무중단 배포 전략에 대해 알아보자.

무중단 배포란?

무중단 배포를 사용하지 않을 경우

실제 서비스를 서버 한대만을 사용해 운영한다고 가정해보자.

현재 서비스 중인 서비스는 application-V1을 배포한 서비스이다.

그런데 기능이 업데이트되어 application-V2를 새로 개발해 새로운 버전을 배포하려한다.

 

새로운 버전 V2를 배포하기 위해서는 V2 버전의 빌드 파일을 서버에 배포를 해야한다.

V1과 V2는 서로 같은 포트를 사용하기 때문에 V2를 배포하기 위해서는 V1버전을 통해 실행하고 있는 서비스를 종료해야만한다.

 

이 경우 V1이 종료되고 V2 버전이 실행되는 사이 유저가 서비스를 이용할 수 없는 시간이 생기는데, 이를 "다운타임"이라고 한다.

 

무중단 배포

무중단 말 그대로 서비스가 중단되지 않은 상태로 새로운 버전을 배포하는 것이다.

서비스가 계속 운영되는 상태에서 새로운 버전의 어플리케이션을 배포하는 과정에서 시스템 가동시간을 최소화하여 사용자에게 생기는 불편함(다운타임)이 없는 방식이다.

이를 위해서는 서버를 2대 이상 확보해야한다.

 

이제 무중단 배포의 여러 전략에 대해 알아보자.


무중단 배포 전략

 

Blue/Green 배포

이전 버전과 새로운 버전의 서버공통 로드 밸런서 하에 동시에 운영하기 위해 두 개의 독립적인 환경(블루 환경과 그린 환경)을 이용하는 전략이다.

이 방식은 트래픽을 한번에 구버전에서 신버전으로 옮긴다.

(현재 운영중인 서비스Blue, 새롭게 배포할 환경Green 이라고 한다.)

 

Blue 에서 서비스가 정상 가동 중일 때 새로운 버전은 Green 에 배포된다.

배포 완료되면, 로드 밸런서Green 으로 트래픽을 전환하고, Blue서비스는 종료된다.

 

만약, 이전 버전에 문제가 발생 시 빠르게 로드 밸런서를 통해 블루 환경으로 롤백이 가능하다.

 

장점

트래픽을 모두 새로운 버전으로 옮기기 때문에 호환성 문제가 발생하지 않는다.

 

단점

실제 운영에 필요한 서버 리소스 대비 2배의 리소스를 확보해야한다.

 

Rolling 배포

서비스 중인 인트턴스 하나를 로드밸런서에서 라우팅하지 않도록 떼어낸다. (이렇게 되면 해당 서버에는 트래픽이 도달하지 않게 됨.)

이 상태에서 해당 서버의 애플리케이션을 새 버전으로 교체한다.

 

이 과정을 모든 서버가 새로운 버전으로 교체되도록 돌아가면서 반복한다.

 

장점
  • 많은 서버 자원을 확보하지 않아도 무중단 배포가 가능하다.
  • 인스턴스마다 차례로 배포를 진행하기 때문에 배포로 인한 위험이 줄어든다.

 

단점
  • 새 버전을 배포할 때 배포 도중 서비스 중인 인스턴스 수가 줄어, 각각의 서버가 부담하는 트래픽 양이 증가하게 된다.
  • 배포가 진행되는 동안 구버전과 신버전이 공존하기 때문에 호환성 문제가 발생할 수 있다.

 

 

Canary 배포

까나리 전략은 위험을 빠르게 감지하는 배포 전략이다.

 

이전 버전과 새로운 버전이 동시에 가동되는 방식으로, 새 버전의 인스턴스는 일부 사용자에게만 서비스되고 나머지 사용자는 기존 버전을 사용한다.

새 버전이 정상적으로 작동함을 확인하면 전체 트래픽을 새 버전으로 전환한다.

만약 오류가 발생한다면, 일부 사용자에게서 오류를 조기에 감지해 큰 위험을 방지할 수 있따.

 

장점
  • 실제 사용자 테스트와 무중단 배포를 동시에 할 수 있다
  • 새로운 버전으로 인한 위험을 최소화 할 수 있다.

 

단점

롤링 배포와 마찬가지로 두 버전이 함께 존재하기 때문에 호환성 문제가 발생할 수 있다.