Что такое консул
Consul — это программное обеспечение с открытым исходным кодом, выпущенное HashiCorp. Оно написано на языке GO и предоставляет такие функции, как регистрация службы, обнаружение и настройка распределенных систем. Каждую из этих функций можно использовать отдельно по мере необходимости или вместе для создания комплексной службы. сетка. Consul не только имеет функцию управления услугами, но также использует алгоритм распределенного протокола консенсуса RAFT для достижения решения высокой доступности с несколькими центрами обработки данных, и его легко интегрировать с платформами микросервисов, такими как Spring Cloud. использование, с простыми и легкими в использовании, подключаемыми и другими функциями. Короче говоря, Consul предоставляет комплексное решение для сервисной сети.
Консул имеет следующие особенности и функции
- Обнаружение службы: клиенты Consul могут регистрировать в Consul службы, такие как службы API или службы mysql, а другие клиенты могут использовать Consul для обнаружения поставщиков услуг. Consul поддерживает использование DNS или HTTP для регистрации и обнаружения сервисов.
- Проверки работоспособности во время выполнения: клиенты Consul могут предоставлять любое количество механизмов проверки работоспособности, либо для данной службы («Да, веб-сервер вернул 200 OK»), либо для локального узла («Использование памяти ниже 90%). Эта информация может использоваться для мониторинга работоспособности кластера, а компоненты обнаружения служб могут использовать эту информацию мониторинга для направления трафика от неработоспособных служб.
- Хранилище KV: приложения могут использовать хранилище ключей и значений Consul для любых нужд, включая динамическую настройку, тегирование функций, координацию, выборы лидера и многое другое. Он принимает HTTP API, чтобы упростить его использование.
- Безопасная служебная связь: Consul может генерировать и распространять сертификаты TLS для служб для установления взаимных соединений TLS.
- Несколько центров обработки данных: Consul поддерживает несколько центров обработки данных. Это означает, что пользователям Consul не нужно беспокоиться о создании дополнительных уровней абстракции для масштабирования на несколько регионов.
Консульский принцип
На каждом узле, предоставляющем услуги, работает агент Consul.Запуск агента не требует обнаружения службы и получения настроенной пары ключ-значение KV.Агент отвечает только за мониторинг и проверку. Узлы агента могут взаимодействовать с одним или несколькими серверами Consul. Сервер Consul — это место, где данные хранятся и реплицируются. Сервер сам выбирает лидера. Хотя Consul может работать на одном сервере, рекомендуется использовать от 3 до 5, чтобы избежать сбоев, которые приводят к потере данных. Рекомендуется использовать набор серверов Consul для каждого дата-центра. Если вашему компоненту необходимо обнаружить службы, он может запросить любой сервер Consul или любой клиент Consul, и клиент Consul автоматически перенаправит запрос на сервер Consul. Компоненты инфраструктуры, которым необходимо обнаружить другие службы или узлы, могут запрашивать любой сервер Consul или любой прокси-сервер Consul. Прокси автоматически перенаправляет запрос на сервер. В каждом центре обработки данных работает кластер серверов Consul. Когда возникает запрос на обнаружение или настройку службы между центрами обработки данных, локальный сервер Consul перенаправляет запрос в удаленный центр обработки данных и возвращает результат.
период, термин
- Агент агента — это процесс-демон, который всегда работает на каждом члене кластера Consul. Начните с запуска агента консула. Агент может работать в режиме клиента или сервера. Указать узел в качестве клиента или сервера очень просто, если нет других экземпляров агента. Все агенты могут запускать интерфейсы DNS или HTTP и несут ответственность за проверки во время выполнения и синхронизацию служб.
- Клиент Клиент — это прокси, который перенаправляет все RPC на сервер. Этот клиент относительно не имеет гражданства. Единственное фоновое действие, выполняемое клиентом, — это присоединение к пулу сплетен в локальной сети. Это имеет минимальные накладные расходы на ресурсы и потребляет лишь небольшую часть пропускной способности сети.
- Сервер Сервер — это агент с набором расширенных функций, включая участие в выборах Raft, поддержание состояния кластера, ответ на запросы RPC, взаимодействие с другими центрами обработки данных, сплетни из глобальной сети и переадресацию запросов лидерам или удаленным центрам обработки данных.
- Центр обработки данных Хотя определение центра обработки данных очевидно, необходимо учитывать некоторые тонкие детали. Например, в EC2 считается, что несколько зон доступности составляют центр обработки данных? Мы определяем центр обработки данных как частную сетевую среду с низкой задержкой и высокой пропускной способностью. Это не включает доступ к общедоступной сети, но для нас несколько зон доступности в одном и том же EC2 могут считаться частью одного центра обработки данных.
- Консенсус В нашей документации мы используем Консенсус для обозначения соглашения о порядке выборов лидера и транзакций. Поскольку эти транзакции применяются к конечным автоматам, консенсус подразумевает непротиворечивость реплицированных конечных автоматов.
- Gossip Consul построен на основе Serf, который предоставляет полный протокол сплетен для многоадресной рассылки. Serf обеспечивает членство, обнаружение сбоев и широковещательную рассылку событий. Более подробная информация описана в документации gossip. Этого достаточно, чтобы знать, что сплетни используют случайную двухточечную связь по протоколу UDP.
- LAN Gossip Содержит все узлы, находящиеся в одной локальной сети или центре обработки данных.
- WAN Gossip Он содержит только сервер. Эти серверы в основном распределены в разных центрах обработки данных и обычно обмениваются данными через Интернет или глобальную сеть.
- Удаленный вызов процедуры RPC. Это механизм запроса/ответа, который позволяет клиенту запрашивать сервер.
Давайте разберем эту диаграмму и опишем каждую часть. Во-первых, мы видим, что есть два центра обработки данных, помеченные «1» и «2». Consul имеет первоклассную поддержку для нескольких центров обработки данных, и, надеюсь, это распространенный случай.
В каждом центре обработки данных клиенты и серверы смешаны. Обычно рекомендуется иметь 3-5 серверов. Это основано на компромиссе между доступностью и производительностью в случае сбоя, поскольку чем больше машин подключается, тем медленнее достигается консенсус. Однако количество клиентов не ограничено, их можно легко масштабировать до тысяч или десятков тысяч.
Все узлы в одном центре обработки данных должны присоединиться к протоколу сплетен. Это означает, что протокол сплетен включает все узлы в данном центре обработки данных. Это служит нескольким целям: во-первых, нет необходимости настраивать адрес сервера на клиенте. Обнаружение выполняется автоматически. Во-вторых, работа по обнаружению отказов узлов не размещается на сервере, а распределяется. Это сделано для обнаружения сбоев, которое более масштабируемо, чем механизм сердцебиения. В-третьих, он используется в качестве уровня сообщений для уведомления о событиях, например, когда происходят выборы лидера.
Серверы в каждом центре обработки данных являются частью набора узлов Raft. Это означает, что они работают вместе и выбирают лидера, сервер с дополнительной работой. Лидер обрабатывает все запросы и транзакции. Транзакции также должны быть реплицированы на все остальные узлы в рамках консенсусного протокола. Из-за этого требования, когда сервер, не являющийся лидером, получает запрос RPC, он перенаправляет запрос лидеру кластера.
Серверный узел также действует как часть пула сплетен WAN. Этот пул отличается от пула LAN тем, что он оптимизирован для более высокой задержки в Интернете и содержит только другие серверные узлы Consul. Цель этого пула — позволить центрам обработки данных обнаруживать друг друга с минимальным вмешательством. Это позволяет новому центру обработки данных легко присоединиться к существующим сплетням WAN. Поскольку все серверы работают в этом пуле, он также поддерживает запросы между центрами обработки данных. Когда сервер получает запрос из другого центра обработки данных, он перенаправляет его на сервер с правильными данными. Затем сервер перенаправляет его локальному лидеру.
Это оставляет только очень низкую связь между центрами обработки данных, но благодаря обнаружению сбоев, кэшированию соединений и мультиплексированию запросы между центрами обработки данных выполняются относительно быстро и надежно.
Процесс обнаружения регистрации службы Консул
Консул наиболее широко используется в отрасли в качестве реестра услуг. Как и тип Eureka, консул используется в качестве реестра услуг. Процесс его регистрации и обнаружения выглядит следующим образом:
В приведенной выше блок-схеме есть три роли, а именно: реестр услуг, поставщик услуг и потребитель услуг.
- Когда поставщик услуг запущен, он отправит в Consul запрос на отправку метаданных, таких как его хост, IP-адрес, имя приложения, проверка работоспособности и т. д., в Consul.
- После получения регистрации Провайдера Консул периодически отправляет Провайдеру запрос на проверку работоспособности, чтобы проверить работоспособность Провайдера.
- Потребитель службы Потребитель получит список регистрации службы из центра регистрации Консул.Когда потребитель службы использует службу, он получит конкретный экземпляр службы (один или несколько) из списка регистрации службы в соответствии с именем приложения, тем самым завершив сервисный звонок.
Consul VS Eureka
Eureka — это инструмент для обнаружения сервисов. Архитектура в основном клиент-серверная, с набором серверов Eureka на центр обработки данных, обычно по одному на зону доступности. Как правило, клиенты Eureka используют встроенный SDK для регистрации и обнаружения сервисов. Для неинтегрированных клиентов службы обнаруживаются прозрачно через Eureka с использованием вспомогательного модуля, такого как Ribbon.
Eureka использует репликацию с максимальной эффективностью, чтобы обеспечить слабо согласованное представление услуг. Когда клиент регистрируется на сервере, этот сервер будет пытаться выполнить репликацию на другие серверы без каких-либо гарантий. Регистрация службы имеет короткое время жизни (TTL), требующее от клиента пульсации сервера. Неработоспособные службы или узлы перестанут пульсировать, что приведет к истечению времени ожидания и удалению их из реестра. Запросы на обнаружение могут быть перенаправлены в любую службу, которая может обслуживать устаревшие или отсутствующие данные из-за максимально возможной репликации. Эта упрощенная модель обеспечивает простое управление кластером и высокую масштабируемость.
Consul предоставляет ряд суперфункций, в том числе расширенные проверки работоспособности, хранилище ключей/значений и осведомленность о нескольких центрах обработки данных. Консулу требуется набор серверов в каждом центре обработки данных и прокси-сервер на каждом клиенте, аналогично использованию сайдкара, такого как Ribbon. Прокси-сервер Consul позволяет большинству приложений не знать о Consul, выполнять регистрацию службы через файлы конфигурации и обнаружение через DNS или боковые панели балансировщика нагрузки.
Consul обеспечивает надежные гарантии согласованности, поскольку серверы реплицируют состояние с использованием протокола Raft. Consul поддерживает расширенные проверки работоспособности, включая TCP, HTTP, сценарии, совместимые с Nagios/Sensu, или TTL на основе Eureka. Клиентские узлы участвуют в проверках работоспособности на основе слухов, которые распределяют работу проверок работоспособности, в отличие от централизованных тактов, которые становятся проблемой масштабируемости. Запросы на обнаружение перенаправляются выбранному лидеру Консула, что делает их очень последовательными по умолчанию. Клиенты, допускающие устаревшие операции чтения, позволяют любому серверу обрабатывать свои запросы, обеспечивая линейную масштабируемость, такую как Eureka.
Высокая согласованность Consul означает, что его можно использовать в качестве службы блокировки для выбора лидера и координации кластера. Eureka не предоставляет подобных гарантий, и часто необходимо запускать ZooKeeper для служб, которые должны выполнять координацию или имеют более строгие требования к согласованности.
Consul предоставляет функциональный набор инструментов, необходимый для поддержки сервис-ориентированной архитектуры. Это включает в себя обнаружение служб, а также расширенные проверки работоспособности, блокировку, ключ/значение, федерацию нескольких центров обработки данных, системы событий и списки управления доступом. Consul и экосистемы таких инструментов, как consul-template и envconsul, пытаются свести к минимуму изменения приложений, необходимые для интеграции, чтобы избежать необходимости встроенной интеграции через SDK. Eureka является частью более крупного пакета Netflix OSS, который предполагает, что приложения будут относительно однородными и тесно интегрированными. Таким образом, Eureka решает только ограниченную часть проблемы, и ожидается, что другие инструменты, такие как ZooKeeper, могут использоваться одновременно.
Eureka Server принимает режим репликации P2P, но он не гарантирует, что операция репликации будет успешной, поэтому он обеспечивает в конечном итоге согласованное представление экземпляров службы; регистрационная информация клиента на сервере имеет срок аренды на один раз. не получает пульс, отправленный клиентом в течение указанного периода, сервер определит, что служба, зарегистрированная клиентом, неработоспособна, и запланированная задача удалит ее из реестра. Consul отличается от Eureka. Consul использует алгоритм Raft, который может обеспечить надежную гарантию согласованности. Агент Consul эквивалентен Netflix Ribbon + Netflix Eureka Client и относительно прозрачен для приложения. В то же время, по сравнению с Eureka, централизованный Механизм обнаружения сердцебиения , агент Consul может участвовать в проверке работоспособности на основе протокола goosip, который распределяет давление обнаружения сердцебиения на стороне сервера. В дополнение к этому Consul обеспечивает встроенную поддержку нескольких центров обработки данных и т. д.
Скачать и установить Консул
Консул написан на языке Go и поддерживает Linux, Mac, Windows и другие основные операционные системы.В этой статье используется операционная система Windows.Адрес для скачивания:woohoo.consul.IO/downloads.Также…
consul --version
Терминал отображает следующее:
Consul v1.4.2
Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use p
rotocol >2 when speaking to compatible agents)
Докажите, что загрузка консула была успешной и исполняемой.
Вот некоторые распространенные команды выполнения consul:
Заказ | объяснять | Пример |
---|---|---|
agent | управлять агентом-консулом | consul agent -dev |
join | Добавляем агента в консульский кластер | consul join IP |
members | Список участников в кластере консула | consul members |
leave | удалить узел из кластера | consul leave |
Дополнительные команды можно найти на официальном сайте:woohoo.consul.IO/docs/com man…
Запустите в режиме разработки:
consul agent -dev
Запуск прошел успешно, зайдите в браузере:http://localhost:8500, отображаемый интерфейс выглядит следующим образом:
spring cloud consul
Этот проект обеспечивает интеграцию Consul для приложений Spring Boot путем автоматической настройки и привязки к среде Spring и другим идиомам модели программирования Spring. С помощью нескольких простых аннотаций вы можете быстро включать и настраивать общие шаблоны в своем приложении и создавать большие распределенные системы с использованием компонентов на основе Consul. Предусмотренные режимы включают обнаружение службы, шину управления и настройку. Интеллектуальная маршрутизация (Zuul) и балансировка нагрузки на стороне клиента (лента), автоматические выключатели (Hystrix) обеспечиваются за счет интеграции с Spring Cloud Netflix.
Используйте Spring Cloud Consul для регистрации и обнаружения сервисов
В этом разделе на примере объясняется, как использовать Spring Cloud Consul для регистрации и обнаружения сервисов, а также использовать Feign для использования сервисов. Прежде чем объяснять, агент-консул был запущен, и правильная страница может отображаться в браузере http://localhost:8500. В этом случае есть 2 проекта, а именно:
Название конструкции | порт | описывать |
---|---|---|
consul-provider | 8763 | поставщики услуг |
consul-consumer | 8765 | потребители услуг |
Среди них поставщик услуг и потребитель услуг регистрируются в консуле соответственно.После завершения регистрации потребитель услуг использует услугу поставщика услуг через FeignClient.
Поставщик услуг консул-провайдер
Создайте консул-провайдер проекта и введите следующие зависимости в файл pom проекта, включая начальную зависимость консула-обнаружения, которая используется консулом весеннего облака для регистрации и обнаружения сервисов с консулом, а также для связи с REST API. Кроме того, начальные зависимости сети используются для предоставления REST API внешнему миру. код показывает, как показано ниже:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Сделайте следующую конфигурацию в файле конфигурации проекта application.yml:
server:
port: 8763
spring:
application:
name: consul-provider
cloud:
consul:
host: localhost
port: 8500
discovery:
serviceName: consul-provider
В приведенной выше конфигурации указано, что порт запуска программы — 8763, имя приложения — consul-provider, а адрес реестра консула — localhost:8500.
Добавьте аннотацию @EnableDiscoveryClient в класс запуска ConsulProviderApplication программиста, чтобы включить функцию обнаружения службы.
@SpringBootApplication
@EnableDiscoveryClient
public class ConsulProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ConsulProviderApplication.class, args);
}
}
Напишите REST API, который является запросом GET и возвращает порт запуска текущей программы.Код выглядит следующим образом.
@RestController
public class HiController {
@Value("${server.port}")
String port;
@GetMapping("/hi")
public String home(@RequestParam String name) {
return "hi "+name+",i am from port:" +port;
}
}
Запустите проект и перейдите в браузере по адресу http://localhost:8500. Страница выглядит следующим образом:
Как видно из рисунка выше, сервис консул-провайдер успешно зарегистрирован в консуле.
Консул-поставщик услуг потребителя
Процесс построения потребителя службы такой же, как у поставщика службы.Зависимости, представленные в файле pom, такие же, как у поставщика службы, а файл конфигурации application.yml такой же, как у поставщика службы.Разница в том, что порт — 8765, а имя службы — консул-потребитель.
Напишите FeignClient, который вызывает REST API консула-провайдера, код выглядит следующим образом:
@FeignClient(value = "consul-provider")
public interface EurekaClientFeign {
@GetMapping(value = "/hi")
String sayHiFromClientEureka(@RequestParam(value = "name") String name);
}
Код сервисного уровня выглядит следующим образом:
@Service
public class HiService {
@Autowired
EurekaClientFeign eurekaClientFeign;
public String sayHi(String name){
return eurekaClientFeign.sayHiFromClientEureka(name);
}
}
Предоставить REST API внешнему миру, который вызывает сервис консул-провайдера, код такой:
@RestController
public class HiController {
@Autowired
HiService hiService;
@GetMapping("/hi")
public String sayHi(@RequestParam( defaultValue = "forezp",required = false)String name){
return hiService.sayHi(name);
}
}
Посетите http://localhost:8765/hi в браузере, и браузер ответит следующим образом:
hi forezp,i am from port:8763
Это показывает, что консул-потребитель успешно вызвал службу консула-провайдера. Это показывает, что служба консул-провайдер зарегистрирована в реестре консула. consul-consumer может получить регистрационный список реестра для использования услуг.
Используйте Spring Cloud Consul Config в качестве центра конфигурации службы
Consul можно использовать не только для регистрации и обнаружения сервисов, но также поддерживает хранение пар ключ-значение, которые можно использовать в качестве центра конфигурации. Spring Cloud предоставляет зависимости Spring Cloud Consul Config для интеграции с Consul в качестве центра конфигурации. Сейчас я объясню, как использовать Консул как центр конфигурации в виде кейса, этот кейс модифицирован на основе консула-провайдера предыдущего кейса. Во-первых, добавьте стартовые зависимости consul-config в pom-файл проекта, код выглядит следующим образом:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>
Затем добавьте следующую конфигурацию в файл конфигурации application.yml, конфигурация выглядит следующим образом:
spring:
profiles:
active: dev
Приведенная выше конфигурация указывает, что профили, считываемые при запуске SpringBoot, — это dev. Затем настройте следующую конфигурацию в файле начальной конфигурации проекта bootstrap.yml:
spring:
application:
name: consul-provider
cloud:
consul:
host: localhost
port: 8500
discovery:
serviceName: consul-provider
config:
enabled: true
format: yaml
prefix: config
profile-separator: ':'
data-key: data
Элементы конфигурации spring.cloud.consul.config описываются следующим образом:
- enabled Установите, включена ли конфигурация, по умолчанию true
- format устанавливает формат настроенного значения, которое может быть yaml и properties
- префикс устанавливает базовый каталог для конфигурации, такой как config
- defaultContext устанавливает конфигурацию по умолчанию, читаемую всеми приложениями, этот пример бесполезен
- profileSeparator разделитель конфигурации профилей, по умолчанию ','
- ключ даты — это имя ключа, настроенное приложением, а значение — строка, настроенная для всего приложения.
Зайдите в интерфейс управления хранилищем KV консула на веб-странице, а именно http://localhost:8500/ui/dc1/kv, создайте запись,
Значение ключа: config/consul-provider:dev/data Значения стоимости следующие:
foo:
bar: bar1
server:
port: 8081
Создайте новый API в проекте consul-provider, который возвращает значение foo.bar, прочитанное из центра конфигурации консула, код выглядит следующим образом:
@RestController
public class FooBarController {
@Value("${foo.bar}")
String fooBar;
@GetMapping("/foo")
public String getFooBar() {
return fooBar;
}
}
Запустите проект, вы увидите, что порт запуска программы — 8081, который является портом server.port, настроенным центром конфигурации консула. После запуска проекта посетите http://localhost:8081/foo в браузере, и на странице отобразится bar1. Видно, что приложение consul-provider успешно прочитало конфигурацию foo.bar из центра конфигурации консула.
Конфигурация динамического обновления
При использовании конфигурации Spring Cloud в качестве центра конфигурации вы можете использовать шину конфигурации Spring Cloud для поддержки конфигурации динамического обновления. Spring Cloud Comsul Config поддерживает динамическое обновление по умолчанию. Вам нужно только добавить аннотацию @RefreshScope к классу, который необходимо динамически обновлять. Измененный код выглядит следующим образом:
@RestController
@RefreshScope
public class FooBarController {
@Value("${foo.bar}")
String fooBar;
@GetMapping("/foo")
public String getFooBar() {
return fooBar;
}
}
Запустите проект consul-provider, перейдите по адресу http://localhost:8081/foo в браузере, и на странице отобразится bar1. потом Получите доступ к интерфейсу управления хранилищем KV консула на веб-странице, а именно http://localhost:8500/ui/dc1/kv, и измените значение config/consul-provider:dev/data.Измененное значение выглядит следующим образом:
foo:
bar: bar2
server:
port: 8081
Не перезапускайте консул-провайдер в это время, посетите http://localhost:8081/foo в браузере, и на странице отобразится bar2. Видно, что последняя конфигурация foo.bar вступила в силу без перезапуска приложения.
Меры предосторожности
- Значение Value, хранящееся в KV, поддерживаемом консулом, не может превышать 512 КБ.
- В режиме разработки Consul все данные хранятся в памяти. При перезапуске Consul все данные будут потеряны. В формальной среде данные Consul будут постоянными и не будут потеряны.
использованная литература
Woohoo. У ИТ есть облако know.com/spring…
весеннее облако.cao cao/весна-уродливая...
Блог Woohoo.cn на.com/Roosevelt90/Afraid/602…
Отсканируйте код, чтобы следовать за сюрпризом
(Просьба указывать автора и источник при перепечатке статей с этого сайтаБлог Фан Чжипэна)