Skip to content

기술 공유 무중단 배포

CodeDiary18 edited this page Dec 17, 2022 · 1 revision

무중단 배포

무중단 배포(Zero Downtime Deployment)란?

  • 서비스 장애와 배포의 부담을 최소화하기 위해 운영 중인 서비스를 중단하지 않고 신규 소프트웨어를 배포하는 기술

  • 무중단 배포의 핵심

    • 로드밸런서(Load Balancer)를 통해 연결된 두 개 이상의 (서로 다른 IP, 포트를 가진) 인스턴스에 트래픽을 제어해 배포하는 것

      로드밸런서란?
         
    • 서버에 가해지는 부하(=로드)를 분산(=밸런싱)해주는 장치 또는 기술을 통칭
    • 클라이언트와 서버풀 사이에 위치하며, 한 대의 서버로 부하가 집중되지 않도록 트래픽을 관리해 각각의 서버가 최적의 퍼포먼스를 보일 수 있도록 함
    • 로드밸런싱은 여러 대의 서버를 두고 서비스를 제공하는 분산 처리 시스템에 필요한 기술
    • 배포 작업이 서비스에 영향을 주지 않도록 하기 위해 고객의 이용량에 따라 인스턴스는 물론 로드밸런서도 다중화를 고려해야함

    → 무중단 배포를 하기 위해서는 고가용성의 시스템 인프라가 구성되어 있어야 함



무중단 배포의 종류

  • 크게 제한된 자원에서 하나씩 배포하여 변경해 나가는 롤링 배포 방식
  • 현재 사용 중인 버전의 인스턴스 수만큼 새 버전의 인스턴스를 준비해 로드밸런서가 스위칭해주는 블루-그린 배포 방식
  • 새 버전 소프트웨어의 모니터링과 검증에 초점을 맞춘 카나리 배포 방식

롤링 배포(Rolling Deployment)

  • 무중단 배포의 가장 기본적인 방식

  • 배포된 서버를 한 대씩 구버전에서 새 버전으로 차례대로 교체하는 것

  • 롤링 배포 방식은 가용 자원(인스턴스)이 제한적일 경우에 사용됨

  • 교체 과정

    1. 로드밸런서는 배포된 서버에 연결을 일시적으로 끊음

    2. 연결이 끊어진 서버에 새롭게 업데이트된 서버를 교체

    3. 교체가 완료되면 나머지 버전을 위와 같은 과정으로 업데이트

  • 장점

    • 인프라에 구성된 현재 자원을 그대로 유지하고 무중단 배포 가능
  • 단점

    • 배포가 진행되는 동안 구버전과 신버전이 공존하기 때문에 호환성 문제 발생할 수 있음
    • 업데이트 도중에 서버를 필연적으로 끊어야 하기 때문에 서버 과부하 발생할 수 있음



블루-그린 배포(Blue-Green Deployment)

  • Blue를 구버전, Green을 신버전으로 지칭하여 붙여진 이름

  • 운영 환경에 구버전과 동일하게 신버전의 인스턴스를 구성

  • 신버전 배포 시 로드밸런서를 통해 신버전으로 모든 트래픽을 전환

  • Rolling Update의 단점을 보완할 수 있는 방법

  • 교체 과정

    1. 서버를 그대로 본떠 하나의 새로운 서버를 생성(새로운 서버는 로드밸런서에 연결 X)
    2. 새로운 서버 전체를 업데이트
    3. 기존 서버에 연결된 연결을 새로운 서버의 연결로 변경
  • 장점

    • 서버의 과부하가 일어나지 않음
    • 배포하는 속도가 빠름
    • 신속하게 롤백 가능
    • 남아 있는 기존 버전의 환경을 다음 배포에 재사용
  • 단점

    • 비용적인 측면에서 제약 있음
      • 시스템 자원이 2배 필요



카나리 배포(Canary Deployment)

  • 옛날 광부들이 유독 가스에 민감한 카나리아 새를 이용해 가스 누출 위험을 감지했던 것에서 유래

  • 신버전을 소수의 사용자들에게만 배포

    → 신버전의 제공 범위를 늘려가면서 모니터링 및 피드백 과정을 거칠 수 있음

  • 문제가 없는 것이 확인되면 점진적으로 다른 서버에 신버전 배포

  • 장점

    • 문제 상황을 빠르게 감지 가능
    • A/B 테스트로 활용 가능
  • 단점

    • 모니터링 관리 비용
    • 구버전과 신버전의 공존으로 인한 호환성 문제



참고
Clone this wiki locally