FrameWork/Spring Cloud

SpringBoot WarmUp

태윤2 2022. 6. 26. 09:37

MSA 환경에서 Docker Swarm 을 통해 올리는 프로젝트들은 healthy가 뜨더라도 서비스가 정상 가동하는데 몇번의 request(직접 접속해서 새로고침)가 필요하는것에 불편함을 느껴서 찾아본 방법입니다.
저희 서비스에서는 JWT 및 Security 이슈로인해 적용하지 못했으나 WarmUp을 해보시고 싶으시면 아래 3가지 방법을 통해 가능합니다!!!

  • Zuul
 

Spring Cloud Netflix

Service Discovery is one of the key tenets of a microservice based architecture. Trying to hand configure each client or some form of convention can be very difficult to do and can be very brittle. Eureka is the Netflix Service Discovery Server and Client.

cloud.spring.io

  • Zuul 은 내부적으로 원격 URL을 호출하기 위해 Ribbon을 사용하며 Ribbon클라이언트는 첫 번쨰 호출 시 Spring Cloud에 의해 지연 로드되기때문에 gateway/application.yml에거 zuul 로딩 설정을 eager-load로 변경
  • Spring Cloud 최신버전은 Zuul이 아닌 gateway를 사용하기 때문에 본인 Spring Cloud 버전및 사용하는 게이트웨이를 확인 후 사용하시면 됩니다
  • JVM
 

How to Warm Up the JVM | Baeldung

Learn what it means to warm up a JVM and how to do it.

www.baeldung.com

  • Bootstrap Class Loading : Java 코드와 java.lang.Object 와 같은 필수 클래스를 메모리에 로드함
  • Extension Class Loading : java.ext.dirs 경로에 있는 모든 JAR 파일을 로드함(개발자가 수동으로 JAR을 추가하는 경우)
  • Application Class Loading : 애플리케이션 클래스 경로에 있는 모든 클래스를 로드함
  • 이때 중요한 것은 이러한 초기화 프로세스가 지연 로딩(LAZY LOADING) 방식을 기반으로 한다는 것이다.
  • 클래스 로딩이 완료되면 모든 중요한 클래스(프로세스 시작 시 사용)가 JVM 캐시(네이티브 코드)로 푸시되어 런타임 중에 더 빠르게 엑세스할 수 있다(per-request basis).
  • Java 기반 웹 애플리케이션의 첫 번째 요청의 응답이 평균 응답 시간 보다 훨씬 느린 이유는 JVM 아키텍처가 지연 클래스 로딩과 JIT 컴파일로 이루어져 있기 때문이다.
  • Ribbon Config
  •  Spring Warm UP
    • RestTemplate 클래스를 통해 직접 애플리케이션에 Http요청을 보내는 방법을 통해 필요한 클래스들을 메모리에 캐싱해 애플리에키션을 Warm Up 하기.