무중단 배포

2023. 11. 12. 14:51·프로그래밍/Infra

무중단 배포 왜 해야할까?

  • 현재 운영중인, 서비스의 신 기능 추가로 인해 버전이 업그레이드 되고 새로운 파일을 배포해야할 때, 다운 타임이 발생하게 됩니다
  • 다운타임이 발생하는 배포 방식을 중단 배포라고 하며, 이 시간동안은 유저가 서비스를 이용할 수 없기에 유저에게 지속적으로 서비스를 제공하기 위해 무중단 배포 방식을 고려해봐야 합니다

무중단 배포

  • 무중단 배포는 서비스가 중단되지 않은 상태(zero-downtime)로, 새로운 버전을 사용자들에게 배포하는 것을 의미합니다
  • 무중단 배포를 하기 위해서는 최소 서버가 2대 이상 확보되어야 합니다.

무중단 배포의 종류

롤링(Rolling) 배포

  • 현재 운영중인 서비스의 트래픽을 점진적으로 구버전에서 새로운 버전으로 옮기는 방식 입니다.
    • 점진적으로 트래픽을 옮기는 방식은 크게 2가지 방식이 있습니다

방식 1

  1. 인스턴스를 하나 추가하고, 새로운 버전을 실행한다.
  2. 로드 밸런서에 새로운 인스턴스를 연결하고, 기존 구버전 어플리케이션이 실행되는 인스턴스를 하나 줄인다
  3. 그 후, 나머지 인스턴스도 버전을 변경한다
  • 서버 개수를 유연하게 조절할 수 있는 클라우드 기반 환경에 적합할 것 같다.

방식 2

  1. V1이 실행되고 있는 서버 하나를 로드밸런서에서 떼어낸다.
  2. 이 상태에서 해당 서버의 어플리케이션을 V2로 교체한다
  3. 이 과정을 반복해 모든 서버를 새 버전으로 교체한다

방식2의 경우 클라우드 환경이 아닌, 온프레미스 환경에서도 사용할 수 있을것이다

롤링 방식의 장점

  • 롤링 배포 방식은 k8s, elastic beanstalk와 같은 많은 오케스트레이션 도구에서 지원하여 간편하게 구축할 수 있다.
  • 많은 서버 자원을 확보하지 않아도 무중단 배포가 가능하다

롤링 방식의 단점

  • 방식 2와 같은 경우, 배포 도중 서비스 중인 인스턴스 수가 줄어들게 되므로 그에 따른 서버가 부담하는 트래픽의 양이 늘어 날 수 있기에 주의해야 한다
  • 또한 구버전과 신버전의 어플리케이션이 동시에 서비스되기 때문에 호환성 문제가 발생할 수 있다.

Blue/Green 배포

  • 트래픽을 한번에 구버전에서 신버전으로 옮기는 방법이다.
    • 현재 운영중인 서비스의 환경을 Blue라고 부르고, 새롭게 배포할 환경을 Green이라 부른다.

배포 진행 방식

  1. Blue와 Green 환경을 동시에 구성해둔다.
  2. 배포 시점에 로드 밸런서가 트래픽을 Blue에서 Green으로 일제히 전환 시킨다.
  3. Green버전 배포가 성공적으로 완료 되었고, 문제가 없다고 판단시 Blue 서버를 제거할 수 있다
    혹은 다음 배포를 위해 유지해둘 수도 있다.

Blue/Green 방식의 장점

  • 롤링 배포와 달리 한번에 새로운 버전으로 옮기기 때문에 호환성 문제가 발생하지 않는다.

Blue/Green 방식의 단점

  • Blue Green 환경을 구성해야 하기에, 실제 운영에 필요한 서버 리소스 대비 2배의 리소스를 확보해야한다.
    • 클라우드 환경에서는 필요없는 인스턴스를 제거하거나, 배포가 완료된 Blue환경을 제거하면 되지만
      온프레미스 방식이라면 운영비용 부담이 클 수도 있다.

카나리(Canary) 배포

  • 카나리는 롤링 배포 방식과 비슷하지만, 새로운 버전에 대한 오류를 조기에 감지하는 것이 다르다

카나리 배포 방식

  1. 소수 인원에 대해서만 트래픽을 새로운 버전에 옮겨둔 상태에서 서비스를 운영한다
  2. 새로운 버전에 이상이 없다고 판단하였을 경우에만 모든 트래픽을 신규 버전으로 옮긴다
    1. 이때, 트래픽을 새로운 버전으로 옮기는 기준은 정해진 규칙(특정 유저 등)혹은 랜덤이다.

카나리 배포방식의 장점

  • 새로운 버전으로 인한 위험을 최소화 할 수 있다.
  • 소수 인원에 대해서만 트래픽을 옮기는 특성으로 인해 A/B 테스트를 진행하기에도 적합한 방식이다.

카나리 배포방식의 단점

  • 롤링 배포와마찬가지로 신/구 버전의 애플리케이션이 동시에 존재하므로 호환성 문제가 발생할 수 있다.

참고

  • https://hudi.blog/zero-downtime-deployment/

'프로그래밍 > Infra' 카테고리의 다른 글

서버 확장 전략 어떤걸 선택해야 할까?  (0) 2022.12.28
'프로그래밍/Infra' 카테고리의 다른 글
  • 서버 확장 전략 어떤걸 선택해야 할까?
황심지
황심지
  • 황심지
    꾸준함이 진리다
    황심지
  • 전체
    오늘
    어제
    • 분류 전체보기 (51)
      • 프로그래밍 (12)
        • 운영체제 (0)
        • Spring (4)
        • Java (10)
        • SQL (0)
        • HTTP (2)
        • 회고 (2)
        • Network (0)
        • 프로젝트 (12)
        • Infra (2)
        • 데이터베이스 (3)
        • TIL (1)
        • 파이썬 (2)
      • 운동 (0)
        • 거인화 루틴 일지 (0)
        • 과부하 훈련 일지 (0)
        • 운동 관련 이모저모 (0)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    패캠챌린지
    CAP Theorem
    chatops
    에프랩 후기
    webflux
    개인회고록
    그런 RESTAPI로 괜찮은가?
    Java
    1년회고록
    배포 방식
    직장인인강
    에프랩 후기 자바 백엔드 부트캠프
    대용량 트래픽
    CAP 이론
    position argument
    쿼리 성능
    python
    django orm
    패스트캠퍼스
    세션
    페이징 최적화
    spring
    직장인자기계발
    에프랩 후기 자바 백엔드
    F-Lab 후기
    한번에끝내는코딩테스트369Java편초격차패키지Online
    패스트캠퍼스후기
    2023년회고
    레디스 세션
    개인성장
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
황심지
무중단 배포
상단으로

티스토리툴바