Ответ
Согласованность в распределенной БД теряется при:
-
Сетевом разделении (Split-Brain) — узлы кластера теряют связь, но продолжают обслуживать запросы на запись, создавая конфликтующие версии данных.
-
Отказе узла во время фиксации транзакции — если транзакция подтверждена на первичном узле, но не успела реплицироваться на кворум вторичных узлов.
-
Некорректных настройках согласованности — например, использование
WriteConcern.UNACKNOWLEDGEDв MongoDB.// Риск потери данных: запись без подтверждения от реплик collection.withWriteConcern(WriteConcern.UNACKNOWLEDGED) .insertOne(document);
Решение: Используйте протоколы с сильной согласованностью:
- Кворумные записи (
WriteConcern.MAJORITYв MongoDB,QUORUMв Cassandra). - Распределенные транзакции (2PC — Two-Phase Commit).
- Модель Raft или Paxos для консенсуса в кластере.