Уровни согласованности 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, QUOROM, LOCAL_QUORUMили 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.

SerialLocal_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

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

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

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

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

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

Azure Cosmos DB поддерживает только четыре параметра согласованности; eventual, consistent prefix, sessionи 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 значение Strong. Уровень согласованности для операций записи нельзя переопределить на более низкий уровень согласованности для каждого запроса в Azure Cosmos DB.

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

Уровень согласованности ANY, ONE, TWO, THREE, LOCAL_QUORUMили SerialLocal_Serial? Рассмотрите запрос на запись с LOCAL_QUORUM параметром 4RF в центре обработки данных с шестью узлами. 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

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

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

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

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

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

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

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

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

Итоговая согласованность в Azure Cosmos DB для Apache Cassandra?

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

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

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

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

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

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

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

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