📢 프로젝트 서버 배포과정에서 다운타임(Downtime)을 최소화 또는 없도록 하는 배포방식을 구현하고자 하였다. 이러한 무중단 배포 전략에는 어떤 것들이 있는지 알아보자!
배포 과정에서 이전 버전을 종료하고 새로운 버전의 등록 하는 시간 동안 서비스를 제공할 수 없게 되는데 이때의 시간을 다운타임이라고 한다.
무중단 배포는 서비스의 가동 시간을 최대화하면서 새로운 버전의 소프트웨어를 배포하는 전략이다.
이를 통해 사용자는 배포 과정에서 생기는 downtime을 경험하지 않게 된다.
트래픽을 점진적으로 구버전에서 새로운 버전으로 옮기는 방식
새로운 버전의 애플리케이션을 서버 그룹의 일부에만 배포하고, 문제가 없다면 다음 그룹으로 이동하는 방식이다. 이를 통해 전체 서비스가 중단되지 않으면서도 점진적인 배포가 가능하다.
크게 2가지 방식이 있다.
아래는 https://hudi.blog/zero-downtime-deployment/ 이 블로그를 참고로 하였다.
인스턴스를 하나 추가해서 새로운 버전을 실행 시키고 이상이 없다면 이 인스턴스를 연결한뒤, 기존 애플리케이션을 점진적으로 배포하고 하나의 인스턴스를 로대밸런서에서 연결을 줄여 갯수를 맞추는 방식이다.
다른 방법으로는 로드밸런서에서 하나의 서버를 떼어내고 새로운 버전을 배포한 뒤 문제가 없다면 다시 로드밸런서에 연결하고 다음 서버를 새로운 버전으로 배포하여 모든 서버를 교체하는 방식이다.
롤링 업데이트는 전체 서비스가 중단되지 않으면서 점진적으로 배포할 수 있다. 이를 통해 리소스를 효율적으로 활용할 수 있다는 장점이 있다.
하지만 배포 과정에서 일부 사용자는 새 버전을, 일부 사용자는 이전 버전을 경험하게 되거나 롤백이 복잡할 수 있다는 단점이 있다.
블루와 그린이라는 두 개의 동일한 환경을 구성하여 한 환경(예: 블루)에서는 새로운 버전의 애플리케이션을 배포하고, 다른 환경(예: 그린)에서는 현재 버전의 애플리케이션을 계속 운영하여 배포가 완료되면, 트래픽을 새로운 환경으로 전환(스위치) 하는 방식이다.
배포가 완료된 후에 트래픽을 전환하기 때문에, 사용자는 배포 과정에서 발생하는 downtime을 경험하지 않게 되며 문제가 발생하면 즉시 이전 버전으로 롤백할 수 있어 안전성이 높다.
하지만 두 개의 동일한 환경을 유지해야 하므로, 인프라 비용이 늘어날 수 있다. 또한, 데이터베이스와 같은 상태를 가지는 컴포넌트의 동기화가 복잡할 수 있다.
카나리(Canary) 란 카나리아라는 새를 뜻하며, 옛날 광부들이 유독 가스에 민감한 카나리아 새를 이용해 가스 누출 위험을 감지했던 것에서 유래한 것으로 잠재적 문제 상황을 미리 발견하기 위한 방식이다.
새로운 버전의 애플리케이션을 일부 사용자에게만 제공하고, 문제가 없다면 점차적으로 모든 사용자에게 배포하는 전략이다.
새 버전의 애플리케이션을 일부 사용자에게만 제공하므로, 문제가 발생하더라도 모든 사용자에게 영향을 주지 않아 새 버전의 성능이나 기능을 안전하게 테스트할 수 있다.
하지만 일부 사용자만 새 버전을 경험하게 되므로, 사용자간의 서비스 경험이 일관성이 없을 수 있다. 또한, 롤링 배포와 마찬가지로 신·구 두 버전이 운영되기 때문에 버전 관리가 필요하다.