무중단 배포란?
배포 중인 서비스의 변경사항 적용시 서비스가 중단되는 현상 없이 이루어지게 작업하는 방법
무중단 배포 방법엔 크게 3가지 방법이 있다.
1. 롤링 배포
2. Blue/Green 배포
3. 카나리 배포
롤링(Rolling) 배포
롤링 배포는 사용중인 인스턴스 들을 새 버전으로 점진적으로 교체하는 방식.
EX) 서비스 중인 인스턴스 하나를 Loadbalancer에서 제외시키고, 새 버전으로 적용 및 순차적으로 적용함
장점
인스턴스를 차례대로 전환하기 때문에 배포중 문제가 생기더라도 Rollback 등으로 대응 가능
단점
새 버전 전환 중 실 서비스에 대응되는 인스턴스 수가 감소하기 때문에 트래픽이 몰릴 수 있음
서비스 처리 용량에 대한 고려 필요
배포 진행 간 구/신 버전 공존으로 인한 호환성 문제 발생 가능
Blue/Green 배포
신버전에 대한 준비를 완료 후에 모든 트래픽(LoadBalancer)을 구(Blue) => 신(Green) 버전으로 전환하는 배포 방식
장점
신 버전에 대해 미리 테스트 완료 후 구 버전과 변경이 가능하다
신 버전 배포가 진행되는 동안 서버 과부하가 일어날 확률이 적다
단점
시스템 자원이 2배가 필요하여 비용 문제가 있을 수 있어 소규모 프로젝트에 적용하긴 어렵다.
카나리(Canary Release) 배포
카나리 배포 전략은 다른 배포 전략보다 사전에 위험을 빠르게 감지할 수 있는 방법으로, 구 버전과 신 버전의 비율을 조절하면서, 서서히 바꿔나가는 방식이다.
장점
신 버전을 일부 사용자에게만 제공하여, 모니터링/피드백 등의 과정을 거칠 수 있음
신 버전 전환 이전에 실제 운영 환경 테스트를 통해 오류 발생 최소화 가능
Rolling 배포와 달리 Traffic이 몰릴 우려는 없음
단점
배포 진행 간 구/신 버전 공존으로 인한 호환성 문제 발생 가능
(경험) 무중단 배포 선택 과정
문제 발생
실 서비스 오픈 후 사용자에게 피드백을 받으며, 실시간으로 수정이 반영되어야 하는 Hotfix 경우 발생
EC2 단일 서버로 서비스를 대응하였고, 따로 LoadBalancer는 없는 상황
GitAction을 통한 재빌드 및 재배포 과정에서 서비스 공백 시간 발생
문제 해결 방법
- 무중단 배포 전략 중 Rolling 방법은 LoadBalancer가 없어 불가 => Blue/Green 방법 선택
- Dev Branch로 추가 개발 및 최종 테스트용 EC2 배포 서버 증설
- 기존 배포 전략 : Main(개발, local)⇒ Publish (서비스, 배포O)
- 수정 후 배포 전략 : Main(개발, local) ⇒ Development (개발, 배포O) ⇒ Publish (서비스, 배포O)
- Dev Branch에서 최종 완료 확인 후 Publish 로 배포
- 일제히 교체 하는 방식으로 서비스 중단 시간 최소화
'DevOps > CI-CD' 카테고리의 다른 글
[브랜치 전략] Git hub flow, Git flow 워크플로우 비교 (1) | 2023.09.01 |
---|---|
[Jenkins] Jenkins Pipeline 슬랙 연동 (with. 선언형, 스크립트형) (0) | 2023.08.31 |
[Jenkins] Jenkins 란? (with. docker) (0) | 2023.08.30 |
[CI & CD] Github Action 정리 (0) | 2022.07.12 |