Компонент регистрации и обнаружения служб Eureka Application Combat

Микросервисы Архитектура

Эта статья взята из книги «Advanced Spring Cloud Microservice Architecture», опубликованной автором.

Что такое регистрация и обнаружение службы

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

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

Введение в Эврику

Слово Эврика происходит от древнегреческого, что означает "Я нашел! Я нашел!" Согласно легенде, Архимед открыл принцип плавучести в ванне, и был слишком счастлив, чтобы надеть штаны и выбежал на улицу с криком: «Эврика (я нашел)!».

В Netflix Eureka — это базовый сервисный компонент для регистрации и обнаружения сервисов в стиле REST, который в основном используется для балансировки нагрузки и аварийного переключения сервисов среднего уровня в AWS. Eureka состоит из двух частей: одна — Eureka Server, обеспечивающая функции регистрации и обнаружения сервисов, которая является упомянутой выше серверной стороной, а другая — Java-клиент, называемый Eureka Client, для облегчения взаимодействия с сервером. Клиент будет регулярно регистрировать свою информацию на сервере Eureka и обнаруживать другие службы с сервера. В клиенте есть встроенный балансировщик нагрузки для базовой циклической балансировки нагрузки.

Версия Spring Cloud основана на Finchley.M9, версия spring-cloud-netflix основана на 2.0.0.M8, а версия Eureka основана на v1.8.7.

Построить Центр регистрации услуг Eureka

Вы можете быстро создать проект SpringBoot, содержащий зависимости от Eurake Server, с помощью IDEA.

основная зависимость

<dependency> // eureka-client相关依赖
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency> // actuator相关依赖
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency> // Spring Web MVC相关依赖
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

Аннотация в классе запуска@EnableEurekaServer

@SpringBootApplication
// `@EnableEurekaServer`注解会为项目自动配置必须的配置类,标识该服务为注册中心
@EnableEurekaServer 
public class Chapter4EurekaServerApplication {
	public static void main(String[] args) {
		SpringApplication.run(Chapter2EurekaServerApplication.class, args);
	}
}

существуетapplication.ymlДобавьте следующую конфигурацию в файл конфигурации, настройте порт реестра и идентифицируйте себя как Eureka Server.


server:
  port: 8761
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false  // 表明该服务不会向Eureka Server注册自己的信息
    fetch-registry: false // 表明该服务不会向Eureka Server获取注册信息
    service-url:  // Eureka Server注册中心的地址,用于client与server进行交流
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

Сервер Eureka может быть развернут независимо или в кластере.При условии развертывания кластера операция синхронизации информации реестра будет выполняться между серверами Eureka.В это время сервер Eureka, информация реестра которого синхронизируется, будет синхронизирован с сервером Eureka сервера данные реестра.Сервер называетсяpeer.

Обратите внимание, что URL-адрес службы в приведенной выше конфигурации на самом деле указывает на реестр как на сам экземпляр.Вообще говоря, каждый сервер Eureka также является клиентом Eureka, который попытается зарегистрироваться, поэтому для поиска требуется хотя бы один URL-адрес реестра. сверстникиpeer. Если такая конечная точка регистрации не указана, реестр будет работать, но напечатает в журнале, чтоpeerЗарегистрируйтесь. В автономном режиме Eureka Server сервер Eureka обычно не регистрирует себя в качестве клиентской стороны, и реестр не регистрируется на нем.peerсередина.

Обслуживание между Eureka Server и Eureka Client в основном осуществляется с помощью Heartbeat. Heartbeat означает, что Eureka Client регулярно сообщает Eureka Server о текущем состоянии этого экземпляра службы.

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

После запуска Eureka Server приложение будет иметь главную страницу для отображения информации об экземпляре службы в текущем реестре и предоставления некоторых конечных точек на основе протокола HTTP в/eurekaПуть используется клиентом Eureka для регистрации, получения информации о реестре и отправки тактов.

Создание поставщика услуг Eureka

Вы можете быстро создать проект SpringBoot, содержащий зависимости Eurake Client, через IDEA.

Основные зависимости:

	
<dependency>// eureka-server相关依赖
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

стартовый класс

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

существуетFinchleyВ Spring Cloud в версии, пока введениеspring-cloud-starter-netflix-eureka-clientЗависимость, приложение будет автоматически зарегистрировано на Eureka Server, но вам нужно добавить адрес Eureka Server в файл конфигурации.

существуетapplication.ymlДобавьте следующую конфигурацию:

eureka:
  instance:
    prefer-ip-address: true
  client:
    service-url: // Eureka Server注册中心的地址,用于client与server进行交流
      defaultZone: http://localhost:8761/eureka/ 

server:
  port: 8765
spring:
  application: 
    name: eureka-client

Просмотр реестра службы Eureka

После создания двух вышеуказанных приложений Eureka запустите сервер и клиент по очереди.

Домашняя страница сервера Эврика

Посетите домашнюю страницу адреса Eureka Serverhttp://localhost:8761, вы можете увидеть следующий интерфейс:

Eureka Server

  1. Информация об экземпляре службы, в настоящее время зарегистрированная на сервере Eureka
  2. Общие сведения об операционной среде Eureka Server
  3. Информация об экземпляре сервера Eureka

Обмен информацией с сервисным реестром

DiscoveryClientПолученный из spring-cloud-client-discovery, это интерфейс верхнего уровня, определенный в Spring Cloud для обнаружения служб, и имеет соответствующие реализации в различных компонентах обнаружения служб Spring Cloud (таких как Netflix Eureka или Consul). Он предоставляет возможность получить соответствующую информацию об экземпляре службы из реестра службы в соответствии с идентификатором службы.

Когда экземпляр службы владеетDiscoveryClientКогда конкретная реализация , вы можете обнаружить другие экземпляры службы из Eureka Server.

Внедрить в Eureka ClientDiscoveryClientи получить информацию об экземпляре службы от Eureka Server.

существуетchapter2-eureka-clientдобавить одинServiceInstanceRestControllerконтроллер

@RestController
public class ServiceInstanceRestController {
    @Autowired
    private DiscoveryClient discoveryClient;
    @RequestMapping("/service-instances/{applicationName}")
    public List<ServiceInstance> serviceInstancesByApplicationName(
            @PathVariable String applicationName) {
        return this.discoveryClient.getInstances(applicationName);
    }
}

После запуска приложения перейдите по адресуhttp://localhost:8765/service-instances/eureka-client, получить название приложенияeureka-client(сама служба) метаданные экземпляра службы, результат выглядит следующим образом:

[
    {
        "host":"192.168.1.168",
        "port":8765,
        "metadata":{
            "management.port":"8765",
            "jmx.port":"59110"
        },
        "uri":"http://192.168.1.168:8765",
        "secure":false,
        "serviceId":"EUREKA-CLIENT",
        "instanceInfo":{
            "instanceId":"192.168.1.168:eureka-client:8765",
            "app":"EUREKA-CLIENT",
            "appGroupName":null,
            "ipAddr":"192.168.1.168",
            "sid":"na",
            "homePageUrl":"http://192.168.1.168:8765/",
            "statusPageUrl":"http://192.168.1.168:8765/info",
            "healthCheckUrl":"http://192.168.1.168:8765/health",
            "secureHealthCheckUrl":null,
            "vipAddress":"eureka-client",
            "secureVipAddress":"eureka-client",
            "countryId":1,
            "dataCenterInfo":{
                "@class":"com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo",
                "name":"MyOwn"
            },
            "hostName":"192.168.1.168",
            "status":"UP",
            "leaseInfo":{
                "renewalIntervalInSecs":30,
                "durationInSecs":90,
                "registrationTimestamp":1515585341831,
                "lastRenewalTimestamp":1515585341831,
                "evictionTimestamp":0,
                "serviceUpTimestamp":1515585341260
            },
            "isCoordinatingDiscoveryServer":false,
            "metadata":{
                "management.port":"8765",
                "jmx.port":"59110"
            },
            "lastUpdatedTimestamp":1515585341831,
            "lastDirtyTimestamp":1515581890364,
            "actionType":"ADDED",
            "asgName":null,
            "overriddenStatus":"UNKNOWN"
        }
    }
]

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

Узнайте больше об этой книге:адрес

Рекомендуемое чтение

Коллекция микросервисов

Подписывайтесь на свежие статьи, приглашаю обратить внимание на мой публичный номер

微信公众号