무중단 배포
서비스를 중단하지 않고 배포하는 것
- 무중단 배포의 핵심은
로드밸런서(Load Balancer)
를 통해 연결된 두 개 이상의 (서로 다른 IP, 포트를 가진) 인스턴스에 트래픽을 제어해 배포하는 것이다. -
v1서비스가 실행중일 때, v2 서비스를 시작하려면 v1서비스가 중단되는
다운타임
이 생기고 나서 v2를 실행할 수 있기 때문에 애플리케이션이 일정 시간 중단된다. - 서버를 두 대로 늘려서 한 서버에서만 배포를 진행하면 되지 않을까?라는 의문점이 생긴다.
- 위 방식에는 두 가지 문제가 생길 수 있는데,
- (1) 사용자가 두 서버의 IP를 모두 알아야 한다.
- (2) 어떤 서버가 운영중인 IP인지 알 수 없다는 것이다.
무중단 배포 키워드
리버스 프록시
- 위의 두 가지 문제를 해결하기 위해 클라이언트와 서버 사이에 중계해줄 수 있는
리버스 프록시
가 필요하다. - 프록시: 클라이언트가 누군지 숨겨주는 역할. 서버에서는 클라이언트가 누구인지 식별할 수 없다.
- 리버스 프록시: 서버가 누군지 숨겨주는 역할. 클라이언트에서 서버가 누구인지 식별할 수 없다.
로드 밸런싱
- 로드 밸런싱: 하나의 서버에서 받아야 할 요청을 여러 서버로 분한하는 것
- Nginx는
리버스 프록시
역할과로드밸런싱
을 수행할 수 있는 가장 인기있는 웹 서버다.
배포 전략 3가지
1. Rolling
여러대의 서버가 있을 때 차례대로 서버를 한 대씩 구 버전에서 새 버전으로 교체해가는 전략이다.
- 서비스 중인 서버 한 대를 제외시키고 그 자리에 새 버전의 서버를 추가한다.
- 구 버전에서 새 버전으로 트래픽을 점진적으로 전환한다. 첫 번째 서버가 배포 중이라 역할을 못 할 때면 나머지 서버가 대신 부하를 감당하며 서비스를 지속한다.
- 서비스 중인 인스턴스 하나를 로드밸런서에서 라우팅하지 않도록 한 뒤, 새 버전을 적용하여 다시 라우팅하도록 한다.
Rolling 방식의 장점
- 서버의 수에 제약이 있을 경우 유용하다.
Rolling 방식의 단점
- 배포 중인 인스턴스의 수가 감소되므로 서버 처리 용량을 미리 고려해야 한다.
- 하나의 서버가 중단 되었을 때 나머지 서버의 부하량을 잘 파악해야한다. (한개 서버만 다운타임이 생겨도 모든 서비스가 마비가 되버릴 가능성도 있기 때문)
- 배포가 진행되는 동안 구버전과 신버전이 공존하기 때문에 호환성 문제가 발생할 수 있다.
2. Blue/Green
구 버전에서 새 버전으로 일제히 전환하는 전략이다.
- 구 버전의 서버와 새 버전의 서버들을 동시에 나란히 구성하고 배포 시점이 되면 트래픽을 일제히 전환시킨다.
Blue/Green 방식의 장점
- 하나의 버전만 프로덕션 되므로 버전 관리 문제를 방지할 수 있다.
- 빠른 롤백이 가능하다
- 운영 환경에 영향을 주지 않고 실제 서비스 환경으로 새 버전 테스트가 가능하다.
Blue/Green 방식의 단점
- 시스템 자원이 두 배로 필요하다.
- 전체 플랫폼에 대한 테스트가 진행되어야 한다.
3. Canary
카나리아 라는 새는 일산화탄소 및 유독가스에 민감한 특징을 가져, 과거에 광부들이 이 새를 광산에 데러가 옆에 두고 일하다가 카나리아가 갑자기 죽게 되면 대피를 했다고 한다.
위험을 빠르게 감지할 수 있는 배포 기법이다.
- 구 버전의 서버와 새 버전의 서버들을 구성하고 일부 트래픽을 새 버전으로 분산하여 오류 여부를 판단한다.
- 소프트웨어의 모니터링과 검증에 초점을 맞춘 배포 방식이다.
- 신버전의 배포 전에 실제 운영 환경에서 미리 테스트한다는 점이 블루-그린 배포와 비슷하다. 하지만 카나리 배포는 단계적인 전환 방식을 통해 부정적 영향을 최소화하고 상황에 따라 트래픽 양을 늘리거나 롤백할 수 있다.
Canary 방식의 장점
- A/B 테스트가 가능하다.
- 오류율 및 성능 모니터링에 유용하다.
- 트래픽을 분산시킬 라우팅은 랜덤으로 할 수도 있고, 사용자 프로필 등을 기반으로 분류할 수도 있다.
- 분산 후 결과에 따라 새 버전이 운영 환경을 대체할 수도 있고, 다시 구 버전으로 돌아갈 수도 있다.
Canary 방식의 단점
- 롤링 배포와 마찬가지로 신·구 두 버전이 운영되기 때문에 버전 관리가 필요하다.
reference
무중단 배포 아키텍처(Zero Downtime Deployment)- 글로벌 서비스 운영의 필수 요소 무중단 배포란? 무중단 배포를 위한 환경 이해하기
배포 전략: Rolling, Blue/Green, Canary