무중단 배포

kys95·2022년 8월 29일
0

앞서 CI/CD를 통한 배포 자동화를 통해 서비스를 운영하고 있다고 가정했을 때 어떤 문제점이 발생할까요? 그것은 바로 배포하는 동안 애플리케이션이 종료된다는 문제입니다. 즉, 새로운 서비스를 배포하기 위해서 기존 서비스를 종료하고 새로운 서비스를 시작하는 두 행위 사이에 다운 타임이 발생하여 다운 타임동안 사용자들은 실제 서비스를 이용하지 못하게 됩니다. 그럼 어떻게 서비스 중단 없이 배포를 계속할 수 있는지 알아보고자 합니다.

무중단 배포 구현 방법

  • AWS에서 Blue-Green 무중단 배포
  • 도커를 이용한 무중단 배포
  • L4.L7 스위치를 이용한 무중단 배포
  • Nginx를 이용한 무중단 배포
    이중에서 Nginx를 이용한 무중단 배포가 가장 쉽고 저렴하다

리버스 프록시

  • Nginx가 외부의 요청을 받아 백엔드 서버로 요청을 전달하는 행위
  • 인터넷과 서버 사이에 위치한 중계 서버
  • 클라이언트가 요청한 내용을 캐싱
  • 서버 정보를 클라이언트로부터 숨길 수 있어 보안에 용이

클라이언트가 요청을 보내면 리버스 프록시가 이를 서버에게 대신 전달해준다. 서버의 입장에서 클라이언트로부터 직접 요청을 받는 것이 아니라 리버스 프록시를 통해 요청을 받기 때문에 보안에 용이하다.

로드 밸런싱

  • 부하 분산
  • 서버에 가해지는 부하를 분산해주는 역할
  • 하나의 서버가 멈추더라도 서비스 중단 없이 다른 서버가 서비스를 계속 유지할 수 있는 무중단 배포가 가능

무중단 배포 방식

  1. Rolling 배포
    롤링 업데이트 방식은 사용중인 인스턴스 내에서 새 버전을 교체하는 가장 기본적인 방식이다. 서비스 중인 인스턴스 하나를 로드밸런서에서 라우팅하지 않도록 한 뒤 새 버전을 적용하여 다시 라우팅하도록 한다. 그렇게 모든 배포된 모든 인스턴스를 순차적으로 한 대씩 새로운 버전으로 교체해준다.

장점

  • 롤링 방식은 구성된 자원을 그대로 유지한 채로 무중단 배포가 가능하므로 관리가 편하다.
  • 인스턴스마다 차례로 배포를 진행하기 때문에 상황에 따라 손쉽게 롤백(Roll Back)이 가능한 장점이 있다.

단점

  • 롤링 배포 방식은 가용 자원(인스턴스)이 제한적일 경우에 사용되며 새 버전을 배포할 때 인스턴스 수가 감소하기 때문에 서비스 처리 용량을 고려해야 한다. (예로, 롤링 업데이트 과정에 새로운 버전 인스턴스가 1개만 존재 할 경우 트래픽이 몰리면 과부하가 발생할 수 있다.)
  • 또한 배포가 진행되는 동안 구버전과 신버전이 공존하기 때문에 호환성 문제가 발생할 수 있다.

  1. Blue/Green 배포
    Blue - 구 버전, Green - 신 버전이라 해서 붙여진 이름이다. 운영 환경에서 구 버전과 동일하게 신 버전을 배포하고 일제히 전환하여 모든 연결(트래픽)을 신 버전으로 전환하는 배포 방식이다.

장점

  • 롤링 배포와 마찬가지로 빠른 롤백이 가능하다.
  • 구 버전과 동일한 환경에서 신 버전 인스턴스를 구성하기 때문에 실제 서비스 환경에서 신 버전을 미리 테스트 할 수 있다.
  • 배포가 완료된 후 남아있는 구 버전 환경을 다음 배포에 재사용 할 수 있다.
  • 신 버전 배포가 진행되는 동안 서버 과부하가 일어날 확률이 적다.

단점

  • 시스템 자원이 롤링보다 2배 이상으로 필요하여 비용 등 문제로 소규모 프로젝트에 적용하기 어렵다.
  1. Canary 배포
    옛날 광부들이 유독 가스에 민감한 카나리아 새를 이용해 가스 누출 위험을 감지했던 것에서 유래되어 위험을 빠르게 감지할 수 있는 배포 전략이다. 신 버전의 제공 범위를 늘려가면서 모니터링 및 피드백 과정을 거칠 수 있다. 로드밸런서를 통해 신버전의 제품을 경험하는 사용자를 조절할 수 있는 것이 특징으로 신버전을 특정 사용자(예: 모바일 이용자) 혹은 단순 비율에 따라 구분해 제공할 수 있다. 이렇게 서버의 트래픽 일부를 신 버전으로 분산하여 오류 여부를 확인할 수 있다.

장점

  • Blue/Green 처럼 신 버전 배포 전에 실제 운영 환경에서 미리 테스트할 수 있다.
  • 단계적인 전환 방식을 통해 부정적 영향을 최소화하고 상황에 따라 트래픽 양을 늘리거나 롤백할 수 있다.

단점

  • rolling 배포와 마찬가지로 신·구 두 버전이 운영되기 때문에 버전 관리가 필요하다.
참고
profile
어제의 나보다 나은 사람이 되자

0개의 댓글