Подтвердить что ты не робот

Понимание Spring Сохранение и возобновление облачного сервера Cloud Eureka

Я новичок в разработке микросервисов, хотя я некоторое время изучал его, читая как документы Spring, так и Netflix.

Я начал простой проект доступный в Github. Это в основном сервер Eureka (Archimedes) и три клиентских микросервиса Eureka (один открытый API и два частных). Проверьте подробное описание github readme.

Дело в том, что когда все работает, я хотел бы, чтобы, если один из частных микросервисов был убит, сервер Eureka реализует и удаляет его из реестра.

I qaru.site/info/117709/..., и решение проходит с помощью enableSelfPreservation:false в конфигурации Eureka Server. Выполняя это через некоторое время, убитая служба исчезает, как ожидалось.

Однако я вижу следующее сообщение:

РЕЖИМ САМОГО СОХРАНЕНИЯ ВЫКЛЮЧЕН. ЭТО МОЖЕТ НЕ ЗАЩИТИТЬ ИНСТАНС EXPIRY В СЛУЧАЕ СЕТИ/ДРУГИХ ПРОБЛЕМ.

1. Какова цель самосохранения? В документе doc указано, что при самосохранении на "клиенты могут получить экземпляры, которые больше не существуют". Итак, когда это целесообразно, чтобы включить/выключить?

Кроме того, когда самосохранение включено, вы можете получить сообщение об ошибке в предупреждении консоли Eureka Server:

EMERGENCY! EUREKA МОЖЕТ БЫТЬ НЕПРАВИЛЬНЫМИ ПРЕТЕНЗИЯМИ. ОНИ НЕ. ОБНОВЛЕНИЯ - МЕНЬШЕ, ЧЕМ ПОРОГ И ЛЮБОВЬ ИНСТАНЦИИ НЕ ДОЛЖНЫ БЫТЬ БЕЗОПАСНЫМИ.

Теперь, продолжая работу с Spring Eureka Console.

Lease expiration enabled    true/false
Renews threshold    5
Renews (last min)   4

Я столкнулся с странным поведением порогового значения: когда я запускаю только сервер Eureka, порог равен 1.

2. У меня есть один сервер Eureka и настроен с помощью 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
4b9b3361

Ответ 1

У меня был тот же вопрос, что и @codependent, я много гугл и сделал некоторый эксперимент, здесь я пришел, чтобы внести некоторые сведения о том, как работает сервер и экземпляр Eureka.

Каждый экземпляр должен возобновить аренду до Eureka Server с частотой одного раза в 30 секунд, что можно определить в eureka.instance.leaseRenewalIntervalInSeconds.

Renews (последний мин.): показывает, сколько обновлений получено от экземпляра Eureka в последнюю минуту

Порог обновления: обновляется, что сервер Eureka ожидает от экземпляра Eureka в минуту.

Например, если для параметра registerWithEureka установлено значение false, eureka.instance.leaseRenewalIntervalInSeconds установлено значение 30 и запускается 2 экземпляра Eureka. Два экземпляра Eureka отправят 4 обновления на сервер Eureka за минуту, минимальный порог сервера Eureka - 1 (написан в коде), поэтому пороговое значение 5 > (это число будет умножаться на коэффициент eureka.server.renewalPercentThreshold, который будет рассмотрен ниже).

РЕЖИМ САМОВОГО СОХРАНЕНИЯ: если Обновить (последний мин.) меньше Порог возобновления, будет активирован режим самосохранения.

Итак, в верхнем примере активирован РЕЖИМ СОХРАНЕНИЯ SELF, поскольку порог равен 5, но сервер Eureka может получать только 4 обновления/мин.

  • Вопрос 1:

РЕЖИМ СОБСТВЕННОГО СОХРАНЕНИЯ - это дизайн, чтобы избежать плохого сбоя сетевого подключения. Связь между экземплярами Eureka A и B хороша, но B не смог возобновить аренду на сервере Eureka за короткий период из-за сбоев в подключении, на данный момент сервер Eureka не может просто просто запустить экземпляр B. Если это так, экземпляр A не получит доступный зарегистрированный сервис от сервера Eureka, несмотря на то, что B доступен. Таким образом, это цель режима SELF PRESERVATION, и лучше включить его.

  1. Вопрос 2:

Минимальный порог 1 записан в коде. registerWithEureka установлено в false, поэтому не будет экземпляров экземпляров Eureka, пороговое значение будет равно 1.

В рабочей среде, как правило, мы развертываем два сервера Eureka, а registerWithEureka - true. Таким образом, пороговое значение будет равно 2, и сервер Eureka возобновит аренду себе дважды/минуту, поэтому RENEWALS ARE LESSER THAN THRESHOLD не будет проблемой.

  1. Вопрос 3:

Да, вы правы. eureka.instance.leaseRenewalIntervalInSeconds определяет, сколько обновлений будет отправлено серверу в минуту, но оно умножит множитель eureka.server.renewalPercentThreshold, упомянутый выше, значение по умолчанию - 0,85.

  1. Вопрос 4:

Да, это нормально, потому что пороговое начальное значение установлено равным 1. Поэтому, если для параметра registerWithEureka установлено значение false, обновления всегда ниже порогового значения.

У меня есть два предложения для этого:

  • Разверните два сервера Eureka и включите registerWithEureka.
  • Если вы просто хотите развернуть в среде demo/dev, вы можете установить eureka.server.renewalPercentThreshold на 0,49, поэтому при запуске только сервера Eureka порог будет равен 0.

Ответ 2

Я создал запись в блоге с деталями Eureka здесь, что заполняет некоторые отсутствующие детали из Спринг док или Netflix блог. Это результат нескольких дней отладки и копания в исходном коде. Я понимаю, что предпочтительнее копировать-вставлять, чем ссылаться на внешний URL-адрес, но содержание слишком велико для SO-ответа.

Ответ 3

Вы можете попытаться установить предел порога продления в свойствах вашего сервера eureka. Если у вас есть от 3 до 4 микросервисов для регистрации на eureka, то вы можете установить его на это:

eureka.server.renewalPercentThreshold=0.33