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_QUORUM
QUOROM
или 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
, , session
consistent 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, прежде чем подтверждение будет получено приложением.
Глобальная надежная согласованность для запросов на запись в Azure Cosmos DB для Apache Cassandra
В Azure Cosmos DB согласованность устанавливается на уровне учетной записи. Благодаря Strong
согласованности в Azure Cosmos DB для Cassandra данные реплицируются синхронно в области чтения для учетной записи. Чем дальше отделяются регионы для учетной записи Azure Cosmos DB, тем выше задержка согласованных операций записи.
Как количество регионов влияет на запрос на чтение или запись:
- Два региона: с строгой согласованность, кворум
(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_QUORUM
Serial
TWO
THREE
или ?Local_Serial
Рассмотрим запрос на запись с LOCAL_QUORUM
RF
4
помощью шестиузлового центра обработки данных. Quorum = 4/2 + 1 = 3
.
Слабая согласованность запросов на запись в Azure Cosmos DB для Apache Cassandra
Когда запрос на запись отправляется с любым из уровней согласованности ниже Strong
, чем, ответ успешно возвращается, как только локальный регион сохраняет запись по крайней мере в трех из четырех реплик.
Глобальная надежная согласованность для запросов на чтение в Apache Cassandra
Благодаря согласованности EACH_QUORUM
согласованное чтение можно достичь в Apache Cassandra. В случае EACH_QUORUM
, если количество узлов кворума не выполняется в каждом регионе, чтение будет неудачным.
Глобальная надежная согласованность запросов на чтение в Azure Cosmos DB для Apache Cassandra
Запрос на чтение обслуживается из двух реплик в указанном регионе. Так как запись уже позаботилась о сохранении в кворуме числа регионов (и всех регионов, если каждый регион был доступен), просто считывание из двух реплик в указанном регионе обеспечивает надежную согласованность. Эта строговая согласованность требуется EACH_QUORUM
указать в драйвере при выдаче сведений в регионе для учетной записи Cosmos DB, а также строгой согласованности в качестве уровня согласованности по умолчанию для учетной записи.
Локальная надежная согласованность в Apache Cassandra
Запрос на чтение с уровнем TWO
согласованности , THREE
или LOCAL_QUORUM
даст нам строгое чтение согласованности из локального региона. При уровне LOCAL_QUORUM
согласованности требуется ответ от двух узлов в указанном центре обработки данных для успешного чтения.
Локальная надежная согласованность в Azure Cosmos DB для Apache Cassandra
В Azure Cosmos DB для Cassandra, наличие уровня TWO
THREE
согласованности или LOCAL_QUORUM
предоставление локальной строгой согласованности для запроса на чтение. Так как путь записи гарантирует репликацию как минимум на три из четырех реплик, чтение из двух реплик в указанном регионе гарантирует чтение кворума данных в этом регионе.
Итоговая согласованность в Apache Cassandra
Уровень LOCAL_ONE
One
согласованности и ANY with LOCAL_ONE
приведет к конечной согласованности. Эта согласованность используется в случаях, когда основное внимание уделяется задержке.
В конечном итоге согласованность в Azure Cosmos DB для Apache Cassandra?
Уровень LOCAL_ONE
ONE
согласованности или Any
даст вам конечную согласованность. При конечной согласованности чтение выполняется только из одной из реплик в указанном регионе.
Переопределите уровень согласованности для операций чтения в Azure Cosmos DB для Cassandra
Ранее уровень согласованности для запросов на чтение можно переопределить только на более низкую согласованность, чем заданный по умолчанию в учетной записи. Например, при согласованности по умолчанию запросов на чтение можно выдавать с помощью Strong по умолчанию и переопределяться на основе каждого запроса (при необходимости) на уровень согласованности слабее, чем Strong. Однако запросы на чтение не могут быть выданы с переопределенным уровнем согласованности выше, чем по умолчанию учетной записи. Учетная запись с конечной согласованностью не могла получать запросы на чтение с уровнем согласованности выше, чем в конце (которые в драйверах Apache Cassandra преобразуются в TWO
, THREE
LOCAL_QUORUM
или QUORUM
).
Azure Cosmos DB для Cassandra теперь упрощает переопределение согласованности для запросов чтения на значение выше, чем согласованность по умолчанию учетной записи. Например, при согласованности по умолчанию в учетной записи Cosmos DB задано значение "В конечном итоге" (эквивалент One
Apache Cassandra или ANY
), запросы на чтение можно переопределить на основе LOCAL_QUORUM
каждого запроса. Это переопределение гарантирует, что количество реплик в указанном регионе запрашивается перед возвратом результирующих наборов по мере необходимости LOCAL_QUORUM
.
Этот параметр также предотвращает необходимость задать согласованность по умолчанию, которая выше Eventual
, чем при необходимости только для запросов на чтение.