概述: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 рассматривается как поставщик услуг и регистрируется на других серверах.
Эврика конфигурация
-
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
Регистрация службы: реплицируется на все остальные узлы после регистрации
Отмена услуги:
Механизм защиты сервера Эврика:
Eureka Server自我保护机制是指当由于网络等各方面原因导致Eureka Server每分钟应收到的心跳数小于实际收到的心跳数,会触发Eureka Server的保护机制,所有服务都不会移除下线。
Здесь нам нужно объяснить, как рассчитывается количество ударов сердца, которые должны быть получены:
假如有3个实例注册在eureka server上,那么正常情况下Renews(last min)即每分钟接收到的心跳数就是6,期望接收到的心跳数就是
6*0.85=5.1,那么期望接收到的心跳数就是5(如果不为整数,就是去尾法),当最近1分钟接收到的心跳数小于期望心跳数,就会开启保护机制。