[CS] 무중단 배포

말하는 감자·2025년 2월 3일

CS

목록 보기
22/33
post-thumbnail

무중단 배포란

서비스를 중단하지 않고 배포하는 것을 의미한다.

  • 배포: 개발된 코드를 패키징하여 서버에서 새로운 버전의 애플리케이션을 실행하도록 하는 행위

서버의 중단

  • v1 서비스가 실행 중 일때 v2 버전을 다운받는다.
  • v1 서비스를 종료시키는 시점부터 v2를 시작하기 전까지 서비스는 중단된다.
  • 서비스가 중단되는 시간을 다운 타임이라고 한다.
  • v1 서비스를 꼭 중단 시켜야 v2를 실행시킬 수 있는지?
    • 동일 포트를 사용한다면 당연

무중단 배포

  • 다운 타임을 없애는게 핵심

무중단 배포 방식

1. Rolling

V1

V2

  • 가장 일반적인 배포
  • 새 버전을 점진적으로 교체하는 방식(V1 -> V2)
  • 가용 자원(서버)이 제한적일 경우
    • 배포 진행 서버는 요청 처리할 수 없기 때문에 각 서버가 부담하는 트래픽 증가
  • 큰 변화가 없거나 이미 충분히 테스트한 기능의 경우
    • 점진적 배포처럼 점진적 롤백가능

2. Blue/Green


  • V1을 블루, V2를 그린
  • 신 버전을 배포하고 일제히 전환
  • 구 버전, 신 버전 서버를 동시에 나란히 구성하여 배포 시점에 트래픽이 일제히 전환된다.
  • 빠른 롤백이 가능하고 운영 호나경에 영향을 주지 않고 실제 서비스 환경으로 신 버전 테스가 가능하다.
    • 기존 blue환경을 유지하고 있으므로 문제 발생시 blue로 트래픽 전환하여 롤백
  • 시스템 자원이 두배로 필요하여 더 많은 비용 발생

3. Canary

  • 새 버전에 점진적으로 트래픽을 전환하는 방식
  • 안정성이 중요한 시스템의 경우 사용
    • 소수의 사용자에게만 영향
  • 새로운 기능 혹은 실험적 기능을 도입하는 경우
    • 문제 상황을 초기 단계에서 발견 가능
  • 성능 모니터링에 유용

요청 처리 중 어플리케이션 종료

어떤 배포 방법을 사용하는지에 따라 다르겠지만 기존 배포했던 서버를 내려야 하는 상황이 발생할것

예를 들어, 블루그린 배포 상황에서 V1 서버를 죽여야 하는 상황에, 만약 V1의 사용자가 결제를 진행중이라면 Hard 셧다운이 아닌, Graceful 셧다운을 사용하여 사용자에게 영향을 주지 않도록 한다.

Hard Shutdown

  • 빠꾸없이 꺼버리는거
  • 긴급 상황에서 빠르게 시스템을 종료할 수 있는 장점
  • 데이터 손실 위험 높음
  • 작업중 파일 손상 가능성

Graceful Shutdown

기존 요청은 완료 + 새 요청을 허용하지 않는 유예기간을 제공하는 타임아웃 사용

  • 요청 처리 유예시간: 10s
  • 기존 요청 처리를 위한 대기시간 존재

timeout

너무 짧게 설정하면 요청이 처리되기 전에 종료되므로, gracefulShutdown의 의미를 갖지 못함
너무 길게 설정하면 불필요한 대기 시간 발생

profile
주니어개발자(?)

0개의 댓글