Apache Cassandra и Azure Cosmos DB для уровней согласованности Apache Cassandra

Область применения: Кассандра

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

  • Уровень согласованности записи Apache Cassandra сопоставляется с уровнем согласованности по умолчанию, настроенным в учетной записи Azure Cosmos DB. Согласованность для операции записи (CL) не может быть изменена отдельно для каждого запроса.
  • Azure Cosmos DB динамически сопоставляет уровень согласованности чтения, указанный драйвером клиента Cassandra. Уровень согласованности будет сопоставлен с одним из уровней согласованности Azure Cosmos DB, настроенных динамически в запросе на чтение.

Операции записи в несколько регионов в сравнении с операциями записи в одном регионе

База данных Apache Cassandra — это система с несколькими узлами по умолчанию и не предоставляет стандартный вариант для записи в одном регионе с репликацией с несколькими регионами для операций чтения. Однако Azure Cosmos DB содержит готовую возможность иметь конфигурации чтения либо в одном регионе, либо в нескольких регионах. Одним из преимуществ возможности выбора конфигурации записи в одном регионе среди нескольких регионов является предотвращение сценариев конфликтов между регионами и возможность поддержания строгой согласованности в нескольких регионах.

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

Сопоставление уровней согласованности

Платформа Azure Cosmos DB предоставляет набор из пяти четко определенных параметров согласованности, ориентированных на использование бизнеса в отношении репликации. Компромиссы с этими параметрами согласованности определяются теоремами CAP и PACLC . Так как этот подход значительно отличается от Apache Cassandra, рекомендуется провести проверку и понимание согласованности Azure Cosmos DB. Кроме того, вы можете ознакомиться с этим кратким видеоматериалом, чтобы понять параметры согласованности на платформе Azure Cosmos DB. В следующей таблице показаны возможные сопоставления между уровнями согласованности Apache Cassandra и Azure Cosmos DB при использовании API для Cassandra. В этой таблице показаны конфигурации для одного региона, многорегионарных операций чтения с однорегионными записью и записью в нескольких регионах.

Сопоставления

Примечание.

Эти сопоставления не являются точными. Вместо этого мы предоставили наиболее близкие аналоги для Apache Cassandra и указали все качественные различия в крайнем правом столбце. Как упоминалось выше, рекомендуется ознакомиться с параметрами согласованности Azure Cosmos DB.

ALL, , EACH_QUOROM, LOCAL_QUORUMQUOROMили THREE согласованность записи в Apache Cassandra

Согласованность чтения Apache Чтение из Ближайший уровень согласованности Azure Cosmos DB к параметрам чтения и записи Apache Cassandra
ALL Локальный регион Strong
EACH_QUOROM Локальный регион Strong
QUOROM Локальный регион Strong
LOCAL_QUORUM Локальный регион Strong
LOCAL_ONE Локальный регион Eventual
ONE Локальный регион Eventual
TWO Локальный регион Strong
THREE Локальный регион Strong

В отличие от Apache и DSE Cassandra, Azure Cosmos DB по умолчанию фиксирует запись кворума. По крайней мере три из четырех узлов (3/4) фиксируют запись на диск, а не только журнал фиксации в памяти.

ONE, LOCAL_ONEили ANY согласованность записи в Apache Cassandra

Согласованность чтения Apache Чтение из Ближайший уровень согласованности Azure Cosmos DB к параметрам чтения и записи Apache Cassandra
ALL Локальный регион Strong
EACH_QUOROM Локальный регион Eventual
QUOROM Локальный регион Eventual
LOCAL_QUORUM Локальный регион Eventual
LOCAL_ONE Локальный регион Eventual
ONE Локальный регион Eventual
TWO Локальный регион Eventual
THREE Локальный регион Eventual

API Azure Cosmos DB для Cassandra всегда постоянно фиксирует запись кворума по умолчанию, поэтому все согласованности чтения можно использовать.

TWO согласованность записи в Apache Cassandra

Согласованность чтения Apache Чтение из Ближайший уровень согласованности Azure Cosmos DB к параметрам чтения и записи Apache Cassandra
ALL Локальный регион Strong
EACH_QUOROM Локальный регион Strong
QUOROM Локальный регион Strong
LOCAL_QUORUM Локальный регион Strong
LOCAL_ONE Локальный регион Eventual
ONE Локальный регион Eventual
TWO Локальный регион Eventual
THREE Локальный регион Strong

Azure Cosmos DB не имеет понятия о согласованности записи только на два узла, поэтому мы рассмотрим эту согласованность, аналогичную кворуму в большинстве случаев. Для обеспечения согласованности TWOчтения эта согласованность эквивалентна записи и QUOROM считывания.ONE

Serialили Local_Serial запись согласованности в Apache Cassandra

Согласованность чтения Apache Чтение из Ближайший уровень согласованности Azure Cosmos DB к параметрам чтения и записи Apache Cassandra
ALL Локальный регион Strong
EACH_QUOROM Локальный регион Strong
QUOROM Локальный регион Strong
LOCAL_QUORUM Локальный регион Strong
LOCAL_ONE Локальный регион Eventual
ONE Локальный регион Eventual
TWO Локальный регион Strong
THREE Локальный регион Strong

Сериал применяется только к упрощенным транзакциям. Azure Cosmos DB следует за алгоритмом , который по умолчанию зафиксирован , и Serial поэтому согласованность аналогична кворуму.

Другие регионы для записи в один регион

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

Azure Cosmos DB не имеет применимого сопоставления с Apache Cassandra, так как все узлы и регионы записываются, и надежная гарантия согласованности невозможна во всех регионах.

Другие регионы для записи в нескольких регионах

Azure Cosmos DB упрощает только четыре параметра согласованности; eventual, , sessionconsistent prefixи bounded staleness в нескольких регионах, где настроена запись в нескольких регионах.

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

Поддерживаются динамические переопределения

Настройка учетной записи Azure Cosmos DB Переопределение значения в запросе клиента Влияющее переопределение
Strong All Нет эффекта (остаться как strong)
Strong Quorum Нет эффекта (остаться как strong)
Strong LocalQuorum Нет эффекта (остаться как strong)
Strong Two Нет эффекта (остаться как strong)
Strong Three Нет эффекта (остаться как strong)
Strong Serial Нет эффекта (остаться как strong)
Strong LocalSerial Нет эффекта (остаться как strong)
Strong One Изменения согласованности Eventual
Strong LocalOne Изменения согласованности Eventual
Strong Any Не разрешено (ошибка)
Strong EachQuorum Не разрешено (ошибка)
Bounded staleness, session или consistent prefix All Не разрешено (ошибка)
Bounded staleness, session или consistent prefix Quorum Не разрешено (ошибка)
Bounded staleness, session или consistent prefix LocalQuorum Не разрешено (ошибка)
Bounded staleness, session или consistent prefix Two Не разрешено (ошибка)
Bounded staleness, session или consistent prefix Three Не разрешено (ошибка)
Bounded staleness, session или consistent prefix Serial Не разрешено (ошибка)
Bounded staleness, session или consistent prefix LocalSerial Не разрешено (ошибка)
Bounded staleness, session или consistent prefix One Изменения согласованности Eventual
Bounded staleness, session или consistent prefix LocalOne Изменения согласованности Eventual
Bounded staleness, session или consistent prefix Any Не разрешено (ошибка)
Bounded staleness, session или consistent prefix EachQuorum Не разрешено (ошибка)

Метрики

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

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

Глобальная строгой согласованность для запросов на запись в Apache Cassandra

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

На следующем рисунке показан глобальный параметр строгой согласованности в Apache Cassandra между двумя регионами 1 и 2. После записи данных в регион 1 запись должна сохраняться в кворуме числа узлов в обоих регионах 1 и регионе 2, прежде чем подтверждение будет получено приложением.

Схема глобальной согласованности записи в Apache Cassandra.

Глобальная надежная согласованность для запросов на запись в Azure Cosmos DB для Apache Cassandra

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

Схема глобальной согласованности записи в Azure Cosmos DB для Apache Cassandra.

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

  • Два региона: с строгой согласованность, кворум (N/2 + 1) = 2. Таким образом, если регион чтения исчез, учетная запись больше не может принимать записи с строгой согласованности, так как количество регионов кворума недоступно для репликации записи.
  • Три или более регионов: для N = 3, quorum = 2 Если один из регионов чтения отключен, регион записи по-прежнему может реплицировать записи в общей сложности в два региона, которые соответствуют требованию кворума. Аналогичным образом, с четырьмя регионами. quorum = 4/2 + 1 = 3 Даже если один регион чтения вниз, кворум можно выполнить.

Примечание.

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

Слабая согласованность запросов на запись в Apache Cassandra

Уровень ANYсогласованности , , ONE, LOCAL_QUORUMSerial TWOTHREEили ?Local_Serial Рассмотрим запрос на запись с LOCAL_QUORUM RF 4 помощью шестиузлового центра обработки данных. Quorum = 4/2 + 1 = 3.

Схема согласованности не глобальной записи в Apache Cassandra.

Слабая согласованность запросов на запись в Azure Cosmos DB для Apache Cassandra

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

Схема согласованности не глобальной записи в Azure Cosmos DB для Apache Cassandra.

Глобальная надежная согласованность для запросов на чтение в Apache Cassandra

Благодаря согласованности EACH_QUORUMсогласованное чтение можно достичь в Apache Cassandra. В случае EACH_QUORUM , если количество узлов кворума не выполняется в каждом регионе, чтение будет неудачным.

Схема глобальной согласованности чтения в Apache Cassandra.

Глобальная надежная согласованность запросов на чтение в Azure Cosmos DB для Apache Cassandra

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

Схема глобальной согласованности чтения в Azure Cosmos DB для Apache Cassandra.

Локальная надежная согласованность в Apache Cassandra

Запрос на чтение с уровнем TWOсогласованности , THREEили LOCAL_QUORUM даст нам строгое чтение согласованности из локального региона. При уровне LOCAL_QUORUMсогласованности требуется ответ от двух узлов в указанном центре обработки данных для успешного чтения.

Схема локальной строгой согласованности чтения в Apache Cassandra.

Локальная надежная согласованность в Azure Cosmos DB для Apache Cassandra

В Azure Cosmos DB для Cassandra, наличие уровня TWOTHREE согласованности или LOCAL_QUORUM предоставление локальной строгой согласованности для запроса на чтение. Так как путь записи гарантирует репликацию как минимум на три из четырех реплик, чтение из двух реплик в указанном регионе гарантирует чтение кворума данных в этом регионе.

Схема локальной строгой согласованности чтения в Azure Cosmos DB для Apache Cassandra.

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

Уровень LOCAL_ONEOne согласованности и ANY with LOCAL_ONE приведет к конечной согласованности. Эта согласованность используется в случаях, когда основное внимание уделяется задержке.

Схема конечной согласованности чтения в Apache Cassandra.

В конечном итоге согласованность в Azure Cosmos DB для Apache Cassandra?

Уровень LOCAL_ONEONE согласованности или Any даст вам конечную согласованность. При конечной согласованности чтение выполняется только из одной из реплик в указанном регионе.

Схема конечной согласованности чтения в Azure Cosmos DB для Apache Cassandra.

Переопределите уровень согласованности для операций чтения в Azure Cosmos DB для Cassandra

Ранее уровень согласованности для запросов на чтение можно переопределить только на более низкую согласованность, чем заданный по умолчанию в учетной записи. Например, при согласованности по умолчанию запросов на чтение можно выдавать с помощью Strong по умолчанию и переопределяться на основе каждого запроса (при необходимости) на уровень согласованности слабее, чем Strong. Однако запросы на чтение не могут быть выданы с переопределенным уровнем согласованности выше, чем по умолчанию учетной записи. Учетная запись с конечной согласованностью не могла получать запросы на чтение с уровнем согласованности выше, чем в конце (которые в драйверах Apache Cassandra преобразуются в TWO, THREELOCAL_QUORUM или QUORUM).

Azure Cosmos DB для Cassandra теперь упрощает переопределение согласованности для запросов чтения на значение выше, чем согласованность по умолчанию учетной записи. Например, при согласованности по умолчанию в учетной записи Cosmos DB задано значение "В конечном итоге" (эквивалент One Apache Cassandra или ANY), запросы на чтение можно переопределить на основе LOCAL_QUORUMкаждого запроса. Это переопределение гарантирует, что количество реплик в указанном регионе запрашивается перед возвратом результирующих наборов по мере необходимости LOCAL_QUORUM.

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

Следующие шаги

Узнайте больше о глобальном распределении и уровнях согласованности в Azure Cosmos DB: