무중단 배포 왜 해야할까?
- 현재 운영중인, 서비스의 신 기능 추가로 인해 버전이 업그레이드 되고 새로운 파일을 배포해야할 때, 다운 타임이 발생하게 됩니다
- 다운타임이 발생하는 배포 방식을 중단 배포라고 하며, 이 시간동안은 유저가 서비스를 이용할 수 없기에 유저에게 지속적으로 서비스를 제공하기 위해 무중단 배포 방식을 고려해봐야 합니다
무중단 배포
- 무중단 배포는 서비스가 중단되지 않은 상태(zero-downtime)로, 새로운 버전을 사용자들에게 배포하는 것을 의미합니다
- 무중단 배포를 하기 위해서는 최소 서버가 2대 이상 확보되어야 합니다.
무중단 배포의 종류
롤링(Rolling) 배포
- 현재 운영중인 서비스의 트래픽을 점진적으로 구버전에서 새로운 버전으로 옮기는 방식 입니다.
- 점진적으로 트래픽을 옮기는 방식은 크게 2가지 방식이 있습니다
방식 1
- 인스턴스를 하나 추가하고, 새로운 버전을 실행한다.
- 로드 밸런서에 새로운 인스턴스를 연결하고, 기존 구버전 어플리케이션이 실행되는 인스턴스를 하나 줄인다
- 그 후, 나머지 인스턴스도 버전을 변경한다
- 서버 개수를 유연하게 조절할 수 있는 클라우드 기반 환경에 적합할 것 같다.
방식 2
- V1이 실행되고 있는 서버 하나를 로드밸런서에서 떼어낸다.
- 이 상태에서 해당 서버의 어플리케이션을 V2로 교체한다
- 이 과정을 반복해 모든 서버를 새 버전으로 교체한다
방식2의 경우 클라우드 환경이 아닌, 온프레미스 환경에서도 사용할 수 있을것이다
롤링 방식의 장점
- 롤링 배포 방식은 k8s, elastic beanstalk와 같은 많은 오케스트레이션 도구에서 지원하여 간편하게 구축할 수 있다.
- 많은 서버 자원을 확보하지 않아도 무중단 배포가 가능하다
롤링 방식의 단점
- 방식 2와 같은 경우, 배포 도중 서비스 중인 인스턴스 수가 줄어들게 되므로 그에 따른 서버가 부담하는 트래픽의 양이 늘어 날 수 있기에 주의해야 한다
- 또한 구버전과 신버전의 어플리케이션이 동시에 서비스되기 때문에 호환성 문제가 발생할 수 있다.
Blue/Green 배포
- 트래픽을 한번에 구버전에서 신버전으로 옮기는 방법이다.
- 현재 운영중인 서비스의 환경을 Blue라고 부르고, 새롭게 배포할 환경을 Green이라 부른다.
배포 진행 방식
- Blue와 Green 환경을 동시에 구성해둔다.
- 배포 시점에 로드 밸런서가 트래픽을 Blue에서 Green으로 일제히 전환 시킨다.
- Green버전 배포가 성공적으로 완료 되었고, 문제가 없다고 판단시 Blue 서버를 제거할 수 있다
혹은 다음 배포를 위해 유지해둘 수도 있다.
Blue/Green 방식의 장점
- 롤링 배포와 달리 한번에 새로운 버전으로 옮기기 때문에 호환성 문제가 발생하지 않는다.
Blue/Green 방식의 단점
- Blue Green 환경을 구성해야 하기에, 실제 운영에 필요한 서버 리소스 대비 2배의 리소스를 확보해야한다.
- 클라우드 환경에서는 필요없는 인스턴스를 제거하거나, 배포가 완료된 Blue환경을 제거하면 되지만
온프레미스 방식이라면 운영비용 부담이 클 수도 있다.
- 클라우드 환경에서는 필요없는 인스턴스를 제거하거나, 배포가 완료된 Blue환경을 제거하면 되지만
카나리(Canary) 배포
- 카나리는 롤링 배포 방식과 비슷하지만, 새로운 버전에 대한 오류를 조기에 감지하는 것이 다르다
카나리 배포 방식
- 소수 인원에 대해서만 트래픽을 새로운 버전에 옮겨둔 상태에서 서비스를 운영한다
- 새로운 버전에 이상이 없다고 판단하였을 경우에만 모든 트래픽을 신규 버전으로 옮긴다
- 이때, 트래픽을 새로운 버전으로 옮기는 기준은 정해진 규칙(특정 유저 등)혹은 랜덤이다.
카나리 배포방식의 장점
- 새로운 버전으로 인한 위험을 최소화 할 수 있다.
- 소수 인원에 대해서만 트래픽을 옮기는 특성으로 인해 A/B 테스트를 진행하기에도 적합한 방식이다.
카나리 배포방식의 단점
- 롤링 배포와마찬가지로 신/구 버전의 애플리케이션이 동시에 존재하므로 호환성 문제가 발생할 수 있다.
참고
'프로그래밍 > Infra' 카테고리의 다른 글
서버 확장 전략 어떤걸 선택해야 할까? (0) | 2022.12.28 |
---|