백엔드 개발자분과 커피챗을 하면서 다음번 배포를 할때는 무중단 배포를 한번 해보라고 권유를 받았다. 이에 먼저 무중단 배포가 무엇이고 어떤 방식이 있고 각각 어떤 장단점이 있는지 살펴보고자 한다.
먼저 중단 배포가 무엇인지 부터 알고 가보자.
한대의 서버를 운영하고 있는 상황에서 기존 V1 버전이 실행되고 있다. 새로운 기능들을 개발하고 오류를 잡으면서 업데이트 된 V2 버전 개발을 성공했다. 이 상황에서 새로운 V2를 배포하기 위해서는 V2 버전의 빌드 파일을 서버에 배포해야 한다. 서버가 하나이기에 V2를 배포하기 위해서는 V2를 다운받고 V1 버전을 종료하고 V2를 배포해야 한다.
여기서 V1이 종료되고 V2가 실행되기 서버가 닫혀있어 유저가 서비스를 이용할 수 없는 시간을 시간을 다운타임이라고 한다. 이렇게 다운타임이 존재하는 배포 방식을 중단 배포라고 한다.
무중단 배포는 중단 배포에 반대되는 개념으로 서비스가 중단되지 않은 상태로 새로운 버전을 배포하는 것을 말한다. 새로운 버전을 배포하는 과정에서 다운타임 시간을 없애 사용자가 가지는 불편함을 줄이는 방식이다.
하지만 이를 위해서는 서버 2대 이상이 확보되어야 한다.
무중단 배포 방식으로는 롤링 배포, 블루 그린 배포, 카나리 배포가 있다.
트래픽을 점진적으로 이전 버전에서 신규 버전으로 옮겨가는 방식이다. 서비스 중인 인스턴스 하나를 떼어내어 라우팅 하지 않도록 한 후 신규 버전을 적용하여 다시 라우팅을 하도록 한다. 이를 반복하여 결국 모든 인스턴스에 신규 버전을 적용하도록 점진적으로 배포과정을 거친다.
이러한 롤링 배포는 많은 서버 자원을 확보하지 않아도 무중단 배포가 가능하고, 점진적으로 진행하기 때문에 위험성이 줄어든다는 장점이 있다.
하지만 배포 중인 인스턴스를 중간에 라우팅을 끊어버리기 때문에 서비스 중인 인스턴스 수가 줄어들어 각각의 서버가 부담하는 트래픽의 양이 늘어날 수 있다. 또한 모든 인스턴스가 업데이트 되기 전에는 이전 버전과 신규 버전이 동시에 서비스 되면서 호환성 문제가 발생할 수 있다.
블루 그린 배포는 롤링 배포와 달리 한번에 구버전에서 신버전으로 옮기는 배포 방법이다. 현재 운영중인 서버를 블루라고 하고 신규 버전을 반영한 서버를 그린이라고 했을때 트래픽을 한번에 전환시켜버리는 방법이다. 전환 후 문제없이 배포가 성공적으로 완료된 경우 블루서버를 제거하거나 다음 배포를 위해 유지할 수 있다.
이러한 블루 그린 배포는 일제히 트래픽을 새로운 버전으로 옮기기 때문에 호환성 문제가 발생하지 않는다.
하지만 실제 운영에 필요한 리소스보다 2배의 리소스를 확보해야 한다는 단점이 있다.
카나리 배포는 점진적으로 배포를 진행한다는 점에서는 롤링 배포와 비슷하지만 신규 버전에 대한 오류를 미리 감지할 수 있다는 점에서 차이가 있다. 처음에는 특정한 기준이나 랜덤으로 선정한 소수의 인원에 대해서만 트래픽을 신규 버전으로 옮긴 후 서비스를 운영한다. 신규 버전에 대한 이상이 없다고 판단하면 점차 트래픽을 점진적으로 올리면서 오류를 점검하는 방식으로 이루어진다.
이러한 카나리 배포는 새로운 버전으로 인한 위험을 최소화 할 수 있다는 장점이 있다.
하지만 롤링 배포와 마찬가지로 두 버전을 동시에 운영하기 때문에 호환성 문제가 발생할 수 있다.
그러면 어떤 방식이 어느 환경에서는 제일 적합하고 구현하는 방식은 무엇일까? 다른 기업들은 어떤 배포 방식으로 무중단 배포를 사용할까? 이 포스팅만을 가지고는 무중단 배포를 완벽하게 이해하기는 어려운거 같으니 다음 포스팅에 더 자세히 알아보도록 하자...
https://hudi.blog/zero-downtime-deployment/
https://velog.io/@jingrow/블루그린-롤링-카나리-배포의-차이점과-어떤-경우에-각각의-배포방식을-시도하는지-조사해보세요
https://toss.tech/article/26057
https://facerain.github.io/canary-deployment/canary-deployment/
https://www.samsungsds.com/kr/insights/1256264_4627.html