Консул - Архитектура

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

Как мы видим, существует три разных сервера, которыми управляет Consul. Рабочая архитектура работает по алгоритму использования рафта, который помогает нам выбрать лидера из трех разных серверов. Затем эти серверы маркируются в соответствии с такими тегами, какFollower а также Leader. Как следует из названия, ведомый отвечает за выполнение решений лидера. Все эти три сервера дополнительно связаны друг с другом для любой коммуникации.

Каждый сервер взаимодействует со своим собственным клиентом, используя концепцию RPC. Общение между Клиентами возможно благодаряGossip Protocolкак указано ниже. Связь с Интернетом может быть сделана доступной с использованием TCP или сплетен. Это соединение находится в прямом контакте с любым из трех серверов.

Алгоритм Raft

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

А Raft Clusterсодержит несколько серверов, обычно по нечетному числу. Например, если у нас пять серверов, это позволит системе выдержать два отказа. В любой момент времени каждый сервер находится в одном из трех состояний:Leader, Follower, или Candidate. При нормальной работе есть ровно один лидер, а все остальные серверы - последователи. Эти последователи находятся в пассивном состоянии, т. Е. Они не отправляют запросы самостоятельно, а просто отвечают на запросы лидеров и кандидата.

На следующем рисунке описана модель рабочего процесса, с помощью которой работает алгоритм рафта.

Ключевые значения данных

Начиная с версии 0.7.1 Consul, были введены отдельные данные значения ключа. Команда KV используется для взаимодействия с хранилищем ключей и значений Consul через командную строку. Он предоставляет команды верхнего уровня дляInserting, Updating, Reading а также Deletingиз магазина. Чтобы получить хранилище объектов Key / Value, мы вызываем метод KV, доступный для клиента consul -

kv := consul.KV()

В KVPair Structureиспользуется для представления одной записи типа ключ / значение. Мы можем увидеть структуру Consul KV Pair в следующей программе.

type KVPair struct {
   Key string
   CreateIndex uint64
   ModifyIndex uint64
   LockIndex uint64
   Flags uint64
   Value []byte
   Session string
}

Здесь различные структуры, упомянутые в приведенном выше коде, могут быть определены следующим образом:

  • Key- Это имя URL с косой чертой. Например - сайты / 1 / домен.

  • CreateIndex - Номер индекса, присвоенный при первом создании ключа.

  • ModifyIndex - Номер индекса, присвоенный при последнем обновлении ключа.

  • LockIndex - Номер индекса, созданный при новой блокировке записи ключа / значения

  • Flags - Приложение может использовать его для установки пользовательского значения.

  • Value - Это байтовый массив размером не более 512 КБ.

  • Session - Его можно установить после создания объекта сеанса.

Типы протокола

В Consul есть два типа протоколов, которые называются -

  • Протокол консенсуса и
  • Протокол сплетен

Давайте теперь разберемся с ними подробно.

Протокол консенсуса

Консенсусный протокол используется Consul для обеспечения согласованности, как описано в теореме CAP. Этот протокол основан на алгоритме Raft. При реализации протокола консенсуса используется алгоритм Raft, когда узлы raft всегда находятся в одном из трех состояний: Follower, Candidate или Leader.

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

Протокол сплетен можно использовать для управления членством, отправки и получения сообщений в кластере. В консуле использование протокола сплетен происходит двумя способами:WAN (Беспроводная сеть) и LAN(Локальная сеть). Есть три известные библиотеки, которые могут реализовать алгоритм сплетен для обнаружения узлов в одноранговой сети:

  • teknek-gossip - Он работает с UDP и написан на Java.

  • gossip-python - Он использует стек TCP, и также можно обмениваться данными через построенную сеть.

  • Smudge - Он написан на Go и использует UDP для обмена информацией о статусе.

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

Вызов удаленных процедур

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

Настоящая прелесть использования RPC в Consul заключается в том, что он помогает нам избежать проблем с задержкой, которые некоторое время назад были у большинства инструментов службы обнаружения. До RPC у Consul было толькоTCP а также UDPсоединения на основе, которые были хороши для большинства систем, но не в случае распределенных систем. RPC решает такие проблемы за счет сокращения периода времени передачи пакетной информации из одного места в другое. В этой области GRPC от Google - отличный инструмент, на который стоит рассчитывать, если кто-то хочет наблюдать тесты и сравнивать производительность.