일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- CSS
- 파이썬
- 리액트
- 백엔드
- node.js
- es6
- 컴퓨터공학
- 자바스크립트
- 솔리디티
- 이슈
- 프론트엔드
- 웹
- AWS
- HTML
- 알고리즘
- 가상화
- react
- BFS
- 쿠버네티스
- next.js
- 백준
- JavaScript
- kubernetes
- docker
- 클라우드
- 블록체인
- TypeScript
- 타입스크립트
- k8s
- 이더리움
- Today
- Total
즐겁게, 코드
서비스 가용성을 위한 무중단 배포와 전략 알아보기 본문
온라인 게임을 해보신 분들이라면 한번쯤은 패치로 인해 게임 접속이 불가한 경험을 해보셨을 텐데요, 이렇게 패치로 인해 서비스 이용이 중단되는 것을 반기는 유저는 거의 없을 것입니다.
24시간 운영이 필요한 데이터베이스나 글로벌 서비스 등을배포할 때는 서비스가 중단되면 운영에 부정적인 영향을 미칠 수 있는데요, 신규 버전 배포로 인한 부정적인 영향을 최소화하기 위한 방법이 바로 무중단 배포입니다.
무중단 배포의 핵심은 둘 이상의 인스턴스를 운영하면서 로드밸런서를 통해 인스턴스로 전해지는 요청을 적절히 제어 하는것으로, 이번 글에서는 상황에 따라 사용할 수 있는 3가지 무중단 배포 전략을 알아보도록 하겠습니다.
Rolling 배포 전략
롤링(Rolling) 배포는 인스턴스를 한 대씩 새로운 버전으로 교체하는 전략입니다.
서비스 중인 인스턴스 하나를 제외하고 새로운 버전을 배포한 다음, 배포가 완료되면 새로운 버전을 추가합니다.
롤링 배포 전략은 배포를 위한 추가적인 인스턴스를 필요로 하지 않기 때문에 자원의 제약이 있는 경우에 유용합니다.
하지만 Step 2 와 Step 4의 그림을 보면 알 수 있듯 배포가 진행 중인 인스턴스와의 연결이 끊어짐으로써 처리량이 부족해질 수 있어 서버의 처리 성능을 고려해야만 하고, Step 3 에서처럼 구버전과 새로운 버전이 공존하는 시점이 존재해 호환성 문제가 발생할 수 있는 문제가 존재합니다.
Blue-Green 배포
Blue-Green 배포는 신버전을 새로운 인스턴스에 배포해 두고, 배포 일정이 되면 이전 버전의 트래픽을 새로운 버전으로 일제히 전환하는 전략입니다.
✅ 구버전을 Blue, 신버전을 Green으로 칭합니다.
Blue-Green 전략은 신버전 배포 초기에 문제가 생길 시 구버전으로 쉽게 롤백할 수도 있고, 신버전 서비스를 배포 이전에 테스트해볼 수 있다는 장점이 존재하지만 배포 시 인스턴스 등의 시스템 자원을 두 배로 필요로 한다는 단점이 존재합니다.
Canary 배포
카나리(Canary) 배포는 옛날 광부들이 가스에 민감한 카나리아(Canary) 새를 이용해 가스 누출 위험을 감지했던 것에서 유래한 단어로, 서비스를 본격적으로 운영하기 전에 문제를 발견하기 위한 전략입니다.
카나리 전략에서는 구버전과 신버전에 트래픽을 분산하고, 신버전으로 들어가는 트래픽의 양을 서서히 늘려 나가며 모니터링 및 피드백을 통해 최종 배포 결과를 결정합니다.
카나리 전략은 사용자 경험을 비교하는 A/B 테스팅에도 활용할 수 있고, Blue-Green 전략처럼 실제 운영 환경에서 신버전을 테스트할 수 있다는 장점이 있습니다.
다만 Step 1 과 Step 2에서 볼 수 있듯 두 버전이 비교적 오랜 시간동안 혼재하게 된다는 문제가 있어 버전 관리가 필요합니다.
(※ 개인적인 의견으로는 카나리 배포 전략은 크리티컬한 백엔드보다는 프론트엔드 배포에 효과적일 것 같습니다.)
참고
'⚡️ DevOps > CI & CD' 카테고리의 다른 글
Github Action과 함께 알고리즘 풀이 저장 자동화하기 (0) | 2022.05.06 |
---|