digital-garden/dev/architecture/highload/Монотонное чтение.md

3.8 KiB
Raw Permalink Blame History

aliases tags date zero-link parents linked
maturity/🌱
2024-06-07
../../../meta/zero/00 HighLoad
Репликация БД

Монотонное чтение — это проблема, возникающая при репликации данных, когда пользователи могут получить несогласованные результаты при выполнении последовательных запросов. Это происходит, когда изменения на мастере не успевают синхронизироваться с репликами, и разные запросы пользователя могут попадать на реплики с различными состояниями данных.

Пример проблемы монотонного чтения

Рассмотрим ситуацию, когда пользователь запрашивает список комментариев к статье. Если новый комментарий был добавлен и записан на мастер, но ещё не успел синхронизироваться со всеми репликами, пользователь может столкнуться с несогласованными результатами:

  1. Пользователь делает первый запрос и получает список комментариев без нового комментария.
  2. Пользователь делает второй запрос и получает список комментариев, включающий новый комментарий.
  3. При следующем запросе пользователь снова может не увидеть новый комментарий, если его запрос попадает на другую реплику.

Методы решения проблемы монотонного чтения

  • Привязка пользователя к конкретной реплике (stickiness): Один из способов решения проблемы монотонного чтения — это привязка пользователя к конкретной реплике для всех последовательных запросов. Это можно реализовать с помощью сессий или токенов, обеспечивая пользователю доступ к одной и той же реплике, пока она доступна.
  • Настройка задержек при чтении: Можно настроить задержки при чтении данных с реплик, чтобы обеспечить их синхронизацию с мастером. Например, задержка может быть настроена таким образом, чтобы реплики всегда отставали от мастера на фиксированное время, достаточное для синхронизации данных.
  • Использование кворумных чтений: В системах с Безмастерная репликация можно использовать кворумные чтения, когда запросы выполняются на нескольких репликах одновременно, и результат считается успешным только если он подтвержден большинством реплик. Это повышает вероятность получения актуальных данных.