무중단 배포 환경 이해


무중단 배포란?

무중단 배포란 배포를 중단 없이 진행한다는 의미다.

배포란 개발환경에서 개발된 코드를 패키징하여

서버에서 새로운 버전의 애플리케이션을 실행하도록 하는 것을 의미한다.


무중단배포


이전 버전 애플리케이션을 종료시키고 새로운 버전 애플리케이션을 실행하고 새로운 버전 애플리케이션이 요청을 받을 준비가 될 때까지 서비스가 중단된다.

서비스가 중단되는 시간을 다운타임이라고 한다.


Q. 새로운 버전의 애플리케이션을 배포하기 전에 예전 버전의 애플리케이션을 중단시키는 이유는?

A. 같은 포트를 사용하기 때문이다.

하나의 서버에서 하나의 포트를 동시에 서로 다른 애플리케이션이 사용하는 것은 불가능하다.


Q. 그렇다면 서버를 두 개로 늘리면 어떻게 될까?

A. 서버가 두 개가 되면 사용자는 두 서버 모두의 IP 혹은 도메인 주소를 알아야 한다.

그리고 두 서버중 어떤 서버가 배포되고 있는지 알 방법이 없다.


그렇다면 결론은 애플리케이션 서버와 사용자 사이에 중계 해줄 서버가 필요하다.



리버스 프록시

ㅁ


위 그림에서 애플리케이션 서버와 사용자 사이에서 요청을 중계해주는 서버를

리버스 프록시(reverse proxy) 라고 한다.


클라이언트는 애플리케이션 서버를 모르기 때문에

리버스 프록시로 서버를 분산하면서 트래픽도 분산할 수 있게 되었다.

이렇게 트래픽을 분산하여 각 서버가 받는 부하를 분산하는 것을 로드밸런싱(Load balancing) 이라고 한다.

로드밸런싱에 대해서는 다음 게시글에서 자세히 알아보고

우선 여러가지 배포 방식에 대해 알아보자.



배포 방식

1) 롤링 (Rolling)

일반적인 배포 방식이다.

이전 버전에서 새로운 버전으로 트래픽을 점진적으로 전환하는 배포 방식으로

관리가 편하지만 배포 중 한쪽 인스턴스의 수가 감소되므로 서버 처리 용량을 미리 고려해야 한다.



2) 블루 그린 (Blue Green)

이전 버전을 블루, 새로운 버전을 그린이라고 한다.

새로운 버전을 배포하고 한번에 전환하여 모든 연결을 새로운 버전으로 바라보게 하는 전략이다.

동시에 나란히 구성하여 배포 시점에 트래픽이 일제히 전환된다.

빠른 롤백이 가능하고 운영환경에 영향을 주지 않고

실제 서비스 환경으로 테스트가 가능하다.

단 시스템 자원이 두배로 필요하기 때문에 비용이 많이 발생한다.



3) 카나리 (Canary)

지정한 서버 또는 특정 유저에게만 배포했다가 정상적이면 전체를 배포한다.

서버의 트래픽 일부를 새로운 버전으로 분산하여 오류 여부를 확인할 수 있다.

이런 전략은 A/B 테스트가 가능하며, 성능 모니터링에 유용하다.

트래픽을 분산시킬 때는 라우팅을 랜덤 하게 할 수 있고

사용자로 분류할 수도 있다.



트래픽이 많아지면?

트래픽이 많아지면 위에서 본 로드밸런싱만으로 충분하지 않다.

결국 서버 자원을 사용해서 동작하는 애플리케이션이기 때문에 다음과 같은 방법도 고려해봐야 한다.


위 방법 외에도 여러 방법이 있겠지만

중요한 것은 어떤 부분이 병목인지 확인하는 것이다.



참고