Использование Eureka и развертывание кластера

Spring Cloud

概述:Eureka是SpringCloud全家桶中一个主要组件,用于服务的注册与发现,近期公司打算重构微服务架构,对Eureka集群部署做了一番研究。

Eureka — это компонент Netflix для регистрации и обнаружения служб с открытым исходным кодом.Сервер предоставляет службы через протокол REST и предоставляет функции регистрации и обнаружения для служб приложений.

Все службы Eureka называются экземплярами. Eureka включает сервер Eureka и клиент Eureka.

EurekaClient дополнительно делится на поставщика услуг (поставщик услуг) и потребителя услуг (потребитель услуг), каждый клиент может рассматриваться как экземпляр (экземпляр). Поставщик услуг: поставщик услуг, который регистрирует свои собственные услуги на Eureka-Server, продлевает контракты (отправляет тактовые импульсы) и отключается. Потребитель услуг: Потребитель услуг, который получает список услуг от Eureka-Server, который делится на полное получение и добавочное приобретение.

Eureka Server接收到心跳时,会更新对应的服务实例的信息,如果实例信息发生变化,则将实例加入最近变更实例队列中。服务消费者会创建一个timer定时更新服务实例,第一次全量拉取服务实例,之后就是增量拉取,也就是从变更队列拉取变更实例信息。

Развертывание кластера Eureka Server

В производственной среде из-за внешних или сетевых факторов сервер с одним узлом может быть неприменим.Поддержка развертывания кластера отражает высокую доступность Eureka.

Несколько серверов Eureka регистрируются друг с другом для формирования кластера.Благодаря конфигурации eureka.client.service-url.defaultZone каждый сервер eureka рассматривается как поставщик услуг и регистрируется на других серверах.

Здесь следует отметить, что если нам нужно регистрировать друг друга через ip, то имя хоста eureka.client.instance.hostname не должно совпадать, потому что по умолчанию стоит регистрация по имени хоста, а eureka.instance.prefer-ip-address= нужно установить true, по умолчанию false. Если нам нужно зарегистрировать друг друга по имени хоста, нам нужно использовать имя хоста. (В примере используется регистрация доменного имени)

Эврика конфигурация

  • eureka.instance.*: конфигурация экземпляра Eureka, общедоступные элементы конфигурации, необходимые для Eureka, будь то сервер или клиент. Соответствующий класс конфигурации — org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean.

  • eureka.server.*: параметры конфигурации сервера Eureka, т. е. вам нужно настроить этот параметр только при использовании eureka в качестве реестра. Соответствующий класс конфигурации — org.springframework.cloud.netflix.eureka.EurekaServerConfigBean.

  • eureka.client.*: параметры конфигурации Eureka Client, то есть эти параметры необходимо настраивать только тогда, когда службе необходимо зарегистрироваться в реестре или использовать службы в реестре. Соответствующий класс конфигурации — org.springframework.cloud.netflix.eureka.server.EurekaClientConfigBean.

    Eureka Client

    Eureka Client делится на две роли: поставщик услуг и потребитель услуг.Чтобы зарегистрировать Eureka на стороне клиента, вам нужно настроить адрес кластера на eureka.client.service-url.defaultZone.На самом деле, вы также можете настроить определенную Eureka Сервер, потому что механизм синхронизации службы Eureka Server.

Синхронизация службы Eureka Server

每个Eureka服务发生变化时,各个服务之间定时同步,中间过程中每个服务可能不一致,最终会保证服务的一致性。

Чтобы обеспечить синхронизацию состояния всех узлов Eureka Server в кластере, все следующие операции будут синхронизированы со всеми службами в кластере: регистрация служб (Registers), обновления служб (Renewals), отмена служб (Cancels), тайм-ауты служб. (Сроки действия) и Изменения статуса услуги (Изменения статуса). В частности, com.netflix.eureka.registry.PeerAwareInstanceRegistryImpl

Регистрация службы: реплицируется на все остальные узлы после регистрации

, Обновление службы:

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

Отмена услуги:

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

Как видно из исходного кода, отмена службы заключается в вызове метода replicateToPeers для выполнения действия по обновлению статуса службы.

Механизм защиты сервера Эврика:

Eureka Server自我保护机制是指当由于网络等各方面原因导致Eureka Server每分钟应收到的心跳数小于实际收到的心跳数,会触发Eureka Server的保护机制,所有服务都不会移除下线。

Здесь нам нужно объяснить, как рассчитывается количество ударов сердца, которые должны быть получены:

В интерфейсе мониторинга Eureka есть пороговое значение обновления и количество обновлений (последняя минута).Пороговое значение обновления относится к количеству тактовых импульсов, которые сервер eureka ожидает получить.Согласно конфигурации eureka, LeaseRenewalIntervalInSeconds: частота, с которой клиент eureka отправляет тактовые импульсы, по умолчанию — 30 с. LeaseExpirationDurationInSeconds: как долго сервер eureka не получает пульс для очистки экземпляра экземпляра, по умолчанию — 90 с. RenewalPercentThreshold: пороговый фактор сервера eureka, по умолчанию 0,85, если порог больше минимального значения, включается режим самозащиты

假如有3个实例注册在eureka server上,那么正常情况下Renews(last min)即每分钟接收到的心跳数就是6,期望接收到的心跳数就是
6*0.85=5.1,那么期望接收到的心跳数就是5(如果不为整数,就是去尾法),当最近1分钟接收到的心跳数小于期望心跳数,就会开启保护机制。