[SPRING] Spring Cloud Eureka 서버 자체 보존 및 갱신 임계 값 이해
SPRINGSpring Cloud Eureka 서버 자체 보존 및 갱신 임계 값 이해
필자는 잠시 동안 스프링의 문서와 넷플릭스 (Netflix)를 모두 읽음으로써 마이크로 서비스 개발에 익숙하지 않습니다.
Github에서 사용할 수있는 간단한 프로젝트를 시작했습니다. 그것은 기본적으로 유레카 서버 (Archimedes)와 3 개의 유레카 클라이언트 마이크로 서비스 (하나의 공용 API와 두 개의 개인)입니다. 자세한 설명은 github의 readme를 확인하십시오.
요점은 모든 것이 실행 중일 때 개인용 마이크로 서비스 중 하나가 종료되면 유레카 서버가 실현되어 레지스트리에서 제거된다는 것입니다.
나는이 질문을 Stackoverflow에서 발견했으며, 솔루션은 enableSelfPreservation을 사용하여 패스합니다 : 유레카 서버 설정에서 false. 잠시 후에 죽인 서비스가 예상대로 사라집니다.
그러나 나는 다음 메시지를 볼 수있다.
1. 자기 보존의 목적은 무엇입니까? 의사는 "클라이언트가 더 이상 존재하지 않는 인스턴스를 얻을 수 있음"에 대한 자체 보존과 함께 말합니다. 언제부터 켜고 끄는 것이 좋습니까?
또한 자체 보존 기능이 켜지면 유레카 서버 콘솔에 다음과 같은 경고 메시지가 나타날 수 있습니다.
자, 스프링 유레카 콘솔을 계속 사용하십시오.
Lease expiration enabled true/false
Renews threshold 5
Renews (last min) 4
임계 값 수의 이상한 행동을 보았습니다. 유레카 서버를 단독으로 시작하면 임계 값은 1입니다.
2. 유레카 서버가 하나 뿐이며 registerWithEureka : false로 구성되어 다른 서버에 등록하지 못하도록합니다. 그런 다음 왜 임계 값에 표시됩니까?
3. 시작한 모든 클라이언트에 대해 임계 값 수가 +2 증가합니다. 그들이 최소 2 분마다 메시지를 갱신하기 때문에 그것이 맞습니까?
4. Eureka 서버는 갱신을 보내지 않으므로 마지막 최소 갱신은 항상 임계 값 이하입니다. 이게 정상인가?
renew threshold 5
rewnews last min: (client1) +2 + (client2) +2 -> 4
서버 cfg :
server:
port: ${PORT:8761}
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
server:
enableSelfPreservation: false
# waitTimeInMsWhenSyncEmpty: 0
고객 1 cfg :
spring:
application:
name: random-image-microservice
server:
port: 9999
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
healthcheck:
enabled: true
해결법
-
==============================
1.나는 @codependent와 같은 질문을 받았는데, 나는 많이 봤고 몇 가지 실험을했다. 여기에 Eureka 서버와 인스턴스가 어떻게 작동하는지에 대한 지식을 제공한다.
나는 @codependent와 같은 질문을 받았는데, 나는 많이 봤고 몇 가지 실험을했다. 여기에 Eureka 서버와 인스턴스가 어떻게 작동하는지에 대한 지식을 제공한다.
모든 인스턴스는 eureka.instance.leaseRenewalIntervalInSeconds에 정의 할 수있는 30 초당 1 회 빈도로 Eureka Server에 임대를 갱신해야합니다.
갱신 (마지막 분) : 마지막 순간에 유레카 인스턴스로부터 수신 된 갱신 수를 나타냅니다.
갱신 임계 값 : Eureka 서버가 Eureka 인스턴스에서 수신 할 것으로 예상되는 시간을 분당 갱신합니다.
예를 들어, registerWithEureka가 false로 설정되면 eureka.instance.leaseRenewalIntervalInSeconds가 30으로 설정되고 2 개의 Eureka 인스턴스가 실행됩니다. 두 개의 유레카 인스턴스가 분당 유레카 서버에 4 갱신을 보내고, 유레카 서버 최소 임계 값은 1 (코드로 작성)이므로 임계 값은 5입니다 (이 숫자는 나중에 논의 될 eureka.server.renewalPercentThreshold 요소를 곱합니다).
자체 보존 모드 : 갱신 (마지막 분)이 임계 값 갱신보다 작 으면 자체 보존 모드가 활성화됩니다.
위의 예에서 임계 값은 5이지만 자급 자족 모드는 활성화되지만 유레카 서버는 4 회의 갱신 만받을 수 있습니다.
SELF PRESERVATION MODE는 네트워크 연결 불량을 방지하기위한 설계입니다. 유레카 인스턴스 A와 B 사이의 연결은 양호하지만 B는 연결 문제로 인해 단기간에 유레카 서버에 임대를 갱신하지 못했습니다. 현재 유레카 서버는 인스턴스 B를 그냥 쫓아 낼 수 없습니다. 인스턴스 A는 Eureka 서버에서 B가 사용 가능하더라도 등록 된 서비스를 사용할 수 없습니다. 이것은 자정 보존 모드의 목적이며, 켜는 것이 좋습니다.
최소 임계 값 1이 코드에 기록됩니다. registerWithEureka가 false로 설정되어 Eureka 인스턴스 레지스터가 없으므로 임계 값은 1이됩니다.
프로덕션 환경에서는 일반적으로 두 개의 Eureka 서버를 배포하고 RegisterWithEureka를 true로 설정합니다. 따라서 임계 값은 2이고 유레카 서버는 자체적으로 임대를 2 회 / 분으로 갱신하므로 갱신 횟수가 그보다 조금 더 많아도 문제가되지 않습니다.
네, 맞아요. eureka.instance.leaseRenewalIntervalInSeconds는 분당 서버로 보내지는 갱신 수를 정의하지만 위에서 언급 한 요소 eureka.server.renewalPercentThreshold를 곱합니다. 기본값은 0.85입니다.
예, 임계 값 초기 값이 1로 설정되어 있기 때문에 정상입니다. 따라서 registerWithEureka가 false로 설정되면 갱신은 항상 임계 값 미만입니다.
나는 이것에 대해 두 가지 제안을했다.
-
==============================
2.나는 Spring 문서 나 Netflix 블로그에서 누락 된 세부 사항을 채우는 Eureka의 세부 사항을 담은 블로그 게시물을 만들었습니다. 소스 코드를 통해 며칠간 디버깅 및 파기 한 결과입니다. 외부 URL에 연결하는 대신 복사하여 붙여 넣는 것이 더 좋지만 내용이 너무 커서 SO 답변에 적합하지 않다고 생각합니다.
나는 Spring 문서 나 Netflix 블로그에서 누락 된 세부 사항을 채우는 Eureka의 세부 사항을 담은 블로그 게시물을 만들었습니다. 소스 코드를 통해 며칠간 디버깅 및 파기 한 결과입니다. 외부 URL에 연결하는 대신 복사하여 붙여 넣는 것이 더 좋지만 내용이 너무 커서 SO 답변에 적합하지 않다고 생각합니다.
from https://stackoverflow.com/questions/33921557/understanding-spring-cloud-eureka-server-self-preservation-and-renew-threshold by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring hibernate template은 언제 사용 하는가? 왜? (0) | 2018.12.13 |
---|---|
[SPRING] Spring에서 조건부 자동 배선을 수행하는 방법은 무엇입니까? (0) | 2018.12.13 |
[SPRING] Spring HandlerInterceptor 대 서블릿 필터 (0) | 2018.12.13 |
[SPRING] Spring MVC에서, @ResponseBody를 사용할 때 어떻게 MIME 타입 헤더를 설정할 수 있습니까? (0) | 2018.12.13 |
[SPRING] 스프링 설정 파일로 시스템 속성 설정 (0) | 2018.12.13 |