무중단 배포
무중단 배포란 사용자들이 서비스를 사용하는 데 아무런 지장 없이 배포를 진행하는 경우를 뜻한다.
현재 위치 배포
배포 방법
여러 대의 서버를 배포할 때 새롭게 서버를 생성하거나 줄이지 않고 배포하는 방법을 뜻한다.
만약 4대의 서버가 version1으로 서비스 중이라고 한다고 가정하자.
- 4대 중 2대의 인스턴스를 로드 밸런서에서 제외하여 요청을 보내지 않도록 한다.
- 요청을 받지 않는 인스턴스에 version2를 배포한다.
- version2가 배포된 서버를 다시 로드밸런서에 등록하고 version1을 서비스하는 서버를 다시 제외한다.
- 나머지 서버들도 version2를 배포하여 다시 로드 밸런서에 등록한다.
장점
- 새로운 인스턴스를 생성할 필요가 없어서 간단하고 빠르다.
단점
- 배포 중에 클라이언트 요청을 처리할 인스턴스 수가 줄어든다.
- 만약 요청량 처리에 무리가 있다면 여유 인스턴스를 추가한 뒤 배포하는 것이 안전하다.
- 서비스 중인 여러 인스턴스에서 한 인스턴스씩 배포하여 요청 처리량을 거의 줄이지 않는 방법도 있지만 시간이 오래 걸린다.
- 배포한 버전에 문제가 있는 경우 이전 버전으로 롤백해야 하는데 이전 버전으로 배포를 다시 진행해야 하므로 대응하는 데 시간이 오래 걸린다.
서버 단위의 블루/그린 배포
배포 방법
블루/그린 배포는 두 개의 그룹을 가지고 진행된다. version1이 블루 그룹에 존재하고 로드 밸런서에 의해 서비스 되고 있는 상황이다.
- 아무 서버도 없었던 그린 그룹에 블루 그룹과 똑같은 서버 인스턴스를 생성하여 version2를 배포한다.
- 배포가 완료되면 그린 그룹도 로드 밸런서에 등록하여 처리하게 한다.
- 로드 밸런서에서 블루 그룹을 제외해서 모든 요청을 그린 그룹이 처리하도로고 한다.
- 블루 그룹 내 모든 인스턴스를 종료하면 배포가 완료된다.
다음에 배포할 일이 있다면 블루 그룹에 새 버전을 배포하고 그린 그룹의 인스턴스를 종료하면 된다.
장점
- 구, 신버전이 동시에 떠 있는 시간을 매우 짧게 처리할 수 있다.
- 롤백을 빨리할 수 있다.
- 그린 그룹에 올린 신버전에 문제가 있을 경우 아직 종료시키지 않은 블루 그룹으로 재빨리 로드 밸런서가 등록하면 된다.
- 모니터링을 충분히 거친 뒤 문제가 없다고 판단되면 블루 그룹의 인스턴스를 모두 내리면 된다.
- 배포 과정에서 서비스되는 인스턴스 수가 줄지 않으므로 요청량을 처리하는 데 문제가 없다.
단점
현재 위치 배포와 블루/그린 배포는 구, 신버전이 함께 서비스되도 문제 없는 경우에만 사용 가능
서버 내 블루/그린 배포
Auto Scaling 그룹으로 여러 대의 인스턴스를 사용하는 경우가 아닌 적은 수(1, 2대)의 서버를 운영하는 경우에는 nginx와 같은 서버 내 웹 서버를 이용해 블루/그린 배포를 진행할 수도 있다.
서버 단위와 다른 점은 로드 밸런서가 아닌 웹서버를 이용해 각 포트로 라우팅하는 방식이다.
- version1을 서버 내의 10001번 포트를 리스닝하게 한다.
- version2 코드를 배포할 때 10002번 포트를 리스닝하도록 서비스한다.
- 웹 서버 설정을 변경해서 요청을 10001번이 아닌 10002번 포트로 전닳라도록 수정한다.
- 일정 시간 동안 모니터링한 후 10001번 포트를 리스닝하는 verson1 애플리케이션을 종료해서 배포가 끝난다.
장점
- 서버 단위와 마찬가지로 빠른 롤백이 가능하다.
유의할 점
유의할 점은 웹 서버를 재시작하면 안 된다. nginx에는 restart와 reload가 있는데 restart는 nginx를 종료하고 다시 실행하기 때문에 그동안 처리 중이거나 새로 들어온 요청은 모두 에러가 날 것이다.
reload 명령어로 새로운 프로세스를 생성하고 기존 프로세스는 더 이상 요청을 받지 않도록 처리하면 된다.