Nginx를 이용해서 무중단 서비스 만들기

CD란?

  • Continuous Deployment
  • 지속적인 배포

무중단 서비스가 필요한 이유

  • Travis CI를 이용하여 배포 자동화 환경을 구축했다.
  • 하지만 배포하는 동안 애플리케이션이 종료된다는 문제가 발생한다.
  • 새로운 Jar가 실행되기 전까진 기존 Jar를 종료시켜 놓기 때문에 서비스가 중단 된다.

무중단 배포 방식

  1. AWS에서 블루 그린 무중단 배포 (비용 발생)
  2. 도커를 이용한 웹서비스 무중단 배포
  3. L4스위치 이용 (고가의 장비)
  4. Nginx를 이용

    우리는 Nginx를 이용한다. 왜냐하면 가장 저렴하고 쉽기 때문이다.

Nginx 리버스 프록시

  • Nginx가 외부의 요청을 받아 백앤드 서버로 요청을 전달 하는 행위
  • 리버스 프록시 서버(Nginx)는 요청을 전달하고, 실제 요청에 대한 처리는 뒷단의 웹 애플리케이션 서버들이 처리한다.

구조

리버스 프록시

1개의 EC2 혹은 리눅스 서버 + Nginx 1대 + spring boot Jar 2대

  1. 사용자는 서비스 주소로 접속한다(80 혹은 443포트)
  2. 엔진엑스는 사용자의 요청을 받아 현재 연결된 스프링 부트로 요청을 전달한다.
    • 스프링 부트1 즉, 8081 포트로 요청을 전달
  3. 스프링부트2는 엔진엑스와 연결된 상태가 아니므로 요청받지 못한다.

신규 배포가 필요하다면,

  1. Nginx와 연결되지 않은 스프링 부트2에 배포한다.
    • 배포 중에도 서비스는 중단되지 않는다. Nginx가 스프링 부트1과 연결되어있기 때문.
  2. 배포가 끝나고 스프링 부트2가 구동 중인지 확인한다.
  3. 스프링 부트2가 정상 구동 중이면 nginx reload명령을 통해 8081대신 8082를 보도록한다 (0.1초 이내로 완료된다.)

무중단 배포2

무중단 배포 전체 구조

무중단 배포 전체

Tags: ,

Categories:

Updated: