Уровни согласованности 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
.
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 |
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, прежде чем приложение получит подтверждение.
Глобальная строжайная согласованность запросов на запись в 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 значение Strong. Уровень согласованности для операций записи нельзя переопределить на более низкий уровень согласованности для каждого запроса в Azure Cosmos DB.
Слабая согласованность запросов на запись в Apache Cassandra
Уровень согласованности ANY
, ONE
, TWO
, THREE
, LOCAL_QUORUM
или Serial
Local_Serial
? Рассмотрите запрос на запись с LOCAL_QUORUM
параметром 4
RF
в центре обработки данных с шестью узлами. 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
Запрос на чтение с уровнем согласованности , THREE
или LOCAL_QUORUM
обеспечит надежную согласованность при чтении из локального TWO
региона. При уровне согласованности 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 по умолчанию и переопределяться по каждому запросу (при необходимости) на более слабый уровень согласованности, чем Strong. Однако запросы на чтение не могут быть выданы с переопределенным уровнем согласованности, превышающим значение по умолчанию для учетной записи. Учетная запись с итоговой согласованностью не могла получать запросы на чтение с уровнем согласованности выше, чем в конечной версии (которые в драйверах Apache Cassandra преобразуются TWO
в , THREE
LOCAL_QUORUM
или QUORUM
).
Azure Cosmos DB для Cassandra теперь упрощает переопределение согласованности запросов на чтение значением, превышающим согласованность учетной записи по умолчанию. Например, если для учетной записи Cosmos DB задана согласованность по умолчанию (Apache Cassandra эквивалент One
или ANY
), запросы на чтение можно переопределить для каждого запроса в LOCAL_QUORUM
. Это переопределение гарантирует, что количество реплик кворума в указанном регионе будет проконсультироваться перед возвратом результирующих наборов, как это требуется в .LOCAL_QUORUM
Этот параметр также предотвращает необходимость установки согласованности по умолчанию, которая выше , если Eventual
она требуется только для запросов на чтение.
Дальнейшие действия
Узнайте больше о глобальном распределении и уровнях согласованности в Azure Cosmos DB: