TGViewer
Женя Янченко Женя Янченко @jane_yanchenko · 5.51K subscribers
Post #61 1.57K
Стратегии работы с конфликтами записи

📌 Предотвращение

Если приложение может гарантировать, что все операции изменения конкретной записи проходят через один и тот же лидер, то конфликт просто невозможен. Например, если пользователь редактирует свои данные, то все такие операции этого пользователя привязать к одному лидеру.

📌 Сходимость к согласованному состоянию

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

▶️Присвоить каждой операции записи уникальный идентификатор (например, метку даты/времени, случайное длинное число, UUID или хеш ключа и значения). Среди конфликтующих операций выбрать операцию-победителя с максимальным значением этого идентификатора, а остальные отбросить. В случае использования метки даты/времени в качестве идентификатора этот метод известен под названием «выигрывает последний» (last write wins, LWW). Такой подход популярен, но ему свойственно терять данные.

▶️Присвоить уникальный идентификатор каждой реплике и считать, что у операций записи, исходящих от реплик с бóльшим номером, есть приоритет перед операциями, которые исходят от реплик с меньшим номером. Этот подход тоже приводит к потерям данных.

▶️Каким-то образом слить значения воедино, например, конкатенировать строки. В примере с семейной встречей она получила бы название «Шашлык 12:00/Копаем картошку 12:00»

▶️Записывать конфликты в отдельную структуру данных и написать код приложения, который бы разрешал конфликты позднее (возможно, спрашивая для этого пользователя).

▶️Использовать структуры данных, специально разработанные для автоматического разрешения конфликтов:
🔸 бесконфликтные реплицируемые типы данных (conflict-free replicated datatype, CRDT) — структуры данных, которые допускают конкурентное редактирование несколькими пользователями и автоматически разрешают конфликты.
🔸 объединяемые хранимые структуры данных (mergeable persistent data structures), которые отслеживают историю аналогично Git.
🔸 операциональное преобразование (operational transformation) для приложений с совместным редактированием (Google Docs).
Реализации алгоритмов автоматического разрешения конфликтов в БД все еще довольно незрелы, но есть вероятность, что в будущем они будут включаться во все большее количество реплицируемых систем.

Резюмируем. Репликация с несколькими лидерами:
➕ устойчивее к отказам узлов
➕ устойчива к проблемам с сетью
➖ значительно сложнее в организации
➖ имеет слабые гарантии согласованности

#кабанчик #сисдиз
  • 👍 10
  • ❤ 3
  • 🔥 3
More from @jane_yanchenko
  1. Sep 30, 2026Представьте ситуацию. Дисклеймер: пример вымышленный, проблема реально встречающаяся 🐤 Вы…
  2. Sep 25, 2026В прошлой жизни, когда я была менеджером проектов, одним из первых мест работы у меня был…
  3. Sep 23, 2026Куда пропало обращение - развязка В прошлом посте у нас загадочно пропало обращение 58122.…
  4. Sep 23, 2026Куда пропало обращение Однажды от руководителя техподдержки пришло письмо, суть которого с…
  5. Sep 21, 2026🔗 Подборка постов про Кафку Как обещала на стриме, собрала посты про Кафку в удобное огла…
  6. Sep 21, 2026🎞 Готова запись стрима про Кафку: https://youtu.be/2aRKsD-MWDA Большое спасибо всем, кто…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →