Рубрики
Без рубрики

Руководство по самосохранению и обновлению Эврики

Узнайте о функциях самосохранения и обновления Эврики

Автор оригинала: Tino Mulanchira Thomas.

1. Обзор

В этом уроке мы узнаем о самосохранении и обновлении Эврики.

Мы начнем с создания сервера Eureka вместе с несколькими экземплярами клиента Eureka.

Затем мы зарегистрируем этих клиентов на нашем сервере Eureka, чтобы показать, как работает самосохранение.

2. Эврика Самосохранение

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

Во время запуска клиенты запускают вызов REST с сервером Eureka для самостоятельной регистрации в реестре экземпляров сервера. Когда после использования происходит плавное завершение работы, клиенты запускают еще один вызов REST, чтобы сервер мог стереть все данные, связанные с вызывающим абонентом.

Для обработки нелюбезных отключений клиента сервер ожидает сердцебиения от клиента через определенные промежутки времени. Это называется обновление . Если сервер перестанет получать сердцебиение в течение указанного времени, он начнет удалять устаревшие экземпляры.

Механизм, который останавливает выселение экземпляров, когда сердцебиение ниже ожидаемого порога , называется самосохранением . Это может произойти в случае плохого сетевого раздела, где экземпляры все еще работают, но просто не могут быть достигнуты в течение какого-то момента или в случае резкого выключения клиента.

И когда сервер активирует режим самосохранения, он удерживает выселение экземпляра до тех пор, пока скорость обновления не превысит ожидаемый порог.

Давайте посмотрим на это в действии.

3. Создание сервера

Давайте сначала создадим сервер Eureka, аннотировав наш основной класс Spring Boot с помощью @EnableEurekaServer :

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

Но теперь давайте добавим основные конфигурации для запуска сервера:

eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false
eureka.instance.hostname=localhost

Поскольку мы не хотим, чтобы наш сервер Eureka регистрировался сам с собой, мы установили свойство eureka.client.registerWithEureka как false . Здесь свойство eureka.instance.hostname=localhost особенно важно, поскольку мы запускаем его на локальной машине. В противном случае мы можем в конечном итоге создать недоступную реплику на сервере Eureka, что приведет к нарушению показателей сердцебиения клиента.

Теперь давайте рассмотрим всю конфигурацию и ее актуальность в контексте самосохранения в следующем разделе.

3.1. Конфигурации самосохранения

По умолчанию серверы Eureka работают с включенной функцией самосохранения.

Однако для нашего понимания давайте рассмотрим каждую из этих конфигураций на стороне сервера.

  • eureka.server.enable-самосохранение : Конфигурация для отключения самосохранения – значение по умолчанию true
  • eureka.server.expected-client-renewal-interval-seconds : Сервер ожидает сердцебиения клиента с интервалом, настроенным с помощью этого свойства – значение по умолчанию равно 30
  • эврика,например.срок действия аренды-в секундах : Указывает время в секундах, в течение которого сервер Eureka ожидает с момента получения последнего сердцебиения от клиента, прежде чем он сможет удалить этот клиент из своего реестра-значение по умолчанию равно 90
  • eureka.server.выселение-интервал-таймер-в-мс : Это свойство указывает серверу Eureka запускать задание с такой частотой для выселения клиентов с истекшим сроком действия – значение по умолчанию равно 60 секунды
  • eureka.server.renewal-percent-threshold : На основе этого свойства сервер вычисляет ожидаемые частоты сердечных сокращений в минуту от всех зарегистрированных клиентов – значение по умолчанию равно 0,85
  • eureka.server.renewal-threshold-update-interval-ms : Это свойство указывает серверу Eureka запускать задание с такой частотой, чтобы вычислить ожидаемое сердцебиение всех зарегистрированных клиентов в эту минуту – значение по умолчанию равно 15 минут

В большинстве случаев достаточно конфигурации по умолчанию. Но для конкретных требований мы можем захотеть изменить эти конфигурации. Необходимо проявлять максимальную осторожность в этих случаях, чтобы избежать неожиданных последствий, таких как неправильный расчет порога обновления или задержка активации режима самосохранения .

4. Регистрация Клиентов

Теперь давайте создадим клиент Eureka и раскрутим шесть экземпляров:

@SpringBootApplication
@EnableEurekaClient
public class EurekaClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class, args);
    }
}

Вот конфигурации клиента:

spring.application.name=Eurekaclient
server.port=${PORT:0}
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka
eureka.instance.preferIpAddress=true
eureka.instance.lease-renewal-interval-in-seconds=30

Эта конфигурация позволяет нам запускать несколько экземпляров одного и того же клиента с аргументом PORT program. Конфигурация eureka.instance.интервал продления аренды в секундах указывает интервал сердцебиений, который клиент отправляет серверу. Значение по умолчанию-30 секунд, что означает, что клиент будет посылать одно сердцебиение каждые 30 секунд.

Давайте не будем запускать эти шесть клиентских экземпляров с номерами портов, начинающимися с 8081 по 8086, и перейдем к http://localhost:8761 чтобы проверить, зарегистрированы ли эти экземпляры на сервере Eureka.

На скриншоте мы видим, что наш сервер Eureka имеет шесть зарегистрированных экземпляров клиентов, а общий порог обновления составляет 11. Расчет порога основан на трех факторах:

  • Общее количество зарегистрированных клиентских экземпляров – 6
  • Настроенный интервал обновления клиента – 30 секунд
  • Настроенный порог процента обновления – 0,85

Учитывая все эти факторы, в нашем случае порог равен 11.

5. Тестирование Самосохранения

Чтобы смоделировать временную сетевую проблему, давайте установим свойство eureka.client.should-unregister-on-shutdown как false на стороне клиента и остановим один из наших экземпляров клиента. Поскольку мы установили флаг should-unregister-on-shutdown как false , клиент не будет вызывать вызов unregister, и сервер предполагает, что это нелюбезное завершение работы .

Теперь давайте подождем 90 секунд, установленных нашим экземпляром eureka.instance.срок аренды-истечение-продолжительность-в-секундах свойство, и снова перейдите к http://localhost:8761 . Выделенный красным жирным шрифтом текст указывает на то, что сервер Eureka теперь находится в режиме самосохранения и прекратил выселение экземпляров.

Теперь давайте проверим раздел зарегистрированные экземпляры, чтобы узнать, доступен ли остановленный экземпляр по-прежнему или нет. Как мы видим, он доступен, но со статусом DOWN :

Единственный способ сервер может выйти из режима самосохранения-либо запустить остановленный экземпляр, либо отключить самосохранение. Если мы повторим те же действия , установив флаг eureka.server.enable-self-saving как false , то сервер Eureka удалит остановленный экземпляр из реестра после истечения срока действия настроенного свойства срока аренды.

6. Заключение

В этом уроке мы узнали, как работает самосохранение Эврики и как мы можем настроить различные параметры, связанные с самосохранением.

Все примеры, которые мы продемонстрировали здесь, можно найти на GitHub .