diff --git a/docs/clustering.md b/docs/clustering.md index 395fffef5b96f82425795960133f5c85eb9acd16..b3c6fcd5ca3662dc5ac950246fe55a5c9249d9c7 100644 --- a/docs/clustering.md +++ b/docs/clustering.md @@ -253,52 +253,6 @@ struct Instance { - Также ответ Ñодержит параметр `box_replication`, который требуетÑÑ Ð´Ð»Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ð¹ наÑтройки репликации. -## Обработка запиÑей Raft-журнала - -ПоÑледовательноÑÑ‚ÑŒ ÑоÑтоÑний каждой отдельной запиÑи в Raft-журнале -можно опиÑать так: - -```md -`Persisted` → `Committed` → `Applied` -``` - -При добавлении в журнал (по правилам Ñто делает лидер) запиÑÑŒ получает -ÑÑ‚Ð°Ñ‚ÑƒÑ `Persisted` и начинает реплицироватьÑÑ (Ñто аÑинхронно делает -файбер `raft_main_loop` ). Когда кворум узлов подтверждает -перÑиÑтентноÑÑ‚ÑŒ запиÑи, она ÑчитаетÑÑ Ð·Ð°Ñ„Ð¸ÐºÑированной. Важно понимать, -что ÑÑ‚Ð°Ñ‚ÑƒÑ `Committed` приÑваиваетÑÑ Ð·Ð°Ð¿Ð¸Ñи на оÑнове ÑовокупноÑти -полученной информации, а не какого-то конкретного дейÑтвиÑ. - - Конкретные дейÑÑ‚Ð²Ð¸Ñ Ð¿Ð¾ обработке той или иной запиÑи выполнÑет - отдельный поток `raft_applier`<!--([TODO](## "Пока что отдельного - потока нет, но лучше бы был"))-->. Ð”Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ запиÑи он выполнÑет - обработчик `Op::on_commit()` и по завершении приÑваивает запиÑи ÑÑ‚Ð°Ñ‚ÑƒÑ - `Applied`. Важно помнить, что обновление ÑтатуÑа и Ñама Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ - выполнÑÑ‚ÑŒÑÑ Ð½Ðµ атомарно (еÑли в `Op::on_commit()` проиÑходит передача - ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼Ñƒ потоку — yield). Ð’ таком Ñлучае, Ñледует - позаботитьÑÑ Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ об идемпотентноÑти операции. - -Схема ниже иллюÑтрирует Ñту информацию. - - - -Стоит также помнить, что алгоритм Raft гарантирует лишь конÑиÑтентноÑÑ‚ÑŒ -поÑледовательноÑти запиÑей, но не конкретные Ñроки выполнениÑ. Смена -ÑтатуÑов на разных инÑтанÑах так или иначе проиÑходит в разные моменты -времени, и иногда Ñту очередноÑÑ‚ÑŒ приходитÑÑ ÑƒÑ‡Ð¸Ñ‚Ñ‹Ð²Ð°Ñ‚ÑŒ в алгоритмах. -Ðапример, при корректном запланированном выводе инÑтанÑа из ÑкÑплуатации -(graceful shutdown) может возникнуть ÑитуациÑ, когда инÑÑ‚Ð°Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚ÑÑ -Ñлишком быÑтро, и его ÑоÑеди могут ошибочно продолжать Ñчитать его -голоÑующим. Причиной такой Ñитуации может быть критерий оÑтановки, -включающий ожидание коммита лишь локально на завершаемом инÑтанÑе, но не -на других — Ñто может Ñтать причиной потери кворума в клаÑтере. - -<!-- Ðиже Ð´Ð°Ð½Ð½Ð°Ñ ÑÐ¸Ñ‚ÑƒÐ°Ñ†Ð¸Ñ Ñ€Ð°ÑÑмотрена подробнее. --> - -<!-- Была у Ð½Ð°Ñ Ð¾Ð´Ð½Ð°Ð¶Ð´Ñ‹ Ñ‚Ð°ÐºÐ°Ñ Ð¸ÑÑ‚Ð¾Ñ€Ð¸Ñ â€” шла разработка graceful shutdown. ТеÑÑ‚ (`test_joining.py::test_deactivation`) оÑтанавливал один из двух инÑтанÑов и проверÑл, что тот (назовем его i2) переÑтал быть голоÑующим. Иногда теÑÑ‚ проходил нормально, но иногда падал — `i2` завершал работу раньше, чем `i1` получал от него подтверждение. При Ñтом критерий оÑтановки включал в ÑÐµÐ±Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ðµ коммита, но только локально на `i2`, а не на `i1`. Из-за Ñтого `i1` терÑл кворум. --> - - ## Graceful shutdown Чтобы выключение прошло штатно и не имело негативных поÑледÑтвий, diff --git a/docs/raft_log.svg b/docs/raft_log.svg deleted file mode 100644 index 3ab4e0637dca95c1b94f995ddf2e26c9c2362d77..0000000000000000000000000000000000000000 Binary files a/docs/raft_log.svg and /dev/null differ diff --git a/docs/raft_log_curves.svg b/docs/raft_log_curves.svg deleted file mode 100644 index 747d3ebf8b2f7f52e1a4360b82b7c84d57a7c1b9..0000000000000000000000000000000000000000 Binary files a/docs/raft_log_curves.svg and /dev/null differ