Начинаем следующую главу кабанчика («Высоконагруженные приложения» Мартина Клепманна): глава 9 «Согласованность и консенсус».
Первая ее часть посвящена рассмотрению различных гарантий. Скажу честно, глава скучновата и академична 🙁
С другой стороны, мы читаем кабанчика в том числе для того, чтобы иметь представление о терминах линеаризуемость и временные метки Лампорта 🤓
⭐️ Конечная согласованность (eventual consistency)
Большинство реплицированных БД обеспечивают по меньшей мере конечную согласованность. Это означает, что если прекратить записывать данные в базу и подождать некоторое неопределенное время, то все запросы на чтение вернут одно и то же значение. То есть в конечном итоге все реплики сойдутся к одному состоянию.
Однако это очень слабая гарантия. Мы не знаем, когда именно реплики сойдутся. До этого момента операции чтения могут возвращать разные данных с разных реплик. Поэтому придумывают подходы вроде «read-your-writes», рассмотренные в главе про репликацию.
⭐️ Линеаризуемость
Это одна из самых сильных гарантий согласованности. Основная идея состоит в том, чтобы система внешне выглядела так, как будто в ней только одна копия данных.
Рассмотрим пример нелинеаризуемой системы.
Алиса и Боб с телефонов заходят на сайт, чтобы узнать результаты спортивного матча. Алиса видит победителя и рассказывает Бобу. Боб обновляет страницу, но запрос попадает на чуть отстающую реплику, поэтому телефон Боба показывает, что игра еще идет.
Боб обновил страницу после того, как услышал от Алисы окончательный счет, и поэтому ожидает, что результат его запроса будет по крайней мере столь же свежим, как и у Алисы. Факт возврата старого результата на запрос Боба является нарушением линеаризуемости.
Самым простым вариантов получить линеаризуемость было бы действительно использовать только один узел БД. Но этот вариант может не подходить с точки зрения отказоустойчивости и масштабируемости.
Отдельные консенсусные алгоритмы, которые будут рассмотрены в этой главе дальше, позволяют обеспечить линеаризуемость.
Однако цена линеаризуемости — производительность. Линеаризуемость всегда медленная! Поэтому на практике редко делают линеаризуемые системы.
#кабанчик #сисдиз
Продолжение 👇
Post #127
1.85K
- 👍 10
- ❤🔥 5
- 🔥 3