배포란 릴리즈된 애플리케이션을 사용자가 사용할 수 있는 상태로 만드는 것이다.
AWS의 Codebuild, Codedeploy, Codepipeline을 사용하여 s3에 정적 호스팅을 해보았고, node.js로 작성한 서버 애플리케이션을 ec2에서 자동으로 배포하는 실습을 진행하였다.
현업에서 무중단으로 배포하는 방식으로 3가지가 있다고 한다.
무엇인지 알아보자!
블루/그린 배포
- 정의
- 애플리케이션 또는 마이크로서비스의 이전 버전에 있던 사용자 트래픽을 이전 버전과 거의 동일한 새 버전으로 점진적으로 이전하는 애플리케이션 릴리스 모델이다. 이때 두 버전 모두 프로덕션 환경에서 실행 상태를 유지한다.
- 필요한 이유?
- 무중단 배포와 지속적인 전달로 사용자 경험을 향상하기 위해, 다운 타임(시스템을 이용할 수 없는 시간)을 최소화해야 한다. 블루/그린 배포는 동일한 두 가지 프로덕션 환경을 확보함으로써 이를 실현할 수 있다.
- 방식
- blue는 이전버전, green은 새 버전을 의미하고, 동일한 프로덕션 환경에서 릴리즈 된다. green 환경에서 테스트를 수행한다.
- 테스트에 성공하면 기존 blue 환경으로 가던 트래픽을 모두 green 환경으로 리다이렉션한다.
- 이후 blue 환경을 바로 삭제하지 않고, 문제 상황 발생 시 롤백을 위한 백업 서버로 남겨둔다.
- 블루/그린 배포는 기존 배포의 어떠한 문제점을 해결해 줄까?
- 기존 배포 방식을 살펴보기 위해, 신버전 업데이트를 하는 게임 회사를 예로 들어보자. 플레이 중인 사용자수가 가장 적은 자정이 될 때까지 기다렸다가 프로덕션 환경으로 업데이트를 푸시하는 방법을 사용한다. 어쩔 수 없이 다운타임이 발생한다.
- 그러나 블루/그린 배포 모델을 사용하면, 앱 사용량이 가장 많은 시점에 업데이트를 진행할 수 있다. 그리고 더욱이 제로 다운타임을 목표로 할 수 있다.
- 장점
- 가동 중단 시기 최소화
- 백업 서버의 존재로 롤백이 쉬움
- blue서버를 다음 배포를 위한 최종 테스트 단계의 스테이징 환경으로 사용 가능
- 스테이징 환경이란, 운영 환경과 거의 동일한 환경을 만들어 놓고, 운영 환경으로 이전하기 전에 보안, 성능, 장애 등을 검증하는 환경을 말한다.
롤링 배포
- 정의
- 애플리케이션이 실행 중인 인프라를 완전히 교체하여 이전 버전의 애플리케이션을 새로운 버전의 애플리케이션으로 서서히 교체하는 배포 전략이다. 이는 가용 자원이 제한적일 경우 사용된다.
- 필요한 이유?
- 무중단으로 업데이트할 수 있기 때문이다.
- 방식
- 기존 인스턴스를 점진적으로 새로운 버전으로 서서히 교체한다.
- 장점
- 업데이트 과정에서 문제가 발생하면, 롤링 배포 과정을 "거꾸로" 실행하여 새 버전의 앱을 제거하고, 이전 버전을 다시 시작할 수 있다.
- 제로 다운타임
- 단점
- 구버전과 신버전이 공존하기에 호환성 문제가 발생할 수 있음.
- 배포 중인 서버는 서비스 중단 상태이므로, 서버 부하량을 체크하며 배포해야 함.
- 쿠버 네티스를 활용한 롤링 배포 예시
카나리 배포(Canary Deployment)
- 정의
- 전체 인프라에 새로운 소프트웨어 버전을 릴리스하여 모든 사용자가 사용할 수 있도록 하기 전에 변경 사항을 천천히 릴리스함으로써 프로덕션 환경에 새로운 소프트웨어 버전을 도입하는 기술이다.
- 방식
- 특정 서버에만 배포를 진행하여 오류 여부 확인 및 사용자 경험 테스트를 진행할 수 있다.
- 새로운 버전이 문제가 없음이 확인되면 단계적으로 배포한다.
- 장점
- A/B 테스트 가능
- 사용자의 활동을 모니터링하여 더 좋은 방안을 반영할 수 있음.
- 서버의 수용능력 테스트
- 프로덕션 환경에서는 서버의 수용능력을 테스트할 수 없다. 그러나 작은 카나리 서버에서는 각 인스턴스가 얼마큼 사용자들을 수용할 수 있는지 테스트할 수 있다. 이 테스트는 카나리 서버에 내장되어 있다.
- 사용자의 피드백을 받을 수 있음
- cold-start가 없다!
- 새로운 서버가 만들어지고 처음 작동하면 cold-start라는 느리게 작동하는 게 있다. 카나리 배포는 그것을 막는다.
- 다운타임 없음
- 롤백이 쉽다. 카나리서버를 없애면 된다.
- A/B 테스트 가능
- 카나리 배포와 블루/그린 배포의 차이는 뭘까?
- 블루/그린 배포는 많은 컴퓨팅 자원이 필요하여, 각 릴리즈마다 주요 업데이트가 포함된 애플리케이션에 알맞다.
- 카나리 배포는 빠르게 업데이트되는 애플리케이션에 알맞다.
- 또한 카나리 배포는 롤링 배포가 가용 영역이 부족하여 실행하지 못했을 경우에도 사용하기 좋다.
각각의 차이점
앞서 소개한 3가지 무중단 배포는 각각의 장점과 단점이 있다. 상황에 맞게 사용하는 것이 중요해 보인다.
따라서 차이점을 바탕으로 어떤 곳에 쓰이면 좋을지 상황을 알아봐야겠다.
- 롤링 배포
- 좋은 상황
- 서버 몇 개가 업데이트 중일 때도 다른 서버가 트래픽을 충분히 감당할 수 있을 만큼의 호스팅 능력이 되는 IT회사가 사용하기 좋은 방법이다.
- 딱히 변경사항이 없을 때(small changes) 사용하기 좋은 방법이다.
- 간단한 웹 앱을 배포하기 좋다.
- 나쁜 상황
- 기능적으로 큰 변경사항이 있을 때(major changes) 안 좋다. 왜냐하면 점진적으로 업데이트하는 과정에서 어떤 사용자는 구버전을 사용하고 다른 사용자는 신버전을 사용하게 되면, 사용자들 사이에 차이가 발생하게 되고 호환성 문제로 이어지기 쉽기 때문이다.
- 좋은 상황
- 블루/그린 배포
- 좋은 상황
- 새로 릴리스할 버전의 애플리케이션을 프로덕션 환경에서 미리 테스트해볼 수 있다.
- 모든 사용자들을 한꺼번에 새로운 버전으로 리다이렉션 할 수 있다.
- SaaS 애플리케이션 배포할 때 좋다.
- 나쁜 상황
- 두 개의 동일한 호스팅 환경을 만드는 것이므로 비용이 많이 든다.
- 작은 프로젝트이거나, 비용이 한정되어 있을 경우 다른 방법을 찾아보자.
- 좋은 상황
- 카나리 배포
- 좋은 상황
- 새로운 기능에 관심이 많고, 버그의 위험을 기꺼이 감수하고자 하는 사용자들이 많을 경우 카나리 배포가 효과적이다.
- 호스팅 환경을 따로 만들 필요가 없기에 비용이 적게 든다.
- 스타트업이나 예산이 빠듯한 회사들이 프로젝트를 업데이트하기 좋다.
- 좋은 상황
참고
Blue Green배포의 개념, DevOps 개념과 관계, 작동 방식, 특징
Blue Green 배포란 애플리케이션 또는 마이크로서비스의 이전 버전의 트래픽을 새 버전으로 옮기는 애플리케이션 릴리스 모델이며, 두 버전이 프로덕션에서 실행됩니다.
www.redhat.com
[Kubernetes] Rolling Update (Deployment): 무중단 배포
무중단 배포란? 이전에 컨트롤러 포스팅에서 Deployment Controller를 이용한 배포에 관해 잠시 설명을 했었습니다. 이번 포스팅에서는 쿠버네티스의 다양한 배포 방식과 그리고 무중단 배포에 관해
ooeunz.tistory.com
What Is Canary Deployment? - Semaphore
Learn how canary deployment can help you do controlled trials with real users. And what if you combine it with a fast CI/CD workflow?
semaphoreci.com
When to use canary vs. blue/green vs. rolling deployment
IT organizations must compare rolling updates vs. canary deployment vs. blue/green switchovers based on two main factors. See the use cases for these deployment strategies to make the best choice for an application.
www.techtarget.com
'배포자동화' 카테고리의 다른 글
[AWS]no identity-based policy allows the ecs:RegisterTaskDefinition action 에러 (0) | 2022.04.03 |
---|---|
[AWS]Unable to access the artifact with Amazon S3 object key에러 (0) | 2022.04.03 |