DevOps/CI-CD

[DevOps]서비스 무중단배포 전략 설계하기 (+실제 프로젝트 적용)

yubi5050 2022. 10. 7. 02:59

무중단 배포란?

배포 중인 서비스의 변경사항 적용시 서비스가 중단되는 현상 없이 이루어지게 작업하는 방법

 

무중단 배포 방법엔 크게 3가지 방법이 있다.

 

1. 롤링 배포 

2. Blue/Green 배포

3. 카나리 배포

 

롤링(Rolling) 배포

롤링 배포는 사용중인 인스턴스 들을 새 버전으로 점진적으로 교체하는 방식. 

 

EX) 서비스 중인 인스턴스 하나를 Loadbalancer에서 제외시키고, 새 버전으로 적용 및 순차적으로 적용함

 

장점

인스턴스를 차례대로 전환하기 때문에 배포중 문제가 생기더라도 Rollback 등으로 대응 가능

 

단점

새 버전 전환 중 실 서비스에 대응되는 인스턴스 수가 감소하기 때문에 트래픽이 몰릴 수 있음

서비스 처리 용량에 대한 고려 필요

배포 진행 간 구/신 버전 공존으로 인한 호환성 문제 발생 가능

Rolling 배포 방식, 이미지 출처:https://loosie.tistory.com/781

 

Blue/Green 배포

신버전에 대한 준비를 완료 후에 모든 트래픽(LoadBalancer)을 구(Blue) => 신(Green) 버전으로 전환하는 배포 방식

 

장점

신 버전에 대해 미리 테스트 완료 후 구 버전과 변경이 가능하다

신 버전 배포가 진행되는 동안 서버 과부하가 일어날 확률이 적다

 

단점

시스템 자원이 2배가 필요하여 비용 문제가 있을 수 있어 소규모 프로젝트에 적용하긴 어렵다.

Blue/Green 배포 방식, 이미지 출처:https://loosie.tistory.com/781

 

 

카나리(Canary Release) 배포

카나리 배포 전략은 다른 배포 전략보다 사전에 위험을 빠르게 감지할 수 있는 방법으로, 구 버전과 신 버전의 비율을 조절하면서, 서서히 바꿔나가는 방식이다.

 

장점

신 버전을 일부 사용자에게만 제공하여, 모니터링/피드백 등의 과정을 거칠 수 있음

신 버전 전환 이전에 실제 운영 환경 테스트를 통해 오류 발생 최소화 가능

Rolling 배포와 달리 Traffic이 몰릴 우려는 없음

 

단점

배포 진행 간 구/신 버전 공존으로 인한 호환성 문제 발생 가능

 

카나리 배포 방식, 이미지 출처:https://loosie.tistory.com/781

 

 

(경험) 무중단 배포 선택 과정

문제 발생

실 서비스 오픈 후 사용자에게 피드백을 받으며, 실시간으로 수정이 반영되어야 하는 Hotfix 경우 발생

EC2 단일 서버로 서비스를 대응하였고, 따로 LoadBalancer는 없는 상황

GitAction을 통한 재빌드 및 재배포 과정에서 서비스 공백 시간 발생

 

문제 해결 방법

  • 무중단 배포 전략 중 Rolling 방법은 LoadBalancer가 없어 불가 => Blue/Green 방법 선택
  • Dev Branch로 추가 개발 및 최종 테스트용 EC2 배포 서버 증설
  • 기존 배포 전략 : Main(개발, local)⇒ Publish (서비스, 배포O)
  • 수정 후 배포 전략 : Main(개발, local) ⇒ Development (개발, 배포O) ⇒ Publish (서비스, 배포O)
  • Dev Branch에서 최종 완료 확인 후 Publish 로 배포
  • 일제히 교체 하는 방식으로 서비스 중단 시간 최소화

관련 프로젝트 링크 

 

GitHub - SeonminKim1/SidePro-BE: 사이드 프로젝트 공유 플랫폼 with 커피챗 - BE

사이드 프로젝트 공유 플랫폼 with 커피챗 - BE. Contribute to SeonminKim1/SidePro-BE development by creating an account on GitHub.

github.com