Эврика из SpringCloud

Spring Cloud

задний план

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

Введение

Eureka — это платформа обнаружения сервисов, разработанная Netflix.Это сервис на основе REST. Он в основном используется для обнаружения сервисов среднего уровня, работающих в домене AWS, для достижения балансировки нагрузки и аварийного переключения сервисов среднего уровня. SpringCloud интегрирует его в свой подпроект spring-cloud-netflix для реализации функции обнаружения сервисов SpringCloud.

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

Eureka ClientЭто Java-клиент для упрощения взаимодействия с Eureka Server.Клиент также представляет собой встроенный балансировщик нагрузки, использующий циклический алгоритм загрузки.

Принципиальный запрос

Справочная статья:dwz.cn/kvCWGp9X

架构

Эврика Особенности:
  • Эврика не сохраняется, кеш.
  • Eureka постепенно обновляет регистрационную информацию и заботится только о переходном состоянии.
  • Eureka обеспечивает кэширование на стороне клиента и скорее вернет информацию о том, на каких серверах служба была доступна 5 минут назад, чем найдет доступный сервер из-за временного сбоя в сети.
Регистрация и обнаружение службы Eureka:

注册与发现

Регистрация службы:

  • 1 Поместите информацию о регистрации экземпляра в реестр или обновите его.
  • 2. Добавьте информацию о регистрации экземпляра в очередь недавно измененных записей.
  • 3. Активно аннулировать кеш ответов

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

  • 1. Удалите экземпляр из реестра
  • 2. Добавьте информацию о регистрации экземпляра в очередь недавно измененных записей.
  • 3. Активно аннулировать кеш ответов
EurekaClient cache
  • EurekaClient впервые извлекает всю сумму, периодически инкрементально извлекает информацию об экземпляре службы приложений и сохраняет ее в кэше.
  • Инкрементное извлечение EurekaClient завершается неудачно, или если хэш-код несовместим после инкрементного извлечения, будет выполнено полное извлечение, что позволяет избежать проблем, вызванных фрагментацией сети в течение определенного периода времени.
  • В то же время для сервисных вызовов, если задействована балансировка нагрузки ленты, лента также имеет свой собственный кеш для этого списка экземпляров, и этот кеш регулярно обновляется из кеша EurekaClient.
механизм самозащиты

Механизм самозащиты: по умолчанию, если Eureka Server не получает пульс экземпляра микрослужбы в течение определенного периода времени, Eureka Server выходит из экземпляра (по умолчанию 90 секунд). Однако, когда происходит сбой сетевого раздела, микрослужба и Eureka Server не могут нормально взаимодействовать, и вышеописанное поведение может стать очень опасным — поскольку сама микрослужба на самом деле исправна, микрослужба не должна выходить из нее в это время.

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

Подводя итог, можно сказать, что режим самозащиты — это мера защиты от сетевых аномалий. Его архитектурная философия заключается в том, чтобы предпочесть сохранять все микросервисы одновременно (как работоспособные, так и неработоспособные), а не слепо отменять регистрацию любых работоспособных микросервисов. Использование режима самозащиты может сделать кластер Eureka более надежным и стабильным.

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

Справочник по конфигурации среды сборки: dwz.cn/yB8F2sNa

БолеевопросВы можете прочитать эту замечательную статью:dwz.cn/pPecH6CY

использовать

Справочная статья:dwz.cn/GwCz3aB9

зависимости родительского проекта

Используйте IDEA для создания проекта типа pom родительского maven, а затем просто добавьте следующие зависимости в pom.xml, вы можете обратиться к следующему

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.xbmchina</groupId>
    <artifactId>cloud-parent</artifactId>
    <version>1.0-SNAPSHOT</version>

    <packaging>pom</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/>
    </parent>

    <modules>
        <module>cloud-eureka-sever</module>
        <module>cloud-eureka-client</module>
    </modules>


    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
Сборка сервера Эврика

**Первый шаг:** Создайте проект модели cloud-erueka-server и укажите его в качестве родительского проекта.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>cn.xbmchina</groupId>
		<artifactId>cloud-parent</artifactId>
		<version>1.0-SNAPSHOT</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<groupId>cn.xbmchina</groupId>
	<artifactId>cloud-eureka-sever</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>


	<name>cloud-eureka-sever</name>
	<description>服务注册中心</description>


	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		</dependency>
	</dependencies>
</project>

**Шаг 2: **Настройка конфигурационного файла application.yml

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false #通过eureka.client.registerWithEureka:false和fetchRegistry:false来表明自己是一个eureka server.
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

spring:
  application:
    name: cloud-eureka-server

**Шаг 3:**Добавление аннотации @EnableEurekaServer к классу запуска доказывает, что это регистрация службы запуска.

@SpringBootApplication
@EnableEurekaServer
public class CloudEurekaSeverApplication {

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

}
Строительство клиента Эврика

**Первый шаг:** Создайте проект модели cloud-erueka-client и укажите его в качестве родительского проекта.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>cn.xbmchina</groupId>
		<artifactId>cloud-parent</artifactId>
		<version>1.0-SNAPSHOT</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<groupId>cn.xbmchina</groupId>
	<artifactId>cloud-eureka-client</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>cloud-eureka-client</name>
	<description>一个服务提供者</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<dependency>
			<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>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

**Шаг 2.** Настройте application.yml для подключения к erueka-server.

server:
  port: 8762

spring:
  application:
    name: cloud-eureka-client

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

**Третий шаг:** запустить класс @EnableEurekaClient, указанный в качестве клиента

@SpringBootApplication
@EnableEurekaClient
@RestController
public class CloudEurekaClientApplication {

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

	@Value("${server.port}")
	String port;

	@RequestMapping("/hi")
	public String home(@RequestParam(value = "name", defaultValue = "zero") String name) {
		return "hi " + name + " ,i am from port:" + port;
	}
}

Наконец, откройте адрес в браузере:http://localhost:8761/Вы можете видеть, что все клиенты зарегистрированы.

Справочная статья

Блог Чжан Хаша:dwz.cn/4ugM5OLVФан Чжипэн:dwz.cn/GwCz3aB9Официальный сайт:GitHub.com/Netflix/Евро…Документация:dwz.cn/6PaESsA6

Суммировать

Эврика2.х: Компонентный проект Netflix Eureka под Spring Cloud фактически объявил о прекращении разработки.

увидимся в следующий разspring-cloud-consulвоспевать

закончить просмотр,Цените жизнь, ложитесь спать пораньше!!!

Наконец

Если вы заинтересованы в Java и больших данных, нажмите и удерживайте QR-код, чтобы следить за волной, и я сделаю все возможное, чтобы принести вам пользу. Если вы чувствуете, что даже небольшая помощь вам полезна, помогите, поставьте лайк или сделайте ретвит.