Базовые концепции Consul, сравнения с коллегами и внутренности

Микросервисы

В этой статье мы в основном говорим об основных концепциях Consul, внутренних принципах его реализации и сравнении с Eureka.

1. Что такое Консул?

Consul — это сервисная сетка, предоставляющая полнофункциональную плоскость управления с обнаружением, настройкой и сегментацией сервисов. Каждую из этих возможностей можно использовать по отдельности по мере необходимости или вместе для создания полной сервисной сетки. Консулу требуется плоскость данных, и он поддерживает прокси-модели и собственные модели интеграции. Consul поставляется с простым встроенным прокси-сервером, поэтому все работает «из коробки», но также поддерживает интеграцию сторонних прокси-серверов, таких как Envoy. Основные возможности, предоставляемые Консулом:

  • Обнаружение службы: клиенты Consul могут регистрировать службы, такие как API или MySQL, а другие клиенты могут использовать Consul для обнаружения поставщиков данной службы. Используя DNS или HTTP, приложения могут легко находить службы, от которых они зависят.
  • Проверки работоспособности: клиент Consul может обеспечить любое количество проверок работоспособности, связанных с данной службой («веб-сервер возвращает 200 OK») или локальным узлом («использование памяти ниже 90%). Операции могут использовать эту информацию для мониторинга работоспособности кластера, а компоненты обнаружения служб используют эту информацию для маршрутизации трафика от неработоспособных хостов.
  • Хранилище KV: приложения могут использовать иерархическое хранилище ключей и значений Consul для любых целей, включая динамическую настройку, тегирование функций, координацию, выборы лидера и многое другое. Простой HTTP API упрощает использование.
  • Безопасная служебная связь: Consul может генерировать и распространять сертификаты TLS для служб для установления взаимных соединений TLS.Intentions(Намерение) можно использовать для определения того, каким службам разрешено взаимодействовать. Вместо сложных сетевых топологий и статических правил брандмауэра можно легко управлять сегментацией услуг с помощью намерений, которые могут меняться в режиме реального времени.
  • Несколько центров обработки данных: Consul поддерживает несколько центров обработки данных. Это означает, что пользователям Consul не нужно беспокоиться о создании дополнительных уровней абстракции для масштабирования на несколько регионов.

# 2. Архитектура Консула

2.1 Терминология в Консуле

Прежде чем описывать архитектуру, мы предоставляем глоссарий, чтобы помочь понять, что обсуждается:

  • Агент. Агент — это долговременный демон на каждом члене кластера Consul. Он запускается запуском команды агента консула. Агент может работать в режиме клиента или сервера. Поскольку на всех узлах должен работать агент, проще назвать узел клиентом или сервером, но есть и другие экземпляры агента. Все прокси могут запускать интерфейс DNS или HTTP и несут ответственность за выполнение проверок и синхронизацию служб.

  • Режим клиента (клиент-агент) — клиент — это агент, который перенаправляет все вызовы RPC на сервер. Клиенты относительно не имеют гражданства. Единственная фоновая деятельность, выполняемая клиентом, — это участие в пуле сплетен в локальной сети. Это стоит очень, очень мало ресурсов и потребляет лишь небольшую часть пропускной способности сети.

  • Режим сервера (серверный агент) — сервер — это агент с расширенными обязанностями, включая участие в кворуме Raft, поддержание состояния кластера, ответ на запросы RPC, обмен сплетнями WAN с другими центрами обработки данных и переадресацию запросов лидерам или удаленным центрам обработки данных.

  • Центр обработки данных. Хотя определение центра обработки данных может показаться очевидным, необходимо учитывать тонкие детали. Например, считается ли в EC2, что несколько зон доступности содержат один центр обработки данных? Мы определяем центр обработки данных как выделенную сетевую среду с малой задержкой и высокой пропускной способностью. Это исключает связь через общедоступный Интернет, но для наших целей несколько зон доступности в одном регионе EC2 будут считаться частью одного центра обработки данных.

  • Консенсус. В нашей документации мы используем термин «консенсус» для обозначения согласия в отношении избранного лидера и соглашения в отношении порядка транзакций. Поскольку эти операции относятся кКонечный автомат, поэтому наше определение консенсуса подразумевает непротиворечивость реплицированных конечных автоматов.ВикипедияКонсенсус более подробно описан выше,здесьНаша реализация описана.

  • Сплетни - Консул построен наSerfвыше, он обеспечивает полноепротокол сплетен(Протокол сплетен), используемый для многих целей. Serf обеспечивает обслуживание участников, обнаружение сбоев и трансляцию событий. Их использование подробно описано в документации сплетен. Сплетни участвуют в случайном обмене данными между узлами, в основном через UDP.

  • LAN Gossip — относится к пулу LAN Gossip, который содержит узлы, расположенные в той же локальной сети или центре обработки данных.

  • WAN Gossip — относится к пулу сплетен WAN, который содержит только серверы. Эти серверы в основном расположены в разных центрах обработки данных и обычно обмениваются данными через Интернет или глобальную сеть.

  • RPC — удаленный вызов процедур. Это механизм запроса/ответа, который позволяет клиентам делать запросы к серверу.

2.2 10 000 футов, чтобы увидеть Консула

Consul 架构图
Давайте разберем это изображение и опишем каждую часть. Во-первых, мы видим, что есть два центра обработки данных, помеченные как «один» и «два». Consul обеспечивает первоклассную поддержку для нескольких центров обработки данных и ожидает, что это будет обычным случаем.

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

**Все узлы в центре обработки данных участвуют в протоколе сплетен. **Это означает, что существует пул слухов, который содержит все узлы в данном центре обработки данных. Это служит нескольким целям: во-первых, клиенту не нужно настраивать адрес сервера, обнаружение выполняется автоматически. Во-вторых, работа по обнаружению отказов узлов не размещается на сервере, а распределяется. Это делает обнаружение отказов более масштабируемым, чем наивная схема пульсации. В-третьих, он используется в качестве уровня обмена сообщениями для уведомления о важных событиях, таких как выборы лидера.

Серверы в каждом центре обработки данных являются частью единого набора одноранговых узлов Raft. Это означает, что они совместно избирают лидера, выбранный сервер с дополнительными обязанностями.Лидер обрабатывает все запросы и транзакции. Транзакции также должны быть реплицированы на все одноранговые узлы в рамках консенсусного протокола. Из-за этого требования, когда сервер, не являющийся лидером, получает запрос RPC, он перенаправляет его лидеру кластера.

Серверные узлы работают как часть пула сплетен WAN.. Этот пул отличается от пула LAN, потому что он оптимизирован для высокой задержки в Интернете и, как ожидается, будет содержать только другие серверные узлы Consul. Цель этого пула — позволить центрам обработки данных обнаруживать друг друга с минимальным вмешательством. Создать новый центр обработки данных онлайн так же просто, как присоединиться к существующему пулу сплетен WAN. Поскольку все серверы работают в этом пуле, он также поддерживает запросы между центрами обработки данных.Когда сервер получает запрос для другого центра обработки данных, он перенаправляет его на случайный сервер в правильном центре обработки данных. Затем сервер может переадресовать локальному лидеру.

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

Как правило, данные между разными центрами обработки данных Consul не реплицируются. Когда делается запрос к ресурсу в другом центре обработки данных, локальный сервер Consul перенаправляет запрос RPC на удаленный сервер Consul для этого ресурса и возвращает результат. Если удаленный ЦОД недоступен, то и эти ресурсы будут недоступны, но на локальный ЦОД это не повлияет. В некоторых особых случаях могут быть реплицированы ограниченные подмножества данных, например, с использованиемВстроенный ACL Consulфункция копирования или что-то вродеconsul-replicateтакое внешнее средство.

В некоторых местах клиентские прокси могут кэшировать данные с сервера, чтобы сделать их доступными локально для повышения производительности и надежности. Примеры включают сертификаты Connect и намерения, которые позволяют клиентским прокси-серверам принимать локальные решения о входящих запросах на подключение без обращения к серверу. Некоторые конечные точки API также поддерживают дополнительное кэширование результатов. Это помогает повысить надежность, поскольку локальный прокси-сервер может продолжать отвечать на определенные запросы, такие как обнаружение службы или авторизация из кэшированных соединений, даже если соединение с сервером потеряно или сервер временно недоступен.

3. Протокол сплетен и протокол Raft

Чтобы понять принцип Consul, нельзя обойти протокол Gossip и протокол Raft.

3.1 Протокол сплетен

3.1.1 Что такое протокол сплетен

Как следует из названия, алгоритм сплетен вдохновлен сплетнями в офисе. Пока один человек сплетничает об этом, все люди узнают информацию о сплетнях в течение ограниченного времени. Этот метод также похож на распространение вирусов, поэтому у Gossip много псевдонимов «алгоритм сплетен», «алгоритм распространения эпидемий», «алгоритм вирусной инфекции», «алгоритм распространения слухов». Подробнее см.этот пост в блоге

3.1.2 Протокол сплетен в Consul

Консул использует два разных пула сплетен. Мы называем каждый пул пулом LAN или WAN соответственно.

В каждом центре обработки данных Consul есть пул сплетен в локальной сети, который содержит всех членов центра обработки данных, включая клиентов и серверы. Пулы LAN используются для некоторых целей. Информация о членстве позволяет клиентам автоматически обнаруживать серверы, уменьшая объем необходимой настройки. Распределенное обнаружение сбоев позволяет распределять работу по обнаружению сбоев по всему кластеру, а не централизованно на нескольких серверах. Наконец, пулы сплетен позволяют надежно и быстро транслировать такие события, как выборы лидеров.

Пул глобальной сети уникален в глобальном масштабе, поскольку все серверы должны участвовать в пуле глобальной сети независимо от центра обработки данных. Информация о членстве, предоставляемая пулом WAN, позволяет серверам выполнять запросы между центрами обработки данных. Интегрированное обнаружение сбоев позволяет Consul изящно обрабатывать весь центр обработки данных с потерянными соединениями или только один сервер в удаленном центре обработки данных.

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

3.2 Протокол плота

Протокол Raft, в основном отвечающий за выбор лидера и синхронизацию журналов. Я рекомендую вам взглянутьэтот блог, вы также можете пойти вэтот сайтЧерез анимацию испытайте принцип плотного протокола онлайн, как играя в игру.

4. Сравнение с Эврикой

Поскольку Eureka является частью пакета Netflix OSS, версия 2.x не обслуживается, но версия 1.x все еще активна.

在这里插入图片描述
Здесь мы сосредоточимся на разнице между консулом и Эврикой. По сравнению с другими системами можноЩелкните этот URL-адрес, чтобы убедиться в этом.

Eureka — это инструмент для обнаружения сервисов. Архитектура в основном клиент-серверная, с набором серверов Eureka на центр обработки данных, обычно по одному на зону доступности. Как правило, клиенты Eureka используют встроенный SDK для регистрации и обнаружения сервисов. Для неинтегрированных клиентов службы обнаруживаются прозрачно через Eureka с использованием вспомогательного модуля, такого как Ribbon.

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

Consul предоставляет ряд суперфункций, в том числе расширенные проверки работоспособности, хранилище ключей/значений и осведомленность о нескольких центрах обработки данных.. Консулу требуется набор серверов в каждом центре обработки данных и прокси-сервер на каждом клиенте, аналогично использованию сайдкара, такого как Ribbon. Прокси-сервер Consul позволяет большинству приложений не знать о Consul, выполнять регистрацию службы через файлы конфигурации и обнаружение через DNS или боковые панели балансировщика нагрузки.

Consul обеспечивает надежные гарантии согласованности, поскольку серверы реплицируют состояние с использованием протокола Raft.. Consul поддерживает расширенные проверки работоспособности, включая TCP, HTTP, сценарии, совместимые с Nagios/Sensu, или Eureka на основе Ture. Клиентские узлы участвуют в проверках работоспособности на основе слухов, которые распределяют работу проверок работоспособности, в отличие от централизованных тактов, которые становятся проблемой масштабируемости. Запросы на обнаружение перенаправляются избранному лидеру консулов, что позволяет им по умолчанию строго согласовываться. Клиенты, допускающие устаревшие операции чтения, позволяют любому серверу обрабатывать свои запросы, обеспечивая линейную масштабируемость, такую ​​как Eureka.

Высокая согласованность Consul означает, что его можно использовать в качестве службы блокировки для выбора лидера и координации кластера. Eureka не предоставляет подобных гарантий, и часто необходимо запускать ZooKeeper для служб, которые должны выполнять координацию или имеют более строгие требования к согласованности.

Consul предоставляет функциональный набор инструментов, необходимый для поддержки сервис-ориентированной архитектуры. Это включает в себя обнаружение служб, а также расширенные проверки работоспособности, блокировку, ключ/значение, федерацию нескольких центров обработки данных, системы событий и списки управления доступом. Как Consul, так и инструменты экосистемы, такие как consul-template и envconsul, пытаются свести к минимуму изменения приложений, необходимые для интеграции, чтобы избежать необходимости встроенной интеграции через SDK. Eureka является частью более крупного пакета Netflix OSS, который предполагает, что приложения будут относительно однородными и тесно интегрированными. Таким образом, Eureka решает только ограниченную часть проблемы, и ожидается, что другие инструменты, такие как ZooKeeper, могут использоваться одновременно.

Подводя итог вышеприведенным пунктам:

  • Consul обеспечивает строгую согласованность через протокол Raft, а Eureka обеспечивает слабую согласованность.
  • Consul лучше распределяет работу проверок здоровья через протокол Gossip, вместо централизованного пульса Eureka (требует, чтобы клиент постоянно запрашивал сервер)
  • Благодаря строгой согласованности, обеспечиваемой Raft, Consul можно использовать для выбора руководства и службы блокировки для кластерных протоколов, в то время как Eureka может полагаться только на Zookeeper.

Кроме того, Spring Cloud официально предоставляет поддержку Consul, сайт https://spring.io/projects/spring-cloud-consul, о конкретном использовании напишу статью позже.

5. Ссылка:

woohoo.consul.IO/intro/index… woohoo.consul.IO/intro/vs/EU… woohoo.consul.IO/docs/intern… woohoo.consul.IO/docs/intern… woohoo.consul.IO/docs/intern… Блог woohoo.cn на.com/administrative village/afraid/61… Блог Woohoo.cn на.com/want baby/afraid/10…

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

在这里插入图片描述