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

26 lines
3.8 KiB
Markdown
Raw Normal View History

---
aliases:
tags:
- maturity/🌱
date:
- - 2024-06-07
zero-link:
- "[[../../../meta/zero/00 HighLoad|00 HighLoad]]"
parents:
- "[[Репликация БД]]"
linked:
---
Монотонное чтение — это проблема, возникающая при репликации данных, когда пользователи могут получить несогласованные результаты при выполнении последовательных запросов. Это происходит, когда изменения на мастере не успевают синхронизироваться с репликами, и разные запросы пользователя могут попадать на реплики с различными состояниями данных.
## Пример проблемы монотонного чтения
Рассмотрим ситуацию, когда пользователь запрашивает список комментариев к статье. Если новый комментарий был добавлен и записан на мастер, но ещё не успел синхронизироваться со всеми репликами, пользователь может столкнуться с несогласованными результатами:
1. Пользователь делает первый запрос и получает список комментариев без нового комментария.
2. Пользователь делает второй запрос и получает список комментариев, включающий новый комментарий.
3. При следующем запросе пользователь снова может не увидеть новый комментарий, если его запрос попадает на другую реплику.
![](../../../meta/files/images/Pasted%20image%2020240607211612.png)
## Методы решения проблемы монотонного чтения
- Привязка пользователя к конкретной реплике (stickiness): Один из способов решения проблемы монотонного чтения — это привязка пользователя к конкретной реплике для всех последовательных запросов. Это можно реализовать с помощью сессий или токенов, обеспечивая пользователю доступ к одной и той же реплике, пока она доступна.
- Настройка задержек при чтении: Можно настроить задержки при чтении данных с реплик, чтобы обеспечить их синхронизацию с мастером. Например, задержка может быть настроена таким образом, чтобы реплики всегда отставали от мастера на фиксированное время, достаточное для синхронизации данных.
- Использование кворумных чтений: В системах с [[Безмастерная репликация|безмастерной репликацией]] можно использовать кворумные чтения, когда запросы выполняются на нескольких репликах одновременно, и результат считается успешным только если он подтвержден большинством реплик. Это повышает вероятность получения актуальных данных.