26 lines
3.8 KiB
Markdown
26 lines
3.8 KiB
Markdown
|
---
|
|||
|
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): Один из способов решения проблемы монотонного чтения — это привязка пользователя к конкретной реплике для всех последовательных запросов. Это можно реализовать с помощью сессий или токенов, обеспечивая пользователю доступ к одной и той же реплике, пока она доступна.
|
|||
|
- Настройка задержек при чтении: Можно настроить задержки при чтении данных с реплик, чтобы обеспечить их синхронизацию с мастером. Например, задержка может быть настроена таким образом, чтобы реплики всегда отставали от мастера на фиксированное время, достаточное для синхронизации данных.
|
|||
|
- Использование кворумных чтений: В системах с [[Безмастерная репликация|безмастерной репликацией]] можно использовать кворумные чтения, когда запросы выполняются на нескольких репликах одновременно, и результат считается успешным только если он подтвержден большинством реплик. Это повышает вероятность получения актуальных данных.
|