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

Репликация распределенных баз данных для обеспечения высокого уровня их доступности и низкой задержки предполагает компромисс между согласованностью чтения и такими параметрами, как доступность, время задержки и пропускная способность.Distributed databases that rely on replication for high availability, low latency, or both, make the fundamental tradeoff between the read consistency vs. availability, latency, and throughput. Большинство коммерческих доступных распределенных баз данных запрашивают от разработчиков выбор между двумя экстремальными моделями согласованности: строгая согласованность и Окончательная согласованность.Most commercially available distributed databases ask developers to choose between the two extreme consistency models: strong consistency and eventual consistency. Линеаризации модели строгой согласованности является золотым стандартом программирования данных.The linearizability of the strong consistency model is the gold standard of data programmability. Но при этом добавляется цена более высокой задержки записи (в стабильном состоянии) и снижается доступность (во время сбоев).But it adds a price of higher write latency (in steady state) and reduced availability (during failures). С другой стороны, окончательная согласованность обеспечивает более высокую доступность и лучшую производительность, но затрудняет программирование приложений.On the other hand, eventual consistency offers higher availability and better performance, but makes it hard to program applications.

В Azure Cosmos DB согласованность данных рассматривается как плавный спектр возможных вариантов, а не две крайности.Azure Cosmos DB approaches data consistency as a spectrum of choices instead of two extremes. Разработчики могут использовать эти параметры для обеспечения точного выбора и детального компромисса относительно высокого уровня доступности и производительности.Developers can use these options to make precise choices and granular tradeoffs with respect to high availability and performance.

С помощью Azure Cosmos DB разработчики могут выбрать один из пяти четко определенных уровней согласованности для спектра согласованности.With Azure Cosmos DB, developers can choose from five well-defined consistency levels on the consistency spectrum. К этим уровням относятся строгая, ограниченная устаревания, сеанс, согласованный префикси Окончательная согласованность.These levels include strong, bounded staleness, session, consistent prefix, and eventual consistency. Уровни четко определены и понятны и могут использоваться для конкретных реальных сценариев.The levels are well-defined and intuitive and can be used for specific real-world scenarios. Каждый уровень предоставляет компромиссы по доступности и производительности , а также поддерживает соглашения об уровне обслуживания.Each level provides availability and performance tradeoffs and are backed by SLAs. На следующем рисунке показаны различные уровни согласованности в качестве спектра.The following image shows the different consistency levels as a spectrum.

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

Уровни согласованности не зависят от региона и гарантированно выполняются для всех операций независимо от региона, из которого обслуживаются операции чтения и записи, число регионов, связанных с учетной записью Cosmos Azure, или для вашей учетной записи настроен один или несколько регионов записи.The consistency levels are region-agnostic and are guaranteed for all operations regardless of the region from which the reads and writes are served, the number of regions associated with your Azure Cosmos account, or whether your account is configured with a single or multiple write regions.

Область согласованности данных при чтенииScope of the read consistency

Согласованность чтения применяется к одной операции чтения, ограниченной в пределах логической секции.Read consistency applies to a single read operation scoped within a logical partition. Операции чтения могут выдаваться удаленным клиентом или хранимой процедурой.The read operation can be issued by a remote client or a stored procedure.

Настройка уровня согласованности по умолчаниюConfigure the default consistency level

Уровень согласованности по умолчанию в учетной записи Azure Cosmos DB можно настроить в любое время.You can configure the default consistency level on your Azure Cosmos account at any time. Уровень согласованности по умолчанию, настроенный для учетной записи, применяется ко всем базам данных и контейнерам Azure Cosmos в этой учетной записи.The default consistency level configured on your account applies to all Azure Cosmos databases and containers under that account. Все операции чтения и запросы к контейнеру или базе данных будут по умолчанию использовать указанный уровень согласованности.All reads and queries issued against a container or a database use the specified consistency level by default. Дополнительные сведения см.в статье о настройке уровня согласованности по умолчанию.To learn more, see how to configure the default consistency level.

Гарантии, связанные с уровнями согласованностиGuarantees associated with consistency levels

Комплексные соглашения об уровне обслуживания, предоставляемые Azure Cosmos DB, гарантируют соблюдение гарантий согласованности выбранного уровня для 100 % запросов на чтение.The comprehensive SLAs provided by Azure Cosmos DB guarantee that 100 percent of read requests meet the consistency guarantee for any consistency level you choose. Запрос на чтение соответствует соглашению об уровне обслуживания, если удовлетворяются гарантии согласованности, связанные с выбранным уровнем согласованности.A read request meets the consistency SLA if all the consistency guarantees associated with the consistency level are satisfied. Точные определения пяти уровней согласованности в Azure Cosmos DB, использующих язык спецификации TLA +, приведены в репозитории GitHub Azure-Cosmos-TLA .The precise definitions of the five consistency levels in Azure Cosmos DB using the TLA+ specification language are provided in the azure-cosmos-tla GitHub repo.

Ниже описана семантика этих пяти уровней согласованности.The semantics of the five consistency levels are described here:

  • Strong: строгая согласованность обеспечивает гарантию линеаризации.Strong: Strong consistency offers a linearizability guarantee. Линеаризации означает одновременное обслуживание запросов.Linearizability refers to serving requests concurrently. Все операции чтения гарантированно возвращают последнюю версию элемента.The reads are guaranteed to return the most recent committed version of an item. Клиент никогда не увидит не зафиксированную или частично измененную запись.A client never sees an uncommitted or partial write. Пользователь всегда гарантированно сможет прочесть последнюю зафиксированную запись.Users are always guaranteed to read the latest committed write.

    На следующем рисунке показана строгая согласованность с музыкальными примечаниями.The following graphic illustrates the strong consistency with musical notes. После того как данные записываются в регион "Западная часть США 2", при чтении данных из других регионов вы получаете Последнее значение:After the data is written to the "West US 2" region, when you read the data from other regions, you get the most recent value:

    video

  • Ограниченное устаревание: операции чтения гарантированно учитывают гарантию соответствия префиксов.Bounded staleness: The reads are guaranteed to honor the consistent-prefix guarantee. Операции чтения могут отставать от операций записи по большинству версий "K" (то есть "обновления") элемента или по "T" интервалу времени.The reads might lag behind writes by at most "K" versions (that is, "updates") of an item or by "T" time interval. Иными словами, при выборе ограниченного устаревания можно настроить «устаревания» двумя способами.In other words, when you choose bounded staleness, the "staleness" can be configured in two ways:

  • Число версий элемента (K)The number of versions (K) of the item

  • Интервал времени (T), на который операции чтения могут отставать от записиThe time interval (T) by which the reads might lag behind the writes

Ограниченная устаревшая версия предлагает общий глобальный порядок за пределами "окна устаревания".Bounded staleness offers total global order outside of the "staleness window." Если клиент выполняет операции чтения в регионе, который принимает записи, то гарантии, обеспечиваемые согласованностью ограниченного устаревания, идентичны этим гарантиям строгой согласованности.When a client performs read operations within a region that accepts writes, the guarantees provided by bounded staleness consistency are identical to those guarantees by the strong consistency.

В окне устаревания ограничения ограниченного устаревания обеспечивают следующие гарантии согласованности.Inside the staleness window, Bounded Staleness provides the following consistency guarantees:

  • Согласованность для клиентов в одном регионе для учетной записи с одним главным узлом = strongConsistency for clients in the same region for a single-master account = Strong

  • Согласованность для клиентов в разных регионах для одной учетной записи с одним главным узлом = согласованный префиксConsistency for clients in different regions for a single-master account = Consistent Prefix

  • Согласованность для клиентов, записывающих в один регион для учетной записи с несколькими хозяевами = согласованный префиксConsistency for clients writing to a single region for a multi-master account = Consistent Prefix

  • Согласованность для клиентов, записывающих в разные регионы для учетной записи с несколькими хозяевами = в конечном итогеConsistency for clients writing to different regions for a multi-master account = Eventual

    Ограниченное устаревание часто выбирается глобально распределенными приложениями, которые предполагают низкую задержку при записи, но нуждаются в общей гарантии глобального порядка.Bounded staleness is frequently chosen by globally distributed applications that expect low write latencies but require total global order guarantee. Ограниченное устаревание подходит для приложений, использующих совместную работу групп и совместного использования, биржевых котировок, публикации-подписки и очереди и т. д. На следующем рисунке показана согласованность ограниченного устаревания с музыкальными примечаниями.Bounded staleness is great for applications featuring group collaboration and sharing, stock ticker, publish-subscribe/queueing etc. The following graphic illustrates the bounded staleness consistency with musical notes. После того как данные записываются в регион "Западная часть США 2", регионы "Восточная часть США 2" и "Восточная Австралия" считывают записанное значение на основе заданного максимального времени запаздывания или максимального числа операций:After the data is written to the "West US 2" region, the "East US 2" and "Australia East" regions read the written value based on the configured maximum lag time or the maximum operations:

    video

  • Сеанс. в рамках одного клиентского сеанса операции чтения гарантированно соблюдают согласованные, монотонные операции чтения, монотонные операции записи, записи с возможностью чтения и записи, а затем — чтение.Session: Within a single client session reads are guaranteed to honor the consistent-prefix, monotonic reads, monotonic writes, read-your-writes, and write-follows-reads guarantees. Это предполагает наличие одного сеанса "записи" или совместного использования маркера сеанса для нескольких модулей записи.This assumes a single "writer" session or sharing the session token for multiple writers.

Клиенты за пределами сеанса, выполняющего операции записи, увидят следующие гарантии:Clients outside of the session performing writes will see the following guarantees:

  • Согласованность для клиентов в одном регионе для учетной записи с одним главным узлом = согласованный префиксConsistency for clients in same region for a single-master account = Consistent Prefix

  • Согласованность для клиентов в разных регионах для одной учетной записи с одним главным узлом = согласованный префиксConsistency for clients in different regions for a single-master account = Consistent Prefix

  • Согласованность для клиентов, записывающих в один регион для учетной записи с несколькими хозяевами = согласованный префиксConsistency for clients writing to a single region for a multi-master account = Consistent Prefix

  • Согласованность для клиентов, записывающих в несколько регионов для учетной записи с несколькими хозяевами = в конечном итогеConsistency for clients writing to multiple regions for a multi-master account = Eventual

    Согласованность сеансов — это широко используемый уровень согласованности как для одного региона, так и для глобально распределенных приложений.Session consistency is the widely used consistency level for both single region as well as globally distributed applications. Она обеспечивает задержку записи, доступность и пропускную способность чтения, сравнимую с учетом окончательной согласованности, но также предоставляет гарантии согласованности, которые соответствуют потребностям приложений, написанных для работы в контексте пользователя.It provides write latencies, availability, and read throughput comparable to that of eventual consistency but also provides the consistency guarantees that suit the needs of applications written to operate in the context of a user. На следующем рисунке показана согласованность сеанса с музыкальными примечаниями.The following graphic illustrates the session consistency with musical notes. Модуль записи «Западная часть США 2» и модуль чтения «Западная часть США 2» используют один сеанс (сеанс а), чтобы они одновременно читали одни и те же данные.The "West US 2 writer" and the "West US 2 reader" are using the same session (Session A) so they both read the same data at the same time. В то время как регион "Восточная Австралия" использует сеанс б, он получает данные позже, но в том же порядке, что и записи.Whereas the "Australia East" region is using "Session B" so, it receives data later but in the same order as the writes.

    video

  • Последовательный префикс. возвращаемые обновления содержат некоторые префиксы всех обновлений без пробелов.Consistent prefix: Updates that are returned contain some prefix of all the updates, with no gaps. Согласованность префиксного уровня согласованности гарантирует, что чтение никогда не будет видеть неупорядоченные операции записи.Consistent prefix consistency level guarantees that read never see out-of-order writes.

Если операции записи выполнялись в порядке A, B, C, то клиент видит A, A,B или A,B,C, но никогда не видит неупорядоченные операции A,C или B,A,C.If writes were performed in the order A, B, C, then a client sees either A, A,B, or A,B,C, but never out of order like A,C or B,A,C. Последовательный префикс обеспечивает задержку записи, доступность и пропускную способность чтения, сравнимую с конечной согласованностью, но также предоставляет гарантии порядка, которые соответствуют потребностям сценариев, в которых важен порядок.Consistent Prefix provides write latencies, availability, and read throughput comparable to that of eventual consistency, but also provides the order guarantees that suit the needs of scenarios where order is important.

Ниже приведены гарантии согласованности для согласованного префикса:Below are the consistency guarantees for Consistent Prefix:

  • Согласованность для клиентов в одном регионе для учетной записи с одним главным узлом = согласованный префиксConsistency for clients in same region for a single-master account = Consistent Prefix
  • Согласованность для клиентов в разных регионах для одной учетной записи с одним главным узлом = согласованный префиксConsistency for clients in different regions for a single-master account = Consistent Prefix
  • Согласованность для клиентов, записывающих в один регион для учетной записи с несколькими хозяевами = согласованный префиксConsistency for clients writing to a single region for a multi-master account = Consistent Prefix
  • Согласованность для клиентов, записывающих в несколько регионов для учетной записи с несколькими хозяевами = в конечном итогеConsistency for clients writing to multiple regions for a multi-master account = Eventual

На следующем рисунке показана согласованность префикса согласованности с музыкальными примечаниями.The following graphic illustrates the consistency prefix consistency with musical notes. Во всех регионах операции чтения никогда не видят неупорядоченные записи:In all the regions, the reads never see out of order writes:

video

  • В конечном итоге: нет гарантий по упорядочиванию для операций чтения.Eventual: There's no ordering guarantee for reads. При отсутствии последующих операций записи все реплики в конечном счете сходятся.In the absence of any further writes, the replicas eventually converge.
    Окончательная согласованность — это слабая форма согласованности, так как клиент может считывать более старые значения, чем те, которые были считаны ранее.Eventual consistency is the weakest form of consistency because a client may read the values that are older than the ones it had read before. Окончательная согласованность идеально подходит для того, чтобы приложение не требовало никаких гарантий упорядочения.Eventual consistency is ideal where the application does not require any ordering guarantees. Примерами могут служить число ретвитов, разметки "нравится" или несвязанные комментарии.Examples include count of Retweets, Likes, or non-threaded comments. На следующем рисунке показана окончательная согласованность с музыкальными примечаниями.The following graphic illustrates the eventual consistency with musical notes.

    video

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

Дополнительные сведения об основных понятиях согласованности можно найти в следующих статьях.To learn more about consistency concepts, read the following articles:

Дальнейшие шагиNext steps

Дополнительные сведения об уровнях согласованности в Azure Cosmos DB можно найти в следующих статьях.To learn more about consistency levels in Azure Cosmos DB, read the following articles: