TGViewer
Женя Янченко Женя Янченко @jane_yanchenko · 5.51K subscribers
Post #127 1.85K
Начинаем следующую главу кабанчика («Высоконагруженные приложения» Мартина Клепманна): глава 9 «Согласованность и консенсус».
Первая ее часть посвящена рассмотрению различных гарантий. Скажу честно, глава скучновата и академична 🙁

С другой стороны, мы читаем кабанчика в том числе для того, чтобы иметь представление о терминах линеаризуемость и временные метки Лампорта 🤓

⭐️ Конечная согласованность (eventual consistency)

Большинство реплицированных БД обеспечивают по меньшей мере конечную согласованность. Это означает, что если прекратить записывать данные в базу и подождать некоторое неопределенное время, то все запросы на чтение вернут одно и то же значение. То есть в конечном итоге все реплики сойдутся к одному состоянию.

Однако это очень слабая гарантия. Мы не знаем, когда именно реплики сойдутся. До этого момента операции чтения могут возвращать разные данных с разных реплик. Поэтому придумывают подходы вроде «read-your-writes», рассмотренные в главе про репликацию.

⭐️ Линеаризуемость

Это одна из самых сильных гарантий согласованности. Основная идея состоит в том, чтобы система внешне выглядела так, как будто в ней только одна копия данных.

Рассмотрим пример нелинеаризуемой системы.

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

Самым простым вариантов получить линеаризуемость было бы действительно использовать только один узел БД. Но этот вариант может не подходить с точки зрения отказоустойчивости и масштабируемости.

Отдельные консенсусные алгоритмы, которые будут рассмотрены в этой главе дальше, позволяют обеспечить линеаризуемость.

Однако цена линеаризуемости — производительность. Линеаризуемость всегда медленная! Поэтому на практике редко делают линеаризуемые системы.

#кабанчик #сисдиз

Продолжение 👇
  • 👍 10
  • ❤‍🔥 5
  • 🔥 3
More from @jane_yanchenko
  1. Sep 25, 2026В прошлой жизни, когда я была менеджером проектов, одним из первых мест работы у меня был…
  2. Sep 23, 2026Куда пропало обращение - развязка В прошлом посте у нас загадочно пропало обращение 58122.…
  3. Sep 23, 2026Куда пропало обращение Однажды от руководителя техподдержки пришло письмо, суть которого с…
  4. Sep 21, 2026🔗 Подборка постов про Кафку Как обещала на стриме, собрала посты про Кафку в удобное огла…
  5. Sep 21, 2026🎞 Готова запись стрима про Кафку: https://youtu.be/2aRKsD-MWDA Большое спасибо всем, кто…
  6. Sep 16, 2026Сегодня стрим по Кафке в 19:00 Планируем не в формате доклада, а в формате вопрос-ответ, ч…
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 →