Я прочитал статью об алгоритме Raft и получил вопрос, связанный с последовательностью операций, выполняемых Raft при получении запроса клиента:
Чтобы преодолеть сценарий единой точки отказа, Raft полагается на ведение реплицированного журнала на других машинах, алгоритм также обращается к модулю консенсуса для полного управления журналированием. Последовательность операций следующая:
- Клиентский запрос получен в конечном автомате лидера, лидер добавляет команду в свой журнал.
- Лидер отправляет RPC AppendEntries своим последователям, чтобы клонировать команду в их локальных журналах, и ожидает подтверждения от большинства последователей, что запись была успешно добавлена в их локальный файл журнала.
- Как только было получено подтверждение того, что запрос был успешно зарегистрирован в большинстве журналов последователей, запрос фиксируется в конечном автомате лидера, вызывая переход, возвращая результат этого перехода клиенту.
- В конечном итоге лидер уведомляет последователей о зафиксированных записях в последующих AppendEntries RPC.
Если вышеизложенное понимание верно, то я могу утверждать, что клиентский запрос задерживается в течение некоторого времени для завершения процесса репликации, а также могу утверждать, что успех клиентского запроса во многом зависит от успеха репликации. процесс (поскольку клиентская команда / запрос не выполняется на машине лидера до тех пор, пока не будет получено подтверждение большинства). Вопрос в том, сколько времени в среднем потребуется, чтобы клиентский запрос получил ответ после завершения процедуры репликации, также эффективно ли это работает для систем реального времени?