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