Как сервер общается с клиентом в RAFT? - PullRequest
0 голосов
/ 16 октября 2018

В соответствии с документом RAFT упоминается, что каждый сервер помимо сервера-лидера имеет свою собственную запись журнала и свой конечный автомат, и каждый конечный автомат обрабатывает одинаковую последовательность команд из журнала.

У меня естьнесколько запросов по этому сценарию.

[1] Если 1 клиент делает какой-либо запрос на сервер-лидер, это означает, что все серверы-последователи обрабатывают запросы и выдают результаты?Но кто сообщает клиенту выходные данные?

[2] Если ответом на первый вопрос является только лидер, он передает выходные данные клиенту, тогда зачем использовать несколько последователей, вычисляющих / обрабатывающих одни и те же входные данные?в их конечных автоматах из записей журнала.Поскольку уже известно, что RAFT гарантирует, что все записи журнала должны содержать одинаковые команды в одинаковом порядке.Разве для лидера достаточно обработать запись из журнала на его автомате и вернуть ее клиенту?

[3] Также, если несколько клиентов делают одинаковые запросы к серверу, не так ли?только лидер, который сообщает результат всем клиентам, или здесь появляется изображение последователя?

1 Ответ

0 голосов
/ 17 октября 2018
  1. Ответ на ваш первый вопрос действительно заключается в том, что вывод конечного автомата лидера возвращается клиенту.

  2. Технически, с базовым протоколом Raft нету последователей причины есть для немедленного применения записей к их конечным автоматам.Действительно, последователи, как правило, даже не узнают об обязательстве вступления до тех пор, пока лидер не ответит клиенту.Основная причина, по которой подписчики применяют команды к своим конечным автоматам, заключается в том, чтобы просто идти в ногу с лидером.В случае сбоя лидера лидером будет выбран последователь, и он должен будет обслуживать запросы клиентов.После избрания новый руководитель должен будет применить все неприменимые команды к своему конечному автомату, прежде чем он сможет начать обслуживание клиентских запросов.Применение команд к подписчикам, когда они зафиксированы, снижает стоимость смены лидеров, а стоимость применения команд к подписчикам в любом случае низкая, поскольку они не обслуживают запросы клиентов.

  3. Есть еще одинпричина применять команды к подписчикам, и ваш третий вопрос близок к его раскрытию.Только лидер когда-либо отвечает на клиентские записи запросов, но последователи могут отвечать на read запросов с ослабленными гарантиями согласованности (последовательной согласованности).Для этого ведущий возвращает индекс записи для завершенных команд вместе с выводом.Затем клиент может запросить подписчика, и как только конечный автомат подписчика достигнет хотя бы индекса последней записи клиента (предоставленного клиентом), подписчик может запросить конечный автомат и вернуть выходные данные.Это позволяет клиентам распределять запросы по лидеру и подписчикам, и, вероятно, это лучшая причина, по которой практические системы гарантируют, что конечные автоматы подписчиков пытаются не отставать от состояния лидера.

...