복붙노트

[SPRING] Spring Cloud Eureka 서버 자체 보존 및 갱신 임계 값 이해

SPRING

Spring 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. ==============================

    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. ==============================

    2.나는 Spring 문서 나 Netflix 블로그에서 누락 된 세부 사항을 채우는 Eureka의 세부 사항을 담은 블로그 게시물을 만들었습니다. 소스 코드를 통해 며칠간 디버깅 및 파기 한 결과입니다. 외부 URL에 연결하는 대신 복사하여 붙여 넣는 것이 더 좋지만 내용이 너무 커서 SO 답변에 적합하지 않다고 생각합니다.

    나는 Spring 문서 나 Netflix 블로그에서 누락 된 세부 사항을 채우는 Eureka의 세부 사항을 담은 블로그 게시물을 만들었습니다. 소스 코드를 통해 며칠간 디버깅 및 파기 한 결과입니다. 외부 URL에 연결하는 대신 복사하여 붙여 넣는 것이 더 좋지만 내용이 너무 커서 SO 답변에 적합하지 않다고 생각합니다.

  3. from https://stackoverflow.com/questions/33921557/understanding-spring-cloud-eureka-server-self-preservation-and-renew-threshold by cc-by-sa and MIT license