TGViewer
Женя Янченко Женя Янченко @jane_yanchenko · 5.51K subscribers
Post #68 1.48K
Репликация без ведущего узла

В главе кабанчика про репликацию («Высоконагруженные приложения» Мартина Клепманна) нам остался большой раздел про репликацию без лидера. Такой подход используется в базах Cassandra, Riak, Voldemort.

Клиент может сам отправлять информацию о своих операциях записи на несколько реплик или это может делать узел-координатор. Однако, в отличие от репликации с одним лидером, координатор не навязывает порядок операций записи.

Предположим, у нас есть БД с тремя репликами. Одна из них сейчас недоступна. Пользователь Олег меняет свой статус с «Работает» на «В отпуске». Операция записи отправляется параллельно всем трем репликам. Допустим, нам достаточно, что две из трех реплик подтвердили получение, после этого можно считать операцию записи успешной. Отсутствие подтверждения от одной из реплик просто игнорируется.

Ранее недоступная реплика снова начала работу. Во время ее недоступности данные в ней не обновлялись, а значит при чтении из этой реплики мы рискуем получить устаревшие значения. Пользователь Маша заходит посмотреть профиль Олега. Запрос на чтение направляется не к одной реплике, а сразу к нескольким параллельно. В ответ приходят разные ответы: актуальное значение «В отпуске» от двух реплик и устаревшее значение «Работает» от первой реплики, которая была недоступна и не получила запроса на обновление. Чтобы определить, какое значение новее, используются номера версий.

Каким образом ранее недоступная реплика после возобновления работы может наверстать пропущенные ею операции записи? Есть два механизма:

🔼Разрешение конфликтов при чтении. Клиент, читающий данные с нескольких реплик параллельно, способен обнаружить все устаревшие ответы и записать вместо них актуальные значения.

🔼Процесс противодействия энтропии. В некоторых БД есть фоновый процесс, постоянно выискивающий различия в данных между репликами и копирующий отсутствующие данные из одной реплики в другую. В отличие от журнала репликации при репликации с одним лидером, порядок записей здесь может не соблюдаться.

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

#кабанчик #сисдиз #репликация
  • 🔥 6
  • 👍 4
  • ❤ 3
More from @jane_yanchenko
  1. Sep 25, 2026В прошлой жизни, когда я была менеджером проектов, одним из первых мест работы у меня был…
  2. Sep 23, 2026Куда пропало обращение - развязка В прошлом посте у нас загадочно пропало обращение 58122.…
  3. Sep 23, 2026Куда пропало обращение Однажды от руководителя техподдержки пришло письмо, суть которого с…
  4. Sep 21, 2026🔗 Подборка постов про Кафку Как обещала на стриме, собрала посты про Кафку в удобное огла…
  5. Sep 21, 2026🎞 Готова запись стрима про Кафку: https://youtu.be/2aRKsD-MWDA Большое спасибо всем, кто…
  6. Sep 16, 2026Сегодня стрим по Кафке в 19:00 Планируем не в формате доклада, а в формате вопрос-ответ, ч…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →