Distribuição global de dados com Azure Cosmos DB - sob o capotGlobal data distribution with Azure Cosmos DB - under the hood

Azure Cosmos DB é um serviço fundamental em Azure, por isso é implantado em todas as regiões do Azure em todo o mundo, incluindo o público, soberano, Departamento de Defesa (DoD) e nuvens governamentais.Azure Cosmos DB is a foundational service in Azure, so it's deployed across all Azure regions worldwide including the public, sovereign, Department of Defense (DoD) and government clouds. Dentro de um centro de dados, implantamos e gerimos o Azure Cosmos DB em selos maciços de máquinas, cada um com armazenamento local dedicado.Within a data center, we deploy and manage the Azure Cosmos DB on massive stamps of machines, each with dedicated local storage. Dentro de um centro de dados, a Azure Cosmos DB é implantada em muitos clusters, cada um potencialmente executando várias gerações de hardware.Within a data center, Azure Cosmos DB is deployed across many clusters, each potentially running multiple generations of hardware. As máquinas dentro de um cluster são normalmente distribuídas por 10-20 domínios de falha para uma alta disponibilidade dentro de uma região.Machines within a cluster are typically spread across 10-20 fault domains for high availability within a region. A imagem a seguir mostra a topologia do sistema de distribuição global Cosmos DB:The following image shows the Cosmos DB global distribution system topology:

Topologia do Sistema

A distribuição global em Azure Cosmos DB é chave na mão: A qualquer momento, com alguns cliques ou programáticamente com uma única chamada API, pode adicionar ou remover as regiões geográficas associadas à sua base de dados Cosmos.Global distribution in Azure Cosmos DB is turnkey: At any time, with a few clicks or programmatically with a single API call, you can add or remove the geographical regions associated with your Cosmos database. Uma base de dados cosmos, por sua vez, consiste num conjunto de contentores cosmos.A Cosmos database, in turn, consists of a set of Cosmos containers. Na Cosmos DB, os contentores servem como unidades lógicas de distribuição e escalabilidade.In Cosmos DB, containers serve as the logical units of distribution and scalability. As coleções, tabelas e gráficos que cria são (internamente) apenas recipientes Cosmos.The collections, tables, and graphs you create are (internally) just Cosmos containers. Os recipientes são completamente esquema-agnósticos e fornecem uma margem para uma consulta.Containers are completely schema-agnostic and provide a scope for a query. Os dados num recipiente Cosmos são automaticamente indexados após a ingestão.Data in a Cosmos container is automatically indexed upon ingestion. A indexação automática permite que os utilizadores consultam os dados sem os problemas de schema ou gestão de índices, especialmente numa configuração distribuída globalmente.Automatic indexing enables users to query the data without the hassles of schema or index management, especially in a globally distributed setup.

  • Numa determinada região, os dados dentro de um recipiente são distribuídos através de uma chave de partição, que fornece e é gerida de forma transparente pelas divisórias físicas subjacentes (distribuição local).In a given region, data within a container is distributed by using a partition-key, which you provide and is transparently managed by the underlying physical partitions (local distribution).

  • Cada partição física é também replicada em regiões geográficas (distribuição global).Each physical partition is also replicated across geographical regions (global distribution).

Quando uma aplicação que utiliza o Cosmos DB escala elasticamente a produção num recipiente cosmos ou consome mais armazenamento, a Cosmos DB lida de forma transparente com operações de gestão de partição (dividida, clone, apagar) em todas as regiões.When an app using Cosmos DB elastically scales throughput on a Cosmos container or consumes more storage, Cosmos DB transparently handles partition management operations (split, clone, delete) across all the regions. Independentemente da escala, distribuição ou falhas, a Cosmos DB continua a fornecer uma única imagem do sistema dos dados dentro dos contentores, que são distribuídos globalmente por qualquer número de regiões.Independent of the scale, distribution, or failures, Cosmos DB continues to provide a single system image of the data within the containers, which are globally distributed across any number of regions.

Como mostra a seguinte imagem, os dados dentro de um contentor são distribuídos ao longo de duas dimensões - dentro de uma região e de regiões, em todo o mundo:As shown in the following image, the data within a container is distributed along two dimensions - within a region and across regions, worldwide:

divisórias físicas

Uma partição física é implementada por um grupo de réplicas, chamada réplica-set.A physical partition is implemented by a group of replicas, called a replica-set. Cada máquina acolhe centenas de réplicas que correspondem a várias divisórias físicas dentro de um conjunto fixo de processos, como mostrado na imagem acima.Each machine hosts hundreds of replicas that correspond to various physical partitions within a fixed set of processes as shown in the image above. As réplicas correspondentes às divisórias físicas são colocadas dinamicamente e a carga equilibrada através das máquinas dentro de um cluster e centros de dados dentro de uma região.Replicas corresponding to the physical partitions are dynamically placed and load balanced across the machines within a cluster and data centers within a region.

Uma réplica pertence exclusivamente a um inquilino da Azure Cosmos DB.A replica uniquely belongs to an Azure Cosmos DB tenant. Cada réplica acolhe uma instância do motor de base de dadosda Cosmos DB, que gere os recursos, bem como os índices associados.Each replica hosts an instance of Cosmos DB’s database engine, which manages the resources as well as the associated indexes. O motor de base de dados Cosmos opera num sistema de tipo de sequência de registo de átomos (ARS).The Cosmos database engine operates on an atom-record-sequence (ARS) based type system. O motor é agnóstico ao conceito de esquema, desfocando a fronteira entre a estrutura e os valores de instância dos registos.The engine is agnostic to the concept of a schema, blurring the boundary between the structure and instance values of records. Cosmos DB alcança o agnosticismo de esquema completo indexando automaticamente tudo após a ingestão de uma forma eficiente, o que permite aos utilizadores consultar os seus dados distribuídos globalmente sem ter que lidar com schema ou gestão de índices.Cosmos DB achieves full schema agnosticism by automatically indexing everything upon ingestion in an efficient manner, which allows users to query their globally distributed data without having to deal with schema or index management.

O motor da base de dados Cosmos é composto por componentes, incluindo a implementação de vários primitivos de coordenação, tempos de execução da linguagem, processador de consulta, e subsistemas de armazenamento e indexação responsáveis pelo armazenamento e indexação transacional de dados, respectivamente.The Cosmos database engine consists of components including implementation of several coordination primitives, language runtimes, the query processor, and the storage and indexing subsystems responsible for transactional storage and indexing of data, respectively. Para proporcionar durabilidade e elevada disponibilidade, o motor de base de dados persiste nos seus dados e índice em SSDs e replica-os entre as instâncias do motor de base de dados dentro do(s) conjuntos de réplicas, respectivamente.To provide durability and high availability, the database engine persists its data and index on SSDs and replicates it among the database engine instances within the replica-set(s) respectively. Os inquilinos maiores correspondem a uma maior escala de produção e armazenamento e têm réplicas maiores ou mais ou ambas.Larger tenants correspond to higher scale of throughput and storage and have either bigger or more replicas or both. Todos os componentes do sistema são totalmente assíncronos – nenhum fio bloqueia, e cada fio faz trabalho de curta duração sem incorrer em interruptores de rosca desnecessários.Every component of the system is fully asynchronous – no thread ever blocks, and each thread does short-lived work without incurring any unnecessary thread switches. A limitação das taxas e a pressão de trás são canalizadas por toda a pilha desde o controlo de admissão a todos os caminhos de E/S.Rate-limiting and back-pressure are plumbed across the entire stack from the admission control to all I/O paths. O motor da base de dados cosmos é projetado para explorar a concurrency de grãos finos e para fornecer alta produção enquanto opera dentro de quantidades frugal de recursos do sistema.Cosmos database engine is designed to exploit fine-grained concurrency and to deliver high throughput while operating within frugal amounts of system resources.

A distribuição global da Cosmos DB baseia-se em duas abstrações fundamentais - conjuntos de réplicas e conjuntos de divisórias.Cosmos DB’s global distribution relies on two key abstractions – replica-sets and partition-sets. Um conjunto de réplicas é um bloco de Lego modular para coordenação, e um conjunto de divisórias é uma sobreposição dinâmica de uma ou mais divisórias físicas distribuídas geograficamente.A replica-set is a modular Lego block for coordination, and a partition-set is a dynamic overlay of one or more geographically distributed physical partitions. Para entender como funciona a distribuição global, precisamos de compreender estas duas principais abstrações.To understand how global distribution works, we need to understand these two key abstractions.

Conjuntos de réplicasReplica-sets

Uma partição física é materializada como um grupo de réplicas auto-gerido e dinamicamente equilibrado de carga espalhado por vários domínios de falha, chamado replica-set.A physical partition is materialized as a self-managed and dynamically load-balanced group of replicas spread across multiple fault domains, called a replica-set. Este conjunto implementa coletivamente o protocolo da máquina estatal replicada para tornar os dados dentro da partição física altamente disponíveis, duráveis e consistentes.This set collectively implements the replicated state machine protocol to make the data within the physical partition highly available, durable, and consistent. A subscrição de conjunto de réplicaS N é dinâmica – continua a oscilar entre nMin e NMax com base nas falhas, operações administrativas e no tempo para as réplicas falhadas regenerarem/recuperarem.The replica-set membership N is dynamic – it keeps fluctuating between NMin and NMax based on the failures, administrative operations, and the time for failed replicas to regenerate/recover. Com base nas alterações de adesão, o protocolo de replicação também reconfigura o tamanho dos quórumes de leitura e escrita.Based on the membership changes, the replication protocol also reconfigures the size of read and write quorums. Para distribuir uniformemente a produção que é atribuída a uma determinada partição física, empregamos duas ideias:To uniformly distribute the throughput that is assigned to a given physical partition, we employ two ideas:

  • Em primeiro lugar, o custo do processamento dos pedidos de escrita sobre o líder é superior ao custo de aplicação das atualizações sobre o seguidor.First, the cost of processing the write requests on the leader is higher than the cost of applying the updates on the follower. Consequentemente, o líder tem orçamentado mais recursos do sistema do que os seguidores.Correspondingly, the leader is budgeted more system resources than the followers.

  • Em segundo lugar, na medida do possível, o quórum de leitura para um determinado nível de consistência é composto exclusivamente pelas réplicas dos seguidores.Secondly, as far as possible, the read quorum for a given consistency level is composed exclusively of the follower replicas. Evitamos contactar o líder por servir leituras a menos que seja necessário.We avoid contacting the leader for serving reads unless required. Empregamos uma série de ideias da pesquisa feita sobre a relação de carga e capacidade nos sistemas baseados no quórum para os cinco modelos de consistência que a Cosmos DB suporta.We employ a number of ideas from the research done on the relationship of load and capacity in the quorum-based systems for the five consistency models that Cosmos DB supports.

Conjuntos de partiçãoPartition-sets

Um grupo de divisórias físicas, uma de cada uma das configuradas com as regiões de base de dados cosmos, é composta para gerir o mesmo conjunto de chaves replicadas em todas as regiões configuradas.A group of physical partitions, one from each of the configured with the Cosmos database regions, is composed to manage the same set of keys replicated across all the configured regions. Esta coordenação superior primitiva é chamada de conjunto de partição - uma sobreposição dinâmica geograficamente distribuída de divisórias físicas gerindo um determinado conjunto de chaves.This higher coordination primitive is called a partition-set - a geographically distributed dynamic overlay of physical partitions managing a given set of keys. Enquanto uma determinada partição física (um conjunto de réplicas) é definida dentro de um cluster, um conjunto de divisões pode abranger aglomerados, centros de dados e regiões geográficas, como mostrado na imagem abaixo:While a given physical partition (a replica-set) is scoped within a cluster, a partition-set can span clusters, data centers, and geographical regions as shown in the image below:

Conjuntos de partição

Pode pensar num conjunto de partição como um "super conjunto de réplicas" geograficamente disperso, que é composto por múltiplos conjuntos de réplicas que possuem o mesmo conjunto de teclas.You can think of a partition-set as a geographically dispersed “super replica-set”, which is composed of multiple replica-sets owning the same set of keys. Semelhante a um conjunto de réplicas, a adesão de um conjunto de divisórias também é dinâmica – flutua com base em operações implícitas de gestão de partição física para adicionar/remover novas divisórias de/para um determinado conjunto de partição (por exemplo, quando escala a produção num recipiente, adiciona/remove uma região à sua base de dados Cosmos, ou quando ocorrem falhas).Similar to a replica-set, a partition-set’s membership is also dynamic – it fluctuates based on implicit physical partition management operations to add/remove new partitions to/from a given partition-set (for instance, when you scale out throughput on a container, add/remove a region to your Cosmos database, or when failures occur). Em virtude de cada uma das divisórias (de um conjunto de partição) gerir a filiação do conjunto de partição dentro do seu próprio conjunto de réplicas, a adesão é totalmente descentralizada e altamente disponível.By virtue of having each of the partitions (of a partition-set) manage the partition-set membership within its own replica-set, the membership is fully decentralized and highly available. Durante a reconfiguração de um conjunto de partição, a topologia da sobreposição entre divisórias físicas também é estabelecida.During the reconfiguration of a partition-set, the topology of the overlay between physical partitions is also established. A topologia é selecionada dinamicamente com base no nível de consistência, distância geográfica e largura de banda disponível entre a fonte e as divisórias físicas-alvo.The topology is dynamically selected based on the consistency level, geographical distance, and available network bandwidth between the source and the target physical partitions.

O serviço permite-lhe configurar as suas bases de dados cosmos com uma única região de escrita ou várias regiões de escrita, e dependendo da escolha, os conjuntos de divisões são configurados para aceitar escritos em exatamente uma ou em todas as regiões.The service allows you to configure your Cosmos databases with either a single write region or multiple write regions, and depending on the choice, partition-sets are configured to accept writes in exactly one or all regions. O sistema emprega um protocolo de consenso de dois níveis e aninhado – um nível funciona dentro das réplicas de uma réplica de uma partição física que aceita as escritas, e o outro opera ao nível de um conjunto de partição para fornecer garantias completas de encomenda para todas as escritas comprometidas dentro do conjunto de partição.The system employs a two-level, nested consensus protocol – one level operates within the replicas of a replica-set of a physical partition accepting the writes, and the other operates at the level of a partition-set to provide complete ordering guarantees for all the committed writes within the partition-set. Este consenso aninhado em várias camadas é fundamental para a implementação dos nossos rigorosos SLAs para uma elevada disponibilidade, bem como para a implementação dos modelos de consistência, que a Cosmos DB oferece aos seus clientes.This multi-layered, nested consensus is critical for the implementation of our stringent SLAs for high availability, as well as the implementation of the consistency models, which Cosmos DB offers to its customers.

Resolução de conflitosConflict resolution

O nosso design para a propagação de atualização, resolução de conflitos e rastreio de causalidade é inspirado no trabalho prévio sobre algoritmos epidémicos e o sistema Bayou.Our design for the update propagation, conflict resolution, and causality tracking is inspired from the prior work on epidemic algorithms and the Bayou system. Embora os núcleos das ideias tenham sobrevivido e fornecendo um conveniente quadro de referência para comunicar o design do sistema cosmos DB, eles também sofreram uma transformação significativa à medida que as aplicamos ao sistema Cosmos DB.While the kernels of the ideas have survived and provide a convenient frame of reference for communicating the Cosmos DB’s system design, they have also undergone significant transformation as we applied them to the Cosmos DB system. Isto era necessário, porque os sistemas anteriores não foram concebidos nem com a governação dos recursos nem com a escala a que a Cosmos DB precisa de operar, nem para fornecer as capacidades (por exemplo, a consistência limitada) e as SLAs rigorosas e abrangentes que a Cosmos DB fornece aos seus clientes.This was needed, because the previous systems were designed neither with the resource governance nor with the scale at which Cosmos DB needs to operate, nor to provide the capabilities (for example, bounded staleness consistency) and the stringent and comprehensive SLAs that Cosmos DB delivers to its customers.

Lembre-se que um conjunto de divisórias é distribuído por várias regiões e segue o protocolo de replicação cosmos DBs (multi-mestre) para replicar os dados entre as divisórias físicas que compreendem um determinado conjunto de partição.Recall that a partition-set is distributed across multiple regions and follows Cosmos DBs (multi-master) replication protocol to replicate the data among the physical partitions comprising a given partition-set. Cada divisória física (de um conjunto de divisórias) aceita escritas e serve leituras tipicamente para os clientes que são locais para aquela região.Each physical partition (of a partition-set) accepts writes and serves reads typically to the clients that are local to that region. As gravações aceites por uma partição física dentro de uma região são duramente comprometidas e disponibilizadas altamente dentro da partição física antes de serem reconhecidas ao cliente.Writes accepted by a physical partition within a region are durably committed and made highly available within the physical partition before they are acknowledged to the client. Estas são escritas provisórias e são propagadas a outras divisórias físicas dentro do conjunto de partição usando um canal anti-entropia.These are tentative writes and are propagated to other physical partitions within the partition-set using an anti-entropy channel. Os clientes podem solicitar escritos provisórios ou comprometidos, passando um cabeçalho de pedido.Clients can request either tentative or committed writes by passing a request header. A propagação anti-entropia (incluindo a frequência de propagação) é dinâmica, baseada na topologia do conjunto de partição, na proximidade regional das divisórias e no nível de consistência configurado.The anti-entropy propagation (including the frequency of propagation) is dynamic, based on the topology of the partition-set, regional proximity of the physical partitions, and the consistency level configured. Dentro de um conjunto de partição, Cosmos DB segue um esquema de compromisso primário com uma partição de árbitros selecionado dinamicamente.Within a partition-set, Cosmos DB follows a primary commit scheme with a dynamically selected arbiter partition. A seleção do árbitro é dinâmica e é parte integrante da reconfiguração do conjunto de partição com base na topologia da sobreposição.The arbiter selection is dynamic and is an integral part of the reconfiguration of the partition-set based on the topology of the overlay. As escritas comprometidas (incluindo atualizações multi-linha/lotadas) são garantidas para serem encomendadas.The committed writes (including multi-row/batched updates) are guaranteed to be ordered.

Empregamos relógios vetoriais codificados (contendo ID de região e relógios lógicos correspondentes a cada nível de consenso no conjunto de réplicas e partição, respectivamente) para rastreio de causalidade e vetores de versão para detetar e resolver conflitos de atualização.We employ encoded vector clocks (containing region ID and logical clocks corresponding to each level of consensus at the replica-set and partition-set, respectively) for causality tracking and version vectors to detect and resolve update conflicts. A topologia e o algoritmo de seleção de pares são projetados para garantir o armazenamento fixo e mínimo e a sobrecarga mínima de rede de vetores de versão.The topology and the peer selection algorithm are designed to ensure fixed and minimal storage and minimal network overhead of version vectors. O algoritmo garante a estrita propriedade de convergência.The algorithm guarantees the strict convergence property.

Para as bases de dados cosmos configuradas com várias regiões de escrita, o sistema oferece uma série de políticas flexíveis de resolução automática de conflitos para os desenvolvedores escolherem, incluindo:For the Cosmos databases configured with multiple write regions, the system offers a number of flexible automatic conflict resolution policies for the developers to choose from, including:

  • Last-Write-Wins (LWW), que, por padrão, utiliza uma propriedade de relógios definidos pelo sistema (que se baseia no protocolo do relógio de sincronização de tempo).Last-Write-Wins (LWW), which, by default, uses a system-defined timestamp property (which is based on the time-synchronization clock protocol). Cosmos DB também permite especificar qualquer outra propriedade numérica personalizada para ser usada para resolução de conflitos.Cosmos DB also allows you to specify any other custom numerical property to be used for conflict resolution.
  • Política de resolução de conflitos definida pela aplicação (personalizada) (expressa através de procedimentos de fusão), concebida para a reconciliação semântica definida pela aplicação de conflitos.Application-defined (Custom) conflict resolution policy (expressed via merge procedures), which is designed for application-defined semantics reconciliation of conflicts. Estes procedimentos são invocados após a deteção dos conflitos de escrita sob os auspícios de uma transação de base de dados no lado do servidor.These procedures get invoked upon detection of the write-write conflicts under the auspices of a database transaction on the server side. O sistema fornece exatamente uma garantia única para a execução de um procedimento de fusão como parte do protocolo de compromisso.The system provides exactly once guarantee for the execution of a merge procedure as a part of the commitment protocol. Existem várias amostras de resolução de conflitos disponíveis para você brincar.There are several conflict resolution samples available for you to play with.

Modelos de consistênciaConsistency Models

Quer configuure a sua base de dados Cosmos com uma única ou múltiplas regiões de escrita, pode escolher entre os cinco modelos de consistência bem definidos.Whether you configure your Cosmos database with a single or multiple write regions, you can choose from the five well-defined consistency models. Com várias regiões de escrita, os seguintes são alguns aspetos notáveis dos níveis de consistência:With multiple write regions, the following are a few notable aspects of the consistency levels:

A consistência limitada garante que todas as leituras estarão dentro dos prefixos K ou T segundos a partir da última escrita em qualquer uma das regiões.The bounded staleness consistency guarantees that all reads will be within K prefixes or T seconds from the latest write in any of the regions. Além disso, as leituras com uma consistência deslimícula são garantidas monotónicas e com garantias de prefixo consistentes.Furthermore, reads with bounded staleness consistency are guaranteed to be monotonic and with consistent prefix guarantees. O protocolo anti-entropia funciona de forma limitada e garante que os prefixos não se acumulam e que a retropressão nas escritas não tem de ser aplicada.The anti-entropy protocol operates in a rate-limited manner and ensures that the prefixes do not accumulate and the backpressure on the writes does not have to be applied. A consistência da sessão garante a leitura monotónica, a escrita monótona, a leitura dos seus próprios escritos, a escrita segue a leitura e as garantias de prefixo consistentes em todo o mundo.Session consistency guarantees monotonic read, monotonic write, read your own writes, write follows read, and consistent prefix guarantees, worldwide. Para as bases de dados configuradas com forte consistência, os benefícios (baixa latência de escrita, elevada disponibilidade de escrita) de múltiplas regiões de escrita não se aplicam, devido à replicação sincronizada entre regiões.For the databases configured with strong consistency, the benefits (low write latency, high write availability) of multiple write regions does not apply, because of synchronous replication across regions.

A semântica dos cinco modelos de consistência em Cosmos DB são descritas aqui,e matematicamente descritas usando uma especificação TLA+ de alto nível aqui.The semantics of the five consistency models in Cosmos DB are described here, and mathematically described using a high-level TLA+ specifications here.

Próximos passosNext steps

Em seguida, aprenda a configurar a distribuição global utilizando os seguintes artigos:Next learn how to configure global distribution by using the following articles: