Модели согласованности баз данных в распределенных системах

В этой статье разработчиками компании DST Global, рассматриваются модели согласованности баз данных в распределенных системах и объясняются компромиссы между сильным, окончательным, причинным и другими типами согласованности.

Согласованность базы данных — это фундаментальное свойство, которое гарантирует, что данные остаются точными, действительными и надежными во всех транзакциях. В традиционных базах данных согласованность часто ассоциируется со свойствами ACID (атомарность, согласованность, изоляция, долговечность), которые гарантируют, что транзакции переводят базу данных из одного действительного состояния в другое. Однако в распределенных базах данных согласованность приобретает более широкое значение, уравновешивая компромиссы с доступностью и устойчивостью к разделам, как описано в теореме CAP.

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

Краткий обзор теоремы CAP

Теорема CAP утверждает, что в распределенной системе невозможно достичь всех трех свойств одновременно:

- Согласованность (C). Каждое чтение получает последнюю запись или ошибку. Это означает, что все узлы в системе видят одни и те же данные в одно и то же время.

- Доступность (A). Каждый запрос получает ответ, даже если некоторые узлы не работают. Система остается работоспособной.

- Устойчивость к разделению (P). Система продолжает функционировать, несмотря на разделение сети (т. е. сбои связи между узлами).

На практике:

- Системы CP (согласованность + устойчивость к разделению). Приоритет согласованности над доступностью. Во время разделения сети некоторые запросы могут блокироваться, чтобы гарантировать, что все узлы имеют актуальные данные. Например, Google Spanner, Zookeeper и системы на основе RDBMS.

- Системы AP (доступность + устойчивость к разделению). Приоритет доступности над согласованностью. Система отвечает на запросы, даже если некоторые узлы возвращают устаревшие данные. Например, DynamoDB, Cassandra, S3, CouchDB.

- Системы CA (согласованность + доступность). Системы CA невозможны в распределенных системах, поскольку в конечном итоге произойдут сбои в сети, требующие устойчивости к разделам. Это возможно только в нераспределенных одноузловых системах.

Согласованность базы данных

Различные распределенные базы данных достигают согласованности посредством систем CP или AP, обычно называемых сильной согласованностью и окончательной согласованностью соответственно. Несколько моделей согласованности попадают в эти категории, каждая из которых имеет различные гарантии и компромиссы.

1. Сильная последовательность

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

Использование

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

- Выборы лидера. Обеспечивает единого активного лидера в распределенных системах (например, Kafka, ZooKeeper).

- Управление конфигурацией. Синхронизирует конфигурации между узлами (например, ZooKeeper и т.д.).

- Распределенные блокировки. Предотвращает состояние гонки, обеспечивая исключительный доступ (например, ZooKeeper, Chubby).

- Управление метаданными. Поддерживает согласованность метаданных файловой системы (например, HDFS NameNode, Chubby).

- Обнаружение сервисов. Отслеживает работающие сервисы и их местоположение (например, Consul и т. д.).

- Координация транзакций. Обеспечивает транзакции ACID на распределенных узлах (например, Spanner, CockroachDB).

Компромиссы

- Гарантирует корректность, но увеличивает задержку и снижает доступность при сбоях в сети.

- Трудно масштабировать в сильно распределенных средах.

- Могут потребоваться сложные распределенные протоколы консенсуса, такие как Paxos или Raft, что может снизить производительность системы.

2.

Окончательная согласованность

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

Использование

Базы данных согласованности в конечном счете (системы AP в теореме CAP) используются там, где доступность имеет приоритет над строгой согласованностью. Эти базы данных допускают временные несоответствия, но гарантируют, что данные в конечном итоге синхронизируются между узлами.

- Приложения глобального масштаба. Реплицируются в нескольких регионах для доступа с малой задержкой (например, DynamoDB, Cosmos DB).

- Ленты социальных сетей. Обновления могут немного задерживаться, но должны оставаться высокодоступными (например, Cassandra, Riak).

- Корзины покупок в электронной коммерции. Разрешите пользователям добавлять товары, даже если некоторые узлы временно несовместимы (например, DynamoDB, CouchDB).

- Сети доставки контента (CDN). Быстро обслуживайте кэшированный контент, даже если последняя версия недоступна немедленно (например, Akamai, Cloudflare).

- Системы обмена сообщениями и уведомления. Обеспечьте доставку сообщений без блокировки (например, RabbitMQ, Kafka).

- Распределенные кэши. Храните часто используемые данные с последующей синхронизацией (например, Redis в режиме AP, Memcached).

- IoT и сенсорные сети. Обработка высокой пропускной способности записи и синхронизация данных с течением времени (например, Apache Cassandra, InfluxDB).

Компромиссы

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

- Требуются механизмы разрешения конфликтов для устранения несоответствий.

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

3. Причинно-следственная последовательность

Причинно-следственная последовательность гарантирует, что операции, имеющие причинно-следственную связь, отображаются в одном и том же порядке для всех клиентов. Однако независимые операции могут отображаться в разных порядках.

Использование

- Если Алиса разместит комментарий к посту Боба, все пользователи должны увидеть пост Боба раньше комментария Алисы.

- TAO (база данных графов) Facebook поддерживает причинно-следственную последовательность социальных взаимодействий.

- Платформы совместного редактирования, такие как Google Docs, могут полагаться на причинно-следственную последовательность, чтобы гарантировать, что изменения появляются в правильном порядке.

- Cassandra (с облегченными транзакциями — LWT) использует причинно-следственную согласованность с временными метками в некоторых конфигурациях, чтобы гарантировать, что зависящие друг от друга операции упорядочены правильно.

- Riak (с причинно-следственными контекстами) использует векторные часы для отслеживания причинно-следственных зависимостей и разрешения конфликтов.

Компромиссы

- Более слабая, чем сильная, согласованность, но позволяет избежать аномалий в причинно-следственных событиях.

- Может оказаться сложной задачей для внедрения в системах с высокой степенью параллельности работы пользователей.

4. Монотонная последовательность

- Монотонные чтения. Гарантирует, что если процесс считывает значение элемента данных, он никогда не увидит более старое значение в будущих чтениях.

- Монотонные записи. Гарантирует, что записи применяются в порядке, выданном одним процессом.

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

Использование

- Сеансы пользователей. Гарантирует, что пользователи всегда видят последние обновления на всех серверах (Google Spanner, DynamoDB, Cosmos DB).

- Ленты социальных сетей. Предотвращает повторное появление старых сообщений после просмотра более новой версии (Cassandra, Riak, DynamoDB).

- Транзакции электронной коммерции. Гарантирует, что статусы заказов не изменятся (например, «Отправлено» никогда не вернется к «Обрабатывается») (Google Spanner, Cosmos DB).

- Распределенное кэширование. Позволяет избежать обслуживания устаревших записей кэша после появления более новой версии (Redis, DynamoDB).

Компромиссы

- Предотвращает проблемы несоответствия, но не обеспечивает строгого глобального порядка.

- Может привести к задержкам при синхронизации реплик в разных регионах.

5. Последовательность Read-Your-Writes

Согласованность Read-Your-Writes гарантирует, что как только пользователь записывает (обновляет) данные, любое последующее чтение тем же пользователем всегда будет отражать это обновление. Это не позволяет пользователям видеть устаревшие данные после их собственных изменений.

Использование

- Обновления профиля пользователя. Гарантирует, что пользователь немедленно увидит последние изменения своего профиля (Google Spanner, DynamoDB (согласованность сеанса), Cosmos DB).

- Публикации в социальных сетях. Гарантирует, что пользователи всегда будут видеть свои последние публикации или комментарии после их отправки (Cassandra, DynamoDB, Riak).

- Приложения для редактирования документов. Гарантирует пользователям просмотр последней версии документа после сохранения (Google Drive (на основе Spanner), Dropbox).

Компромиссы

- Может привести к разным гарантиям согласованности для разных пользователей.

- Хорошо работает в моделях согласованности на основе сеансов, но не всегда может гарантировать глобальную согласованность.

Выбор правильной модели согласованности

Выбор модели согласованности зависит от требований приложения:

- Финансовые транзакции, банковское дело и системы управления запасами требуют строгой согласованности для предотвращения аномалий.

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

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

- Платформы электронной коммерции могут отдать предпочтение единообразию «прочитай свои записи», чтобы пользователи могли видеть свои последние покупки.

- Распределенные файловые системы и контроль версий могут полагаться на монотонную согласованность для предотвращения проблем с откатом.

Заключение

Согласованность базы данных является критически важным аспектом управления данными как в традиционных, так и в распределенных системах. Хотя сильная согласованность обеспечивает правильность, она достигается за счет производительности и доступности. Окончательная согласованность ставит во главу угла масштабируемость и отказоустойчивость, но может привносить временные несоответствия. Различные модели, такие как причинная, монотонная и согласованность read-your-writes, предлагают промежуточные решения, адаптированные к конкретным вариантам использования.

Понимание компромиссов каждой модели необходимо для проектирования надежных и эффективных архитектур данных в современных приложениях. С ростом сложности распределенных систем выбор правильной модели согласованности становится более важным, чем когда-либо. 

Модели согласованности баз данных в распределенных системах
Получить консультацию у специалистов DST
Напишите нам прямо сейчас, наши специалисты расскажут об услугах и ответят на все ваши вопросы.
Комментарии и отзывы экспертов
RSS
20:35 (отредактировано)
+3
Три вида согласованности данных

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

Попробуем обозначить три основных типа согласованности.

Согласованность в теореме Брюера

Первый из них обозначен буквой C в аббревиатуре CAP в теореме Брюера (Consistency, Availability, Partition tolerance). Согласно этой теореме, в распределенной системе можно обеспечить выполнение только двух из трех следующих свойств:

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

Далее в теореме Брюера поднимается вопрос: чем вы жертвуете? Доступностью ради сохранения согласованности или согласованностью ради сохранения доступности?

— В сущности, теорема Брюера рассматривает репликацию, в частности, сбои сети во время репликации.

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

Однако, как нам напоминает Вернер Фогельс, «все постоянно ломается». И ваша сеть тоже.

Согласно теореме Брюера, нам нужно решить, что делать в этом случае — как изолированному узлу C реагировать на запрос от клиента?

— Если вы выбираете подход AP (доступность и устойчивость к разделению), узел C выдает в ответ данные, находящиеся локально на этом узле. В этом смысле узел C доступен: он может выдать корректный ответ, который, правда, не всегда будет наиболее актуальным.
— Если остановиться на подходе CP (согласованность и устойчивость к разделению), вы не разрешите узлу C выдать ответ, ведь у него могут быть устаревшие данные. Если для вас в приоритете согласованность данных, узел C не сможет ответить, что снижает доступность системы (в терминологии теоремы Брюера).
— Если вы выбираете подход CA (согласованность и доступность), вы жульничаете! Помните, мы исходим из допущения о нарушении связности сети.

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

— Она рассматривает работу системы только в условиях сбоя. Сбои неизбежны, и неплохо бы знать, как ваша база данных поведет себя в этом случае. Правда, скорее всего, большую часть времени она будет функционировать нормально. Но и в этой ситуации в ее работе будут интересные компромиссы, их обсудим ниже.
— Речь идет о конкретных сбоях. А именно о нарушении связности сети между узлами. Но ведь есть масса других неисправностей — от нехватки памяти на отдельном узле до пожара в ЦОД. Все это может серьезно повлиять на доступность системы, и не только в том смысле, в каком ее рассматривает теорема Брюера. Поэтому важно учитывать и эти неполадки.
— В ней используется уникальное понятие «доступность». Согласно теореме Брюера, понятие доступности подразумевает корректный ответ от корректно работающего узла. Это значит, что, если клиент обращается к изолированному узлу C, он считается доступным, если выдал успешный ответ.

Мы часто думаем о доступности как о проценте успешных ответов за определенный период времени (то есть сколько у системы «девяток» доступности). У системы на базе подхода CP может все-таки оказаться очень высокая доступность благодаря тому, что все клиенты обязательно используют большинство узлов без нарушения связи. О доступности можно подробнее прочитать в статье Марка Брукера «Доступность и доступность».

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

Согласованность в ACID-транзакциях

Второй тип согласованности связан с ACID-транзакциями. Аббревиатура ACID обозначает совокупность гарантий относительно поведения базы данных при объединении нескольких действий в единую логическую операцию, которую часто называют транзакцией.

Теорема Брюера — это концепция, касающаяся репликации в распределенных системах. ACID же применима только к базам данных. Четыре составляющие ACID-транзакции:

— Атомарность: все операции будут выполнены полностью или не выполнены совсем.
— Согласованность: после транзакции база данных остается в допустимом состоянии.
— Изолированность: параллельные транзакции рассматриваются как выполняемые последовательно.
— Надежность: завершенная транзакция сохраняется даже в случае сбоя.

В этой концепции определение согласованности сильно отличается от теоремы Брюера. В ACID согласованность означает, что транзакция не может привести к недопустимому состоянию.

То есть в каждом столбце значения относятся к нужным типам данных и необходимые значения будут предоставлены. Хотя транзакции не особенно усложняют здесь суть дела.

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

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

Изолированность как часть ACID — это интересная концепция, имеющая довольно много общего с темой согласованности. Подробнее мы поговорим об этом дальше.

Модели согласованности базы данных

Третье определение термина также применимо к базам данных — это концепция моделей согласованности базы. Много интересного о моделях согласованности можно узнать из аналитики Jepsen — это блог, набор статей и консалтинговый сервис Кайла Кингсбери. Кайл проверяет на прочность разные распределенные системы, выясняя, как они ведут себя при том или ином сбое. Это качественное, интересное решение. Сотрудники Jepsen отлично разбираются в распределенных системах, так что не переживайте, если вы несколько раз перечитали представленный анализ и поняли процентов 15 написанного.

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

В модели согласованности базы данных есть два основных элемента:

— Linearizability влияет на обработку в базе данных отдельного фрагмента данных, который реплицируется на нескольких узлах.
— Serializability влияет на обработку в базе данных одновременного выполнения транзакций, каждая из которых может работать с несколькими фрагментами данных.

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

Обратите внимание, что Linearizability в обязательном порядке подразумевает подход CP. С Linearizability связаны и не такие строгие модели согласованности: они обеспечивают высокую доступность (в терминах теоремы Брюера).

По-видимому, Linearizability (и ее более мягкие версии) не предусматривает конечную согласованность. Особенно в системах с балансировкой нагрузки, таких как DynamoDB, в которой не поддерживаются тесные связи с определенным узлом. Поговорим о конечной согласованности подробнее.

Linearizability = один фрагмент данных, Serializability = несколько фрагментов. В частности, Serializability — это способ обработки параллельных транзакций, выполняемых с одними и теми же фрагментами данных.

Самый «безопасный» подход в данном случае — это выстроить транзакции в порядке их поступления и последовательно выполнять их, так, чтобы каждая транзакция завершалась до начала следующей. В реальности дело тогда движется достаточно медленно, поэтому мы часто исправляем ситуацию, выполняя несколько транзакций параллельно. Но при параллельном выполнении есть несколько разных уровней безопасности.

Что не так с дискуссиями на тему согласованности

Теперь, когда мы разобрались с основной терминологией, давайте перейдем к доброжелательной критике. Вот несколько идей, которые направят ваш мыслительный процесс.

Неполнота теоремы Брюера

Теорема Брюера полезная и правильная. Что бы вы ни думали, вы не можете волевым решением создать систему на базе подхода CA. И все же теорема неполна. Например, в дискуссиях часто говорят: «Мы не можем выбрать $DATABASE, потому что это система на базе подхода AP, а нам не нужна конечная согласованность».

Конечная согласованность — это интересная тема, и вы сталкиваетесь с ней не только в случае нарушения связности из теоремы Брюера. Хотя нужно представлять себе, как система будет работать в случае нарушения связности: помните, что большую часть времени она будет работать без сбоев. Но и периоды нормальной эксплуатации не обходятся без компромиссов, о которых не стоит забывать.

Даниэль Абади расширил теорему Брюера, создав теорему PACELC. В ней предусмотрено два режима эксплуатации: в период нарушения связности и в период нормальной работы.

Первые три буквы аббревиатуры PACELC совпадают с буквами аббревиатуры CAP (Partition tolerance, Availability, Consistency). Следующие три буквы обозначают действия в режиме без нарушения связности. ELC расшифровывается как «а еще оптимизировать время задержки или согласованность?».

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

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

Прелесть PACELC в том, что она позволяет рассматривать согласованность в общем случае, когда база данных работает без сбоев. Можете ли вы смириться с тем, что время от времени для чтения выводятся неактуальные данные? Если нет, устраивает ли вас увеличение задержки и снижение доступности, которые связаны с высоким уровнем согласованности?

Вольное применение ACID

Сегодня многие работают с NoSQL. И их коллеги, чаще пересекающиеся с SQL, справедливо указывают на отсутствие ACID-транзакций в большинстве баз данных NoSQL. Иногда можно услышать следующее: «Да, масштабируемость в NoSQL — штука интересная, но мне не хочется иметь дело с багами параллелизма, отказавшись от ACID-транзакций». Всегда казалось, что это, безусловно, сильный аргумент в пользу реляционных баз данных. Но оказалось, что правда — вещь более тонкая, чем кажется. Модели согласованности и изолированность в ACID не так прямолинейны.

Сериализуемость — это аспект моделей согласованности, связанный с транзакциями. Хоть и считается, что большинство реляционных баз данных поддерживают ACID-транзакции, они не дают полной гарантии сериализуемости при их выполнении. Обычно они предлагают довольно вольные гарантии, такие как повторное чтение или Snapshot isolation, что иногда приводит к неожиданным проблемам при выполнении параллельных операций.

Подробно изолированность в базе данных рассматривается еще на одном отличном сайте Hermitage project, а также в статье Мартина Клеппманна. Проект Hermitage помогает проверять типы изолированности и возможные проблемы в наиболее популярных реляционных базах данных. А в своей статье Мартин обсуждает баг распараллеливания в NoSQL БД. Из-за него люди думают, что реляционная база данных спасет их, не понимая, что с уровнями изолированности, заданными по умолчанию, они столкнутся с той же проблемой!

Все это не подрывает престиж реляционных баз данных и не снижает значимость ACID-транзакций. Скорее, мы призываем к разумной осторожности при выборе базы данных и рекомендуем разобраться, что она действительно гарантирует.

Слишком много разговоров про абсолют

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

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

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

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

Наконец, если рассматривать обратную зависимость между временем задержки и согласованностью в PACELC, важную роль могут сыграть определенные стратегии, используемые для репликации данных на другие узлы. Хотя превысить скорость света мы еще не можем, многие современные системы фактически являются согласованными, а их реплики отстают буквально на несколько миллисекунд. В 2013 году Питер Бэйлис и Ади Годси опубликовали исследования на эту тему, и с тех пор ситуация, без сомнения, улучшилась.
20:36 (отредактировано)
+2
Здесь мы можем сделать важный вывод: надо учитывать не только крайние области спектра, но и промежуточные положения между ними. Эти крайние значения помогают направлять и заземлять обсуждение, но игнорировать промежуточные области все же не стоит.
20:40
+1
Сколько можно это обсуждать:

— В CAP partition, consistency и availability это атомарные величины. В реальности — непрерывные. И вопрос звучит так: «сколько процентов доступности или согласованности вы готовы потерять при заданном проценте partition».

— Пока вы работаете в одном датаценре, то можете считать что никаких partition у вас нет. Я знаю, что в облаке они могут случиться даже в рамках одного «региона», но это тоже крайне редкое явление.

— CAP теорема не рассматривает поведение клиента. Если клиент умеет повторять запросы, то можно нивелировать «недоступность» по CAP и не только по CAP. Более того, повторяя запросы между серверами можно нивелировать partition.

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

— CA-системы это давно известные и прекрасно работающие системы на основе кворума. Как и подавляющее большинство современных NoSQL баз.

— AP-системы это кэш в том или ином виде над некоторым консистентным хранилищем или без него.

— Комбинируя AP и CA системы можно выполнить нужные вам требования.
Модели согласованности в распределённых системах устанавливают критерии синхронизации данных и определяют, как пользователи и приложения должны интерпретировать изменения данных на нескольких узлах.

Некоторые модели согласованности:
— Строгая согласованность. Все узлы в системе всегда имеют одинаковое представление данных. Любая операция чтения возвращает самую последнюю запись в элемент данных.
— Конечная согласованность. Допускает временные несоответствия между узлами, но гарантирует, что, если в элемент данных не будут внесены новые обновления, в конечном итоге все обращения к этому элементу вернут одно и то же значение.
— Причинно-следственная согласованность. Гарантирует, что если одно событие причинно предшествует другому, все узлы будут соблюдать одинаковый причинный порядок событий. Эта модель важна в системах, где важен порядок выполнения операций, например, в распределённых очередях сообщений или приложениях совместного редактирования.
— Согласованность чтения и записи. Гарантирует, что после завершения операции записи все последующие операции чтения от того же клиента вернут значение записи или более свежее значение.
— Монотонная согласованность. Гарантирует, что если процесс считывает определённое значение элемента данных, он никогда не увидит более старое значение для этого элемента в будущем.
— Согласованность сеанса. Взаимодействие пользователя в рамках сеанса должно быть согласованным, но в разных сеансах допускается небольшая несогласованность.

Выбор модели согласованности зависит от конкретных требований системы, включая потребность в согласованности, доступности и допуске разделения.
Вам может быть интересно
Цель этой статьи — ответить на один вопрос: как можно использовать Redis в качестве основной базы данных для сложных приложений, которым необходимо хранить данные в нескольких форматах? Сначала ...
Программное обеспечение хранилища данных помогает организациям хранить, управлят...
В этой статье разработчики компании DST Global ...
Тестирование — это сквозная проблема; Как и ...
Двоичное квантование в векторных базах данных повы...
В этой статье вы узнаете от разработчиков компании...
Узнайте о преимуществах от разработчиков компании ...
Oracle — самая популярная база данных в мире...
В этом комплексном сравнении от разработчиков комп...
: создание эффективных практик разработки и обслуж...

Новые комментарии

Некоторые преимущества двоичного квантования: — Улучшенная производительность...
Модели согласованности в распределённых системах устанавливают критерии синхрони...
Сколько можно это обсуждать: — В CAP partition, consistency и availability...

Заявка на услуги DST

Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.

Адрес

Ижевск, ул. Воткинское шоссе, д. 170 Е, Технопарк Нобель, офис 1117

8 495 1985800
Заказать звонок

Режим работы: Пн-Пт 10:00-19:00

info@dstglobal.ru

Задать вопрос по почте

Укажите ваше имя
Укажите ваше email
Укажите ваше телефон