From 1813873df195f827984cc4d39fe63d367c25c1b4 Mon Sep 17 00:00:00 2001 From: syoung125 Date: Sat, 15 Jun 2024 23:41:18 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20:memo:=20=EB=AC=B4=EC=A4=91=EB=8B=A8(Ze?= =?UTF-8?q?ro=20Downtime)=20=EB=B0=B0=ED=8F=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blog/4. etc/2024-06-15-zero-downtime.md | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 contents/blog/4. etc/2024-06-15-zero-downtime.md diff --git a/contents/blog/4. etc/2024-06-15-zero-downtime.md b/contents/blog/4. etc/2024-06-15-zero-downtime.md new file mode 100644 index 0000000..5cdcff3 --- /dev/null +++ b/contents/blog/4. etc/2024-06-15-zero-downtime.md @@ -0,0 +1,63 @@ +--- +title: "무중단(Zero Downtime) 배포" +date: "2024.06.15" +tags: + - infra +--- + +## 무중단 배포란? + +- 운영중인 서비스를 중단하지 않고 신규 소프트웨어를 배포하는 기술을 말한다. +- 즉, 서비스를 배포할 때 다운타임이 발생하지 않도록 함 + +## 어떻게? + +- 핵심은 로드밸런서를 통해 연결된 두 개 이상의 (서로다른 IP, 포트를 가진) 인스턴스에 *트래픽을 제어해 배포*하는 것! +- 따라서 고가용성의 시스템 인프라가 구축되어 있어야 한다. + +## 종류 + +- 무중단 배포 종류에는 크게 3가지가 있 + 1. 롤링 배포 + 2. 블루-그린 배포 + 3. 카나리 배포 + +### 1. 롤링배포 + +- **서버를 새 버전으로 점진적으로 교체**하는 방식 +- 만약 서버가 3개가 있다면? (s1, s2, s3) + 1. s1을 로드밸런서에서 라우팅하지 않도록 한 뒤 -> s1을 새버전으로 교체 -> 다시 라우팅 적용 + 2. 다음으로 s2도 동일하게 라우팅하지 않게 하고 -> s2를 새버전으로 교체 -> 다시 라우팅 적용 + 3. 마지막으로 s3도 동일한방식으로 새버전으로 교체 +- 특징 + - 배포를 하는 동안 **서버의 개수가 동일**하다 + - 따라서 가용자원(인스턴스)이 제한적일 경우 사용된다 + - 서버 한대를 신버전으로 교체하는 동안 일시적으로 서버 개수가 줄어들게 되므로 서비스 처리 용량을 고려해야한다. + - 인스턴스를 한번에가 아닌 차례로 배포하므로 손쉽게 롤백할 수 있다. + - 반면, 배포가 진행되는 동안 구버전과 신버전이 공존하므로 이로인한 호환성 문제가 발생할 수 있다. + +### 2. 블루-그린 배포 + +- 블루가 구버전, 그린이 신버전으로 지칭 +- **운영 환경에 구버전과 동일하게 신버전 인스턴스를 구성**하고 로드밸런서를 통해 신버전으로 모든 트래픽을 전환하는 배포 방식! +- 특징 + - 배포 하는 동안은 **자원이 두배**가 됨 + - 구버전과 동일한 운영 환경으로 신버전의 인스턴스를 구성하기 때문에 실제 서비스 환경에서 신버전을 미리 테스트 할 수 있는 장점이 있다. + - 롤링 배포와 마찬가지로 빠른 롤백 가능 + - 배포가 완료된 후 남아 있는 기존 버전의 환경을 다음 배포에 **재사용**할 수 있다. + +### 3. 카나리 배포 + +- 옛날 광부들이 유독 가스에 민감한 카나리아 새를 이용해 가스 누출 위험을 감지했던 것에서 유래 +- 예를들어 20%의 팟만 신버전으로 돌리고 모니터링 후 문제가 없다면 이 후 전체배포를 하는 방식 + - 잠재적 문제 상황을 미리 발견할 수 있다! + - 신버전의 제공 범위를 늘려가면서 모니터링 및 피드백 과정을 거칠 수 있다 +- 특징 + - 로드밸런서를 통해 신버전의 제품을 경험하는 사용자를 조절할 수 있음 + - 특정사용자 (Ex. 모바일 이용자) 또는 단순 비율에 따라 구분해 제공할 수도 있음 + - 롤링 배포와 마찬가지로 신·구 두 버전이 운영되기 때문에 버전 관리가 필요하다 + - 신버전의 배포 전에 실제 운영 환경에서 미리 테스트한다는 점이 블루-그린과 비슷하나, 카나리 배포는 좀 더 단계적으로 전환하는 방식을 통해 부정적 영향을 최소화하고, 상황에 따라 트래픽 양을 늘리거나 롤백할 수 있음 + +### Refs + +- [무중단 배포 아키텍처(Zero Downtime Deployment)- 글로벌 서비스 운영의 필수 요소](https://www.samsungsds.com/kr/insights/1256264_4627.html)