Уровни согласованности в Azure Cosmos DB

ПРИМЕНИМО К: API SQL API Cassandra API Gremlin API таблиц API Azure Cosmos DB для MongoDB

Распределенные базы данных, использующие репликацию для обеспечения высокой доступности, низкой задержки или и того и другого, должны обеспечить фундаментальный компромисс между согласованностью чтения, доступностью, задержкой и пропускной способностью, как определено в PACELC Теорема. Линеаризация модели строгой согласованности является эталонной для поддержки программируемости данных. Но у нее есть своя цена, обусловленная высокой задержкой при записи из-за данных, требующих репликации и фиксации на больших расстояниях. Строгая согласованность может также пострадать от снижения доступности (во время сбоев), так как данные не могут реплицироваться и фиксироваться в каждом регионе. Итоговая согласованность обеспечивает более высокую доступность и лучшую производительность, но усложняет программирование приложений, поскольку данные могут быть не полностью согласованы во всех регионах.

В настоящее время большинство коммерческих доступных на рынке распределенных баз данных NoSQL обеспечивают только строгую и итоговую согласованность. Azure Cosmos DB предлагает пять четко определенных уровней. Здесь они приведены в порядке от сильных к слабым:

  • Уровень согласованности "Строгая"
  • Ограниченное устаревание
  • Session
  • Постоянный префикс
  • Итоговая

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

Согласованность как спектр

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

Уровни согласованности и API для Azure Cosmos DB

Azure Cosmos DB поддерживает API-интерфейсы, совместимые с проводными протоколами для популярных баз данных. Последние включают в себя MongoDB, Apache Cassandra, Gremlin и хранилище таблиц Azure. Для API Gremlin и API таблиц используется уровень согласованности по умолчанию, настроенный для учетной записи Azure Cosmos. Дополнительные сведения о сопоставлении уровней согласованности между API Cassandra или API для уровней согласованности для MongoDB и Azure Cosmos DB см. в статьях Сопоставление согласованности API Cassandra и API для сопоставления согласованности MongoDB.

Область согласованности данных при чтении

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

Настройка уровня согласованности по умолчанию

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

Совет

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

Важно!

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

Гарантии, связанные с уровнями согласованности

Azure Cosmos DB гарантирует, что 100 % запросов на чтение будут соответствовать гарантии согласованности для выбранного уровня согласованности. Четкие определения пяти уровней согласованности в Azure Cosmos DB, выраженные на языке спецификаций TLA+, размещены в репозитории GitHub azure-cosmos-tla.

В следующих разделах описана семантика этих пяти уровней согласованности.

Строгая согласованность

Строгая согласованность гарантирует линеаризацию. Линеаризация означает одновременное обслуживание запросов. Все операции чтения гарантированно возвращают последнюю версию элемента. Клиент никогда не увидит не зафиксированную или частично измененную запись. Пользователь всегда гарантированно сможет прочесть последнюю зафиксированную запись.

На следующем рисунке показана строгая согласованность на примере музыкальных нот. После того как данные записываются в регион Западная часть США 2, при чтении данных из других регионов вы получаете последнее значение:

Иллюстрация уровня строгой согласованности

Согласованность с ограниченным устареванием

При согласованности уровня "ограниченное устаревание" операции чтения всегда учитывают гарантию постоянного префикса. Операции чтения могут отставать от записи не более чем на K версий (обновлений) любого элемента или не более чем на интервал времени T, смотря что будет достигнуто первым. Другими словами, выбрав режим ограниченного устаревания, вы можете настроить один из двух параметров, ограничивающих это устаревание:

  • количество версий (K) элемента;
  • интервал времени (T), на который операция чтения может отставать от записи.

Для учетной записи с одним регионом минимальное значение K и T равно 10 операциям записи или 5 секундам. Для учетной записи с несколькими регионами минимальное значение K и T равно 100 000 операциям записи или 300 секундам.

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

В окне устаревания ограниченное устаревание обеспечивает следующие гарантии согласованности.

  • Согласованность для клиентов в одном регионе для учетной записи с единственным регионом записи = строгая.

  • Согласованность для клиентов в разных регионах для учетной записи с единственным регионом записи = постоянный префикс.

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

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

    Согласованность с ограниченным устареванием чаще всего используется в глобально распределенных приложениях, где ожидаются низкие задержки записи, но требуются гарантии общего глобального порядка. Ограниченное устаревание отлично подходит для приложений, использующих совместную работу групп и совместное использование, приложений биржевых котировок, публикации-подписки/очередей и т. д. Следующий рисунок показывает согласованность с ограниченным устареванием на примере музыкальных нот. После того как данные записываются в регион Западная часть США 2, регионы Восточная часть США 2 и Восточная Австралия считывают записанное значение на основе заданного максимального времени запаздывания или максимального числа операций:

    Иллюстрация уровня согласованности с ограниченным устареванием

Согласованность сеанса

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

Клиенты за пределами сеанса, выполняющего операции записи, увидят следующие гарантии:

  • Согласованность для клиентов в одном и том же регионе для учетной записи с единственным регионом записи = постоянный префикс.

  • Согласованность для клиентов в разных регионах для учетной записи с единственным регионом записи = постоянный префикс.

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

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

  • согласованность для клиентов, использующих встроенный кэш Azure Cosmos DB = в конечном итоге

    Согласованность сеанса — это наиболее широко используемый уровень согласованности как для приложений в одном регионе, так и для глобальных приложений. Задержки записи, доступность и пропускная способность операций чтения в этой модели сравнимы с показателями для случайной согласованности, но здесь также есть гарантии согласованности, подходящие для приложений, работающих в контексте пользователя. На следующем рисунке показана согласованность сеанса на примере музыкальных нот. Модуль записи "Западная часть США 2" и модуль чтения "Западная часть США 2" используют один сеанс (сеанс А), так что они одновременно читают одни и те же данные. В то же время регион Восточная Австралия использует сеанс В, он получает данные позже, но в том же порядке, в котором были выполнены записи.

    Иллюстрация уровня согласованности сеанса

Согласованность с постоянным префиксом

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

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

Ниже приведены гарантии согласованности для согласованного префикса.

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

На следующем рисунке показана согласованность с постоянным префиксом на примере музыкальных нот. Во всех регионах операции чтения никогда не видят неупорядоченных записей:

Иллюстрация постоянного префикса

Итоговая согласованность

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

Иллюстрация итоговой согласованности

Гарантии согласованности на практике

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

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

Если для учетной записи Azure Cosmos настроен уровень согласованности, отличный от строгой согласованности, просмотрев данные метрики вероятностного ограниченного устаревания (PBS), вы узнаете вероятность получения вашими клиентами строго согласованных операций чтения для рабочей нагрузки. Эта метрика предоставляется на портале Azure. Дополнительные сведения см. в разделе Мониторинг метрики вероятностного ограниченного устаревания (PBS).

Вероятностное ограниченное устаревание показывает степень итоговой согласованности. Эта метрика дает сведения о том, как часто вы получаете более строгую согласованность, нежели та, которая настроена для учетной записи Azure Cosmos. Другими словами, вы можете увидеть вероятность (в миллисекундах) выполнения строго согласованных операций чтения для комбинации регионов записи и чтения.

Уровни согласованности и время задержки

Задержка чтения для всех уровней согласованности гарантированно никогда не превышает 10 миллисекунд для 99-го процентиля, Среднее время задержки чтения (50-й процентиль) обычно не превышает 4 миллисекунд.

Задержка записи для всех уровней согласованности гарантированно никогда не превышает 10 миллисекунд для 99-го процентиля, Среднее время задержки записи (50-й процентиль) обычно не превышает 5 миллисекунд. Учетные записи Azure Cosmos, охватывающие несколько регионов и настраиваемые со строгой согласованностью, являются исключением из этой гарантии.

Задержка записи и строгая согласованность

Для учетных записей Azure Cosmos, для которых настроена строгая согласованность с несколькими регионами, задержка записи равна двум значениям времени приема-передачи (RTT) между любым из двух самых дальних регионов плюс 10 миллисекунд на 99-м процентиле. Высокая задержка сетевого переключения между регионами приведет к более высокой задержке для запросов Cosmos DB, так как строгая согласованность завершает операцию только после того, как гарантируется, что она зафиксирована во всех регионах в пределах учетной записи.

Точная задержка RTT определяется расстоянием, которое преодолевает сигнал, двигаясь со скоростью света, и топологией сети Azure. Сеть Azure не предоставляет соглашений об уровне обслуживания для задержки RTT между любыми двумя регионами Azure, однако она публикует статистику задержки приема-передачи для сети Azure. Задержки репликации учетной записи Azure Cosmos отображаются на портале Azure. Вы можете использовать портал Azure (перейдите в колонку Metrics (Метрики) и выберите вкладку Consistency (Согласованность)), чтобы отслеживать задержки репликации между различными регионами, связанными с вашей учетной записью Azure Cosmos.

Важно!

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

Уровни согласованности и пропускная способность

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

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

Уровень согласованности Операции чтения кворума Операции записи кворума
Уровень согласованности "Строгая" Местное меньшинство Глобальное большинство
Ограниченное устаревание Местное меньшинство Местное большинство
Session Одна реплика (с использованием токена сеанса) Местное большинство
Постоянный префикс Одна реплика Местное большинство
Итоговая Одна реплика Местное большинство

Примечание

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

Уровни согласованности и устойчивость данных

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

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

Регионы Режим репликации Уровень согласованности RPO
1 Один или несколько регионов записи Любой уровень согласованности < 240 минут
>1 Один регион записи Сеанс, постоянный префикс, случайный < 15 минут
>1 Один регион записи Ограниченное устаревание K & T
>1 Один регион записи Уровень согласованности "Строгая" 0
>1 Несколько регионов записи Сеанс, постоянный префикс, случайный < 15 минут
>1 Несколько регионов записи Ограниченное устаревание K & T

K = число версий K (т. е. обновлений) элемента.

T = временной интервал T со времени последнего обновления.

Для учетной записи с одним регионом минимальное значение K и T равно 10 операциям записи или 5 секундам. Для учетной записи с несколькими регионами минимальное значение K и T равно 100 000 операциям записи или 300 секундам. Определяет минимальное значение RPO для данных при использовании ограниченного устаревания.

Строгая согласованность и несколько регионов записи

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

Дополнительные материалы

Дополнительные сведения об основных понятиях согласованности можно найти в следующих статьях.

Дальнейшие действия

Дополнительные сведения об уровнях согласованности в Azure Cosmos DB можно найти в следующих статьях.