В области распределенных систем хорошо известенCAP定理
(C-数据一致性
;A-服务可用性
;P-服务对网络分区故障的容错性
, эти три свойства в любой распределенной системе不能同时满足,最多同时满足两个
);eureka是AP
,zookeeper是CP
. за服务发现
С точки зрения,可用性
Сравнивать数据一致性
более важный -AP胜过CP
Consul | zookeeper | euerka | etcd | |
---|---|---|---|---|
Служба проверки здоровья | Состояние службы, память, жесткий диск и т. д. | (Слабое) долгое соединение, поддержка активности | Настраиваемая поддержка | пульс соединения |
Несколько центров обработки данных | служба поддержки | — | — | — |
служба хранения кв | служба поддержки | служба поддержки | — | служба поддержки |
последовательность | raft | paxos | — | raft |
CAP | ca | cp | ap | cp |
Использование интерфейса (многоязычность) | Поддержка http и dns | клиент | http (Sidecar) | http/grpc |
наблюдать за поддержкой (клиент наблюдает за изменениями поставщика услуг) | Полный/поддержка длительного опроса | служба поддержки | Поддерживает длительный опрос/большинство приращений | Поддержка длительного опроса |
самоконтроль | metrics | — | metrics | metrics |
Безопасность | acl /https | acl | — | поддержка https (слабая) |
весенняя интеграция с облаком | поддерживается | поддерживается | поддерживается | поддерживается |
-
raft
: Raft сильно зависит от доступности узлов Leader для обеспечения согласованности данных кластера. -
paxos
: Лидер отправителя в первый раз отправляет сообщение о подготовке всем остальным серверам с запросом на подготовку. Если большинство серверов отвечает на обещание, они готовы и могут принять запись; второй отправитель отправляет официальное предложение всем серверам. , большинство серверов успешны, если ответ был получен. -
long polling
: Долгий опрос, клиент отправляет Ajax-запрос на сервер, сервер удерживает соединение после получения запроса, возвращает ответную информацию и закрывает соединение до тех пор, пока не появится новое сообщение, а затем отправляет новый запрос на сервер после клиент обрабатывает ответную информацию. -
metrics
: В качестве библиотеки измерений для мониторинга показателей она предоставляет множество модулей для предоставления вспомогательной статистики для сторонних библиотек или приложений, а также может отправлять данные измерений в Ganglia и Graphite для обеспечения графического мониторинга. -
Eureka的自我保护模式
Eureka Server
Во время работы он будет подсчитывать, была ли доля отказов сердцебиения в пределах 15 минут. Ниже 85%, если ниже (фактически в Производственная среда обычно связана с сетью нестабильность сети),Eureka Server
Информация о регистрации текущего экземпляра будет защищена, а показывает предупреждение. Защищенный режим в основном используется для группы клиентов иEureka Server
Существуют сетевые разногласия между защита в зональных сценариях. В защищенном режимеEureka Server
попытается защитить свои услуги Примечание информацию в реестре и больше не удалять данные в реестре сервисов (то есть никакие микросервисы не будут незарегистрированными).
такEureka
Философия, сохраняя”好数据“
и”坏数据“
Это лучше, чем выбрасывать любые «хорошие данные», так что этот шаблон очень хорошо работает на практике. ,
Почему бы не использовать zookeeper в качестве службы обнаружения?
-
ZooKeeper
Это служба распределенной координации, и ее ответственность заключается в обеспечении синхронизации и согласованности данных (Примечание: данные конфигурации, данные о состоянии) между всеми службами, находящимися под ее юрисдикцией; (строгая согласованность) - Ядром службы обнаружения должна быть необходимость подчеркнуть высокую доступность службы.
-
ZooKeeper
Используйте единый главный процессLeader
Используется для обработки всех запросов транзакций клиента, используяZAB协议
Транслировать статус количества серверов в транзакции всемFollower
включено; как выбрать, если две из трех услуг завислиleader
;1 不大于 (3/2)=1的
, - Правильная настройка и обслуживание
ZooKeeper服务
это очень сложно - В кластере возникла ошибка сегментации сети (из-за сбоя коммутатора подсети под коммутатором не могут получить доступ друг к другу)
ZooKeeper
Они будут удалены из своей области управления, и внешний мир не сможет получить доступ к этим узлам.“健康”
Да, может оказывать услуги - Даже если служба обнаружения вернется
包含不实的信息的结果也比什么都不返回要好
(Не удается найти доступный сервер из-за временного сбоя сети)
следовательно,Eureka
Он вполне может справиться с ситуацией, когда некоторые узлы теряют связь из-за сетевых сбоев, а неzookeeper
Это парализовало бы всю службу реестра.
Spring Cloud Eureka (Реестр услуг)
- добавить зависимости
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
- Открытая регистрация в сервисе
пройти через@EnableEurekaServer
Аннотация запускает сервисный реестр, предоставляемый другим приложениям для диалога, эта аннотация должна находиться вspringboot工程
Началоapplication类
плюс
package io.ymq.example.eureka.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
Поставщик облачных услуг Spring
- поставщик услуг
- Зарегистрируйте собственный сервис в реестре Eureka, чтобы потребители сервиса могли его найти.
- добавить зависимости
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
-
Открытая регистрация в сервисе
В основном классе приложения, добавив@EnableEurekaClient
, но толькоEureka
доступны, вы также можете использовать@EnableDiscoveryClient
. Требуется настройка для поискаEureka注册中心服务器
discovery service
Реализаций много(eureka、consul、zookeeper
Ждать)
@EnableDiscoveryClient
на основеspring-cloud-commons
,
@EnableEurekaClient
на основеspring-cloud-netflix
.
То есть, если выбранный реестрeureka
, тогда рекомендуйте@EnableEurekaClient
,
Если это другой реестр, рекомендуется использовать@EnableDiscoveryClient
.
@SpringBootApplication
@EnableEurekaClient
@RestController
public class EurekaProviderApplication {
@RequestMapping("/")
public String home() {
return "Hello world";
}
public static void main(String[] args) {
SpringApplication.run(EurekaProviderApplication.class, args);
}
}
-
Добавьте конфигурацию application.yml
Добавьте конфигурацию, чтобы найти сервер Eureka
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: eureka-provider
server:
port: 8081
Потребитель облачных сервисов Spring
В направленииEureka
Служба регистрации, потребительское использованиеRibbon
Включить балансировку нагрузки
Что такое лента?
Ribbon
даNetflix
Выпущенный проект с открытым исходным кодом, основная функция которого заключается в обеспечении алгоритма балансировки нагрузки программного обеспечения на стороне клиента, будетNetflix
Услуги среднего уровня связаны друг с другом.Ribbon
Клиентский компонент предоставляет ряд полных элементов конфигурации, таких как время ожидания соединения, повторная попытка и т. д. Проще говоря, он указан в файле конфигурацииLoad Balancer(简称LB)
Все машины позади,Ribbon
автоматически поможет вам на основе определенных правил(如简单轮询,随即连接等)
для подключения этих машин. Мы также просты в использованииRibbon
Реализуйте собственный алгоритм балансировки нагрузки.
Основные компоненты ленты
Ribbon
Преферанс на работе пройдетServerList
чтобы получить список всех доступных сервисов, затем перейдитеServerListFilter
Отфильтруйте некоторые адреса и, наконец, передайте оставшиеся адресаIRule
В качестве окончательного результата был выбран один сервер.
-
ServerList
: Используется для получения списка адресов. Он может быть либо статическим (предоставляя фиксированный набор адресов), либо динамическим (регулярно запрашивая список адресов из реестра). -
ServerListFilter
: только при использовании динамическогоServerList
При использовании он используется для фильтрации некоторых адресов в исходном списке услуг с использованием определенной политики. -
IRule
: выберите конечный адрес службы какLB结果
. Стратегии выбора轮询、根据响应时间加权、断路器(当Hystrix可用时)
Ждать.
Основная стратегия балансировки нагрузки, предоставляемая Ribbon
-
简单轮询负载均衡(RoundRobin)
:Запросы планируются к разным серверам по очереди в циклическом режиме, то есть i = (i + 1) mod n выполняется каждый раз, когда выполняется расписание, и выбирается i-й сервер. -
随机负载均衡 (Random)
:Случайным образом выберите сервер со статусом UP -
加权响应时间负载均衡 (WeightedResponseTime)
:Назначьте вес в соответствии с соответствующим временем.Чем больше соответствующее время, тем меньше вес и меньше вероятность быть выбранным. -
区域感知轮询负载均衡(ZoneAvoidanceRule)
: Совместите производительность региона, в котором находится сервер, и доступность сервера для выбора сервера.
Поставщик услуг (предоставляет услуги)
- Открытая регистрация в сервисеЗарегистрируйте три
@SpringBootApplication
@EnableEurekaClient
@RestController
public class EurekaProviderApplication {
@Value("${server.port}")
String port;
@RequestMapping("/")
public String home() {
return "Hello world ,port:" + port;
}
public static void main(String[] args) {
SpringApplication.run(EurekaProviderApplication.class, args);
}
}
-
Добавьте конфигурацию application.yml
Порты 8081, 8082, 8083 по порядку
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: eureka-provider
server:
port: 8081
Потребители услуг (в зависимости от других услуг)
- pom.xml добавить зависимости
<!-- 客户端负载均衡 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<!-- eureka客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
-
Включить балансировку нагрузки службы
Зарегистрируйтесь в сервисном реестре через @EnableDiscoveryClient и добавьте bean: restTemplate в ioc программы и используйте аннотацию @LoadBalanced, чтобы указать, что этот restRemplate включает балансировку нагрузки.
@EnableDiscoveryClient
@SpringBootApplication
public class RibbonConsumerApplication {
@LoadBalanced
@Bean
RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(RibbonConsumerApplication.class, args);
}
}
- метод поставщика потребителей
/**
* 描述:调用提供者的 `home` 方法
**/
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@GetMapping(value = "/hello")
public String hello() {
return restTemplate.getForEntity("http://eureka-provider/", String.class).getBody();
}
}
-
Добавьте конфигурацию application.yml
Укажите адрес службы в реестре, настройте собственный порт службы, имя службы
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: ribbon-consumer
server:
port: 9000
Запускайте службы по очереди(Eureka服务,三台service provider和service Consumer)
,Проверятьribbon
Включить ли балансировку нагрузки
Spring Cloud Consul (реализация управления услугами для Consul)
так какConsul
Он предоставляет сам сервер, поэтому нам не нужно实现Eureka
При создании сервисного реестра напрямую черезСкачать серверную программу консулготов к использованию.Consul
встроенный服务注册
и发现框架
(одноразовое), обладает следующими свойствами (см. список выше):
- Реализация протокола распределенной согласованности
- медицинское обследование
- Хранение ключей/значений
- Решение для нескольких центров обработки данных
Преимущества консула
- Используйте алгоритм Raft для обеспечения согласованности, который является более простым, чем сложный алгоритм Paxos.
- Поддерживает несколько центров обработки данных, а службы внутренней и внешней сетей используют разные порты для мониторинга
- Кластер с несколькими центрами обработки данных может избежать единой точки отказа одного центра обработки данных, и при его развертывании необходимо учитывать задержку сети, фрагментацию и т. д.
- Поддержка здоровья Check
- Поддержка интерфейса протокола http и dns
- Официально предоставить веб-интерфейс управления
Роль консула
-
client
: Клиент, без сохранения состояния, перенаправляет запросы интерфейса HTTP и DNS на кластер серверов в локальной сети, все службы, зарегистрированные на текущем узле, будут перенаправлены на сервер, который сам не сохраняет эту информацию. -
server
: сервер, сохранение информации о конфигурации, кластер высокой доступности, связь с локальным клиентом в локальной сети, функция такая же, как у клиента, с той лишь разницей, что вся информация будет сохраняться локально, поэтому в случае сбоя информация может быть зарезервирована. . Связь с другими дата-центрами через WAN.Рекомендуется количество серверов в каждом дата-центре 3 или 5. -
server-leader
: Указывает, что этот сервер является их боссом.Он отличается от других серверов тем, что должен отвечать за синхронизацию зарегистрированной информации с другими серверами, а также отвечает за мониторинг работоспособности каждого узла. -
raft
: гарантия согласованности данных между серверными узлами.Протокол согласованности использует raft, в то время как zookeeper использует paxos, а etcd использует taft. -
服务发现协议
: Consul использует протоколы http и dns, etcd поддерживает только http -
服务注册
: Поддерживает два способа регистрации службы, и консул официально рекомендует второй способ.
- Один из них — зарегистрировать http API через службу консула, а сама служба вызывает API для реализации регистрации.
- Другой способ — реализовать регистрацию через файл конфигурации json и предоставить службы, которые необходимо зарегистрировать, в файле конфигурации формата json.
-
服务发现
: поддерживает два способа обнаружения службы,
- Один из них — запросить, какие сервисы доступны через http API,
- Другой — через DNS (порт 8600), который поставляется вместе с агентом консула.Имя домена дается в форме ИМЯ.служба.консул.ИМЯ — это имя службы в определенном файле конфигурации службы. Метод DNS может проверить службу с помощью метода проверки.
- Протокол связи между сервисами: Consul использует протокол сплетен для управления членством и широковещательной рассылкой сообщений всему кластеру.
Эпилог
оconsul
Построение окружения и приложение будут добавлены позже~
существуетgithub
примерно наSpring Cloud
Полное развертывание.
Другие связанные статьи
Весеннее облако (1) - знакомство и подборка
Spring cloud (2) — обнаружение сервисов (Eureka, Consul)
Spring cloud (3) — балансировка нагрузки (Feign, Ribbon)
Весеннее облако (4) - предохранитель (Hystrix)
Spring cloud (5) — шлюз маршрутизации (Zuul)
Spring cloud (6) — управление конфигурацией и обновление (Config, Bus)
Наконец,дать звезду~
личный блог~
короткая книга~