Лидер рафта обрабатывает клиентские запросы синхронно или асинхронно?
В плоту лидер
- запросы на получение,
- побег записи журнала,
- отправлять RPC,
- применить к конечному автомату
- и, наконец, ответ клиентов.
этому процессу нужно некоторое время, так как же обрабатывать следующие запросы? отказаться от них?
2 ответа
Дело в том, что все участники, которые все еще работают, согласны с состоянием системы (или, по крайней мере, они должны сделать это, когда у них будет время, чтобы узнать, каков общий консенсус). Это означает, что все они согласны с тем, какие сообщения были получены и в каком порядке. Это также означает, что все они должны получить один и тот же ответ, когда вычисляют последствия получения этих сообщений. Таким образом, сообщения должны обрабатываться последовательно, или, если они обрабатываются параллельно, участники должны использовать транзакции и блокировку и т. Д., Чтобы эффект был таким, как если бы сообщения были обработаны последовательно. Под нагрузкой ответы могут быть отложены, или какое-то другое обратное давление используется для замедления отправителей, но вы не можете просто отбрасывать сообщения, потому что вы слишком заняты, если вы не делаете это таким образом, чтобы все участники принимают одинаковые решения по этому поводу.
В большинстве реализаций плота используется конвейерная обработка. Вы можете записать несколько записей в журнале от главного к подчиненному. Но мастер только успешно отвечает на запрос записи клиента после того, как мастер получил ответ ACK от кворума ведомого устройства для смещения журнала, равного или большего, чем смещение журнала, в которое был записан этот клиентский запрос.