46 lines
4.3 KiB
Markdown
46 lines
4.3 KiB
Markdown
|
---
|
|||
|
aliases:
|
|||
|
tags:
|
|||
|
- maturity/🌱
|
|||
|
date:
|
|||
|
- - 2024-06-07
|
|||
|
zero-link:
|
|||
|
- "[[../../../meta/zero/00 Базы Данных|00 Базы Данных]]"
|
|||
|
parents:
|
|||
|
- "[[Репликация БД]]"
|
|||
|
linked:
|
|||
|
- "[[Асинхронная репликация]]"
|
|||
|
- "[[Полу-синхронная репликация]]"
|
|||
|
---
|
|||
|
При получении запроса от клиента master ожидает, пока все реплики получат новые данные и подтвердят их применение у себя, и только после этого сообщает клиенту, что запрос успешно выполнен. Работает надежно, но медленно.
|
|||
|
|
|||
|
Реализовано в [PostgreSQL](../../../meta/zero/00%20PostgreSQL.md).
|
|||
|
|
|||
|
**Механизм работы**:
|
|||
|
- Подготовка транзакции в движке БД: Транзакция начинается на главном сервере (мастере), где собираются все изменения данных.
|
|||
|
- Запись транзакции в лог: Все изменения записываются в журнал транзакций, что обеспечивает возможность восстановления данных в случае сбоя.
|
|||
|
- Пересылка лога репликам: Журнал транзакций отправляется на все реплики для синхронного применения изменений.
|
|||
|
- Выполнение транзакций на репликах: Реплики применяют полученные изменения к своим копиям данных.
|
|||
|
- Завершение транзакции в движке БД: После успешного применения изменений на всех репликах транзакция завершается.
|
|||
|
- Возврат результата клиенту: Клиент получает подтверждение о завершении транзакции только после того, как изменения применены на всех репликах.
|
|||
|
|
|||
|
**Плюсы:**
|
|||
|
- Высокая надежность данных: Данные не теряются даже в случае сбоя одного из серверов, так как изменения применяются на всех репликах одновременно.
|
|||
|
- Консистентность данных: Обеспечивается консистентность данных на всех репликах, что исключает возможность получения различных результатов для одного и того же запроса.
|
|||
|
|
|||
|
**Минусы:**
|
|||
|
- Увеличенное время отклика: Поскольку подтверждение транзакции возвращается клиенту только после её завершения на всех репликах, время отклика увеличивается. Это может негативно сказаться на производительности системы, особенно при большом количестве реплик.
|
|||
|
- Высокая вероятность сбоев: С увеличением числа реплик общая вероятность сбоя возрастает, так как транзакция завершается только при успешном выполнении на всех репликах. Если хотя бы одна реплика не отвечает, транзакция не может быть завершена.
|
|||
|
***
|
|||
|
## Мета информация
|
|||
|
**Область**:: [[../../../meta/zero/00 HighLoad|00 HighLoad]]
|
|||
|
**Родитель**:: [[Репликация БД]]
|
|||
|
**Источник**::
|
|||
|
**Автор**::
|
|||
|
**Создана**:: [[2024-06-07]]
|
|||
|
### Дополнительные материалы
|
|||
|
- [[Асинхронная репликация|Асинхронная репликация]]
|
|||
|
- [[Полу-синхронная репликация|Полу-синхронная репликация]]
|
|||
|
### Дочерние заметки
|
|||
|
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|