задний план
Обнаружение служб — один из ключевых принципов архитектуры на основе микрослужб. Попытка вручную настроить каждого клиента или какую-либо форму соглашения может быть сложной и ненадежной. 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-код, чтобы следить за волной, и я сделаю все возможное, чтобы принести вам пользу. Если вы чувствуете, что даже небольшая помощь вам полезна, помогите, поставьте лайк или сделайте ретвит.