Aspectos técnicos de la distribución de datos global con Azure Cosmos DBGlobal data distribution with Azure Cosmos DB - under the hood

Azure Cosmos DB es un servicio fundamental de Azure, por lo que se implementa en todas las regiones de Azure del mundo, incluidas las nubes públicas, soberanas, gubernamentales y del Departamento de Defensa (DoD).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. En un centro de datos, implementamos y administramos Azure Cosmos DB en sellos masivos de máquinas, cada uno con almacenamiento local dedicado.Within a data center, we deploy and manage the Azure Cosmos DB on massive stamps of machines, each with dedicated local storage. En un centro de datos, Azure Cosmos DB se implementa en muchos clústeres, cada uno de los cuales puede ejecutar varias generaciones de hardware.Within a data center, Azure Cosmos DB is deployed across many clusters, each potentially running multiple generations of hardware. Las máquinas de un clúster suelen repartirse entre 10 y 20 dominios de error para la alta disponibilidad dentro de una región.Machines within a cluster are typically spread across 10-20 fault domains for high availability within a region. La siguiente imagen muestra la topología del sistema de distribución global de Cosmos DB:The following image shows the Cosmos DB global distribution system topology:

Topología del sistema

La distribución global en Azure Cosmos DB es inmediata: en cualquier momento y con solo unos cuantos clics o mediante programación con una sola llamada a la API, puede agregar o eliminar las regiones geográficas asociadas a la base de datos de 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. Una base de datos de Cosmos, a su vez, consta de un conjunto de contenedores de Cosmos.A Cosmos database, in turn, consists of a set of Cosmos containers. En Cosmos DB, los contenedores sirven de unidades lógicas de distribución y escalabilidad.In Cosmos DB, containers serve as the logical units of distribution and scalability. Las colecciones, tablas y gráficos que se crean son (internamente) tan solo contenedores de Cosmos.The collections, tables, and graphs you create are (internally) just Cosmos containers. Los contenedores son totalmente independientes del esquema y proporcionan un ámbito para una consulta.Containers are completely schema-agnostic and provide a scope for a query. Los datos de un contenedor de Cosmos se indexan automáticamente tras su ingesta.Data in a Cosmos container is automatically indexed upon ingestion. La indexación automática permite a los usuarios consultar los datos sin las complicaciones relativas al esquema o a la administración de índices, especialmente en una configuración distribuida globalmente.Automatic indexing enables users to query the data without the hassles of schema or index management, especially in a globally distributed setup.

  • En una región determinada, los datos de un contenedor se distribuyen mediante una clave de partición que el usuario especifica y que las particiones físicas subyacentes (distribución local) administran de forma transparente.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 partición física también se replica en regiones geográficas (distribución global).Each physical partition is also replicated across geographical regions (global distribution).

Cuando una aplicación que usa Cosmos DB escala elásticamente el rendimiento en un contenedor de Cosmos o consume más almacenamiento, Cosmos DB controla las operaciones de administración de particiones (dividir, clonar, eliminar) de manera transparente en todas las regiones.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. Independientemente del escalado, la distribución o los errores, Cosmos DB continúa proporcionando una sola imagen de sistema de los datos incluidos en los contenedores, que se distribuyen globalmente en cualquier cantidad de regiones.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 se observa en la imagen siguiente, los datos de un contenedor se distribuyen a lo largo de dos dimensiones: dentro de una región y entre regiones, en todo el mundo:As shown in the following image, the data within a container is distributed along two dimensions - within a region and across regions, worldwide:

Particiones físicas

Una partición física se implementa por medio de un grupo de réplicas, llamado conjunto de replicas.A physical partition is implemented by a group of replicas, called a replica-set. Cada máquina hospeda cientos de réplicas que corresponden a diversas particiones físicas incluidas en un conjunto fijo de procesos, tal y como se muestra en la imagen anterior.Each machine hosts hundreds of replicas that correspond to various physical partitions within a fixed set of processes as shown in the image above. Las réplicas que corresponden a las particiones físicas se colocan y su carga se equilibra de forma dinámica en las máquinas de un clúster y los centros de datos de una región.Replicas corresponding to the physical partitions are dynamically placed and load balanced across the machines within a cluster and data centers within a region.

Una réplica pertenece de forma exclusiva a un inquilino de Azure Cosmos DB.A replica uniquely belongs to an Azure Cosmos DB tenant. Cada réplica hospeda una instancia del motor de base de datos de Cosmos DB, que administra los recursos, así como los índices asociados.Each replica hosts an instance of Cosmos DB’s database engine, which manages the resources as well as the associated indexes. El motor de base de datos de Cosmos funciona en un sistema tipo basado en la secuencia de registro de átomos (ARS).The Cosmos database engine operates on an atom-record-sequence (ARS) based type system. El motor es independiente del concepto de esquema y difumina el límite entre la estructura y los valores de instancia de los registros.The engine is agnostic to the concept of a schema, blurring the boundary between the structure and instance values of records. Cosmos DB logra la independencia total del esquema indexando todo automáticamente tras la ingesta de datos de forma eficaz, lo que permite a los usuarios consultar sus datos distribuidos globalmente sin tener que ocuparse de la administración de esquemas 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.

El motor de base de datos de Cosmos consta de componentes como la implementación de varias primitivas de coordinación, los entornos de ejecución de lenguaje, el procesador de consultas y los subsistemas de almacenamiento e indexación responsables del almacenamiento transaccional y la indexación de datos, 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 durabilidad y alta disponibilidad, el motor de base de datos conserva sus datos y el índice en discos SSD y los replica entre las instancias de motor de base de datos de los 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. Los inquilinos más grandes corresponden a una mayor escala de rendimiento y almacenamiento y tienen réplicas más grandes o una mayor cantidad de las mismas o bien ambas cosas.Larger tenants correspond to higher scale of throughput and storage and have either bigger or more replicas or both. Todos los componentes del sistema son completamente asincrónicos: no se bloquea ningún subproceso y el trabajo que realiza cada uno es de corta duración, sin incurrir en ningún cambio de subproceso innecesario.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. La limitación de frecuencia y la contrapresión se asocian en toda la pila desde el control de admisión a todas las rutas de acceso de E/S.Rate-limiting and back-pressure are plumbed across the entire stack from the admission control to all I/O paths. El motor de base de datos de Cosmos se ha diseñado para explotar la simultaneidad específica y ofrecer un alto rendimiento mientras opera en cantidades moderadas de recursos del sistema.Cosmos database engine is designed to exploit fine-grained concurrency and to deliver high throughput while operating within frugal amounts of system resources.

La distribución global de Cosmos DB se basa en dos abstracciones clave: los conjuntos de réplicas y los conjuntos de particiones.Cosmos DB’s global distribution relies on two key abstractions – replica-sets and partition-sets. Un conjunto de réplicas es un bloque Lego modular para la coordinación, mientras que un conjunto de particiones es una superposición dinámica de una o varias particiones físicas distribuidas geográficamente.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 el funcionamiento de la distribución global, es preciso comprender estas dos abstracciones clave.To understand how global distribution works, we need to understand these two key abstractions.

Conjuntos de réplicasReplica-sets

Una partición física se materializa como un grupo de réplicas autoadministradas cuya carga se equilibra de forma dinámica que se reparten entre varios dominios de error, llamados conjunto de réplicas.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 de forma colectiva el protocolo de máquina de estado replicado para que los datos de la partición física tengan una alta disponibilidad y sean duraderos y fuertemente coherentes.This set collectively implements the replicated state machine protocol to make the data within the physical partition highly available, durable, and consistent. La pertenencia a N conjuntos de réplicas es dinámica: fluctúa entre NMin y NMax en función de los errores, las operaciones administrativas y el tiempo de regeneración o recuperación de las réplicas con errores.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. En función de los cambios de pertenencia, el protocolo de replicación también reconfigura el tamaño de los cuórums de lectura y escritura.Based on the membership changes, the replication protocol also reconfigures the size of read and write quorums. Para distribuir uniformemente el rendimiento que se asigna a una determinada partición física, se emplean dos ideas:To uniformly distribute the throughput that is assigned to a given physical partition, we employ two ideas:

  • En primer lugar, el costo de procesar las solicitudes de escritura en el líder es mayor que el costo de aplicar las actualizaciones en el seguidor.First, the cost of processing the write requests on the leader is higher than the cost of applying the updates on the follower. Consecuentemente, al líder se le presupuestan más recursos del sistema que a los seguidores.Correspondingly, the leader is budgeted more system resources than the followers.

  • En segundo lugar, en la medida de lo posible, el cuórum de lectura para un nivel de coherencia especificado se compone exclusivamente de las réplicas de los seguidores.Secondly, as far as possible, the read quorum for a given consistency level is composed exclusively of the follower replicas. Evitamos ponernos en contacto con el líder para el servicio de lecturas a menos que sea absolutamente necesario.We avoid contacting the leader for serving reads unless required. Empleamos una serie de ideas de la investigación sobre la relación de carga y capacidad en los sistemas basados en cuórum para los cinco modelos de coherencia que admite Cosmos DB.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 particionesPartition-sets

Se compone un grupo de particiones físicas, uno de cada una de las configuradas con las regiones de la base de datos de Cosmos, para administrar el mismo conjunto de claves que se replican en todas las regiones 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 primitiva de coordinación superior se llama un conjunto de particiones: una superposición dinámica geográficamente distribuida de particiones físicas que administran un conjunto de claves determinado.This higher coordination primitive is called a partition-set - a geographically distributed dynamic overlay of physical partitions managing a given set of keys. Mientras que una determinada partición física (un conjunto de réplicas) tiene el ámbito de un clúster, un conjunto de particiones puede abarcar clústeres, centros de datos y regiones geográficas, tal como se muestra en la imagen siguiente: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 particiones

Puede ver un conjunto de particiones como un "superconjunto de réplicas" geográficamente disperso, que consta de varios conjuntos de réplicas que poseen el mismo conjunto de claves.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. Similar a un conjunto de réplicas, la pertenencia a un conjunto de particiones también es dinámica, varía en función de las operaciones de administración de particiones físicas implícitas necesarias para agregar o eliminar particiones nuevas hacia y desde un conjunto de particiones determinado (por ejemplo, al escalar horizontalmente el rendimiento de un contenedor, agregar o quitar una región a la base de datos de Cosmos o cuando se producen errores).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). Al hacer que cada una de las particiones (de un conjunto de particiones) administre la pertenencia del conjunto de particiones dentro de su propio conjunto de réplicas, la pertenencia es totalmente descentralizada y de alta disponibilidad.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 la reconfiguración de un conjunto de particiones, también se establece la topología de la superposición entre las particiones físicas.During the reconfiguration of a partition-set, the topology of the overlay between physical partitions is also established. La topología se selecciona de forma dinámica en función del nivel de coherencia, la distancia geográfica y el ancho de banda de red disponible entre las particiones físicas de origen y las de destino.The topology is dynamically selected based on the consistency level, geographical distance, and available network bandwidth between the source and the target physical partitions.

El servicio le permite configurar sus bases de datos de Cosmos con una sola región de escritura o varias de ellas y, según la opción, los conjuntos de particiones están configurados para aceptar las escrituras exactamente en una o en todas las regiones.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. El sistema emplea un protocolo de consensos anidado de dos niveles: un nivel funciona en las réplicas de un conjunto de réplicas de una partición física que acepta las escrituras, mientras que el otro funciona en el nivel de un conjunto de particiones para ofrecer garantías de ordenación completas para todas las escrituras confirmadas en el conjunto de particiones.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 anidado multicapa es fundamental para la implementación de nuestros estrictos contratos de nivel de servicio de alta disponibilidad, así como para la implementación de los modelos de coherencia, que Cosmos DB ofrece a sus 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.

Resolución de conflictosConflict resolution

Nuestro diseño para la propagación de actualizaciones, la resolución de conflictos y el seguimiento de causalidades está inspirado en el anterior trabajo sobre algoritmos epidémicos y el 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. Mientras que los kernels de las ideas han sobrevivido y proporcionan un cómodo marco de referencia para comunicar el diseño del sistema de Cosmos DB, también han experimentado una transformación significativa al aplicarlos al sistema de 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. Esto era necesario, ya que los sistemas anteriores no estaban diseñados ni con la gobernanza de recursos ni con la escala en la que Cosmos DB necesita funcionar ni tampoco para proporcionar las funcionalidades (por ejemplo, coherencia de obsolescencia limitada) y los estrictos y completos contratos de nivel de servicio que Cosmos DB ofrece a sus 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.

Recuerde que un conjunto de particiones se distribuye entre varias regiones y sigue el protocolo de replicación (arquitectura multimaestro) de Cosmos DB para replicar los datos entre las particiones físicas que componen un conjunto de particiones determinado.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 partición física (de un conjunto de particiones) acepta las escrituras y suele ofrecer lecturas a los clientes que son locales en esa región.Each physical partition (of a partition-set) accepts writes and serves reads typically to the clients that are local to that region. Las escrituras aceptadas por una partición física de una región se confirman permanentemente y tienen una alta disponibilidad en la partición física antes de ser reconocidas por el 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. Se trata de escrituras provisionales que se propagan a otras particiones físicas en el conjunto de particiones mediante un canal de antientropía.These are tentative writes and are propagated to other physical partitions within the partition-set using an anti-entropy channel. Los clientes pueden solicitar escrituras provisionales o confirmadas pasando un encabezado de la solicitud.Clients can request either tentative or committed writes by passing a request header. La propagación de antientropía (incluida la frecuencia de propagación) es dinámica, según la topología del conjunto de particiones, la proximidad regional de las particiones físicas y el nivel de coherencia 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. En un conjunto de particiones, Cosmos DB sigue un esquema de confirmación principal con una partición de árbitro seleccionada dinámicamente.Within a partition-set, Cosmos DB follows a primary commit scheme with a dynamically selected arbiter partition. La selección de árbitro es dinámica y forma parte integral de la reconfiguración del conjunto de particiones según la topología de la superposición.The arbiter selection is dynamic and is an integral part of the reconfiguration of the partition-set based on the topology of the overlay. Se garantiza que las escrituras confirmadas (incluidas las actualizaciones de varias filas o por lotes) están totalmente ordenadas.The committed writes (including multi-row/batched updates) are guaranteed to be ordered.

Empleamos relojes vectoriales codificados (que contienen relojes lógicos y de id. de región que corresponden a cada nivel de consenso en el conjunto de réplicas y el conjunto de particiones, respectivamente) para que el seguimiento de causalidades y los vectores de versión detecten y resuelvan conflictos relativos a las actualizaciones.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. La topología y el algoritmo de selección de homólogos se han diseñado para garantizar un almacenamiento fijo y mínimo y una sobrecarga de red mínima de los vectores de versión.The topology and the peer selection algorithm are designed to ensure fixed and minimal storage and minimal network overhead of version vectors. El algoritmo garantiza la propiedad de convergencia estricta.The algorithm guarantees the strict convergence property.

En las bases de datos de Cosmos configuradas con varias regiones de escritura, el sistema ofrece varias directivas de resolución de conflictos automáticas flexibles para que los desarrolladores elijan entre ellas, incluidas: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:

  • La última escritura gana (LWW) que, de forma predeterminada, usa una propiedad de marca de tiempo definida por el sistema (que se basa en el protocolo de reloj de sincronización de hora).Last-Write-Wins (LWW), which, by default, uses a system-defined timestamp property (which is based on the time-synchronization clock protocol). Cosmos DB también permite especificar cualquier otra propiedad numérica personalizada que se vaya a usar para la resolución de conflictos.Cosmos DB also allows you to specify any other custom numerical property to be used for conflict resolution.
  • Directiva de resolución de conflictos definida por la aplicación (personalizada) (expresada mediante procedimientos de combinación) que se ha diseñado para la conciliación de conflictos con la semántica definida por la aplicación.Application-defined (Custom) conflict resolution policy (expressed via merge procedures), which is designed for application-defined semantics reconciliation of conflicts. Estos procedimientos se invocan tras la detección de los conflictos de escritura-escritura bajo los auspicios de una transacción de base de datos en el servidor.These procedures get invoked upon detection of the write-write conflicts under the auspices of a database transaction on the server side. El sistema garantiza exactamente una vez la ejecución de un procedimiento de combinación como parte del protocolo de confirmación.The system provides exactly once guarantee for the execution of a merge procedure as a part of the commitment protocol. Hay varios ejemplos de resolución de conflictos disponibles con los que puede practicar.There are several conflict resolution samples available for you to play with.

Modelos de coherenciaConsistency Models

Independientemente de si configura la base de datos de Cosmos con una o con varias regiones de escritura, puede elegir entre cinco modelos de coherencia bien definidos.Whether you configure your Cosmos database with a single or multiple write regions, you can choose from the five well-defined consistency models. Con varias regiones de escritura, a continuación se indican algunos aspectos notables de los niveles de coherencia:With multiple write regions, the following are a few notable aspects of the consistency levels:

La coherencia de obsolescencia limitada garantiza que todas las lecturas van a estar dentro de K prefijos o T segundos desde la última escritura en cualquiera de las regiones.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. Además, se garantiza que las lecturas con coherencia de obsolescencia limitada son monotónicas y con garantías de prefijo coherente.Furthermore, reads with bounded staleness consistency are guaranteed to be monotonic and with consistent prefix guarantees. El protocolo de antientropía funciona con limitación de frecuencia y garantiza que los prefijos no se acumulen y que la resistencia en los escritos no tenga que aplicarse.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. La coherencia de sesión asegura las garantías de lectura monotónica, de escritura monotónica, de lectura de sus propias escrituras, de escritura tras lectura y de prefijo coherente en todo el mundo.Session consistency guarantees monotonic read, monotonic write, read your own writes, write follows read, and consistent prefix guarantees, worldwide. Para las bases de datos configuradas con una gran coherencia, las ventajas de varias regiones de escritura (baja latencia de escritura y alta disponibilidad de escritura) no se aplican debido a la replicación sincrónica entre regiones.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.

La semántica de los cinco modelos de coherencia de Cosmos DB se describe aquí y se describe matemáticamente con especificaciones de TLA+ de alto nivel aquí.The semantics of the five consistency models in Cosmos DB are described here, and mathematically described using a high-level TLA+ specifications here.

Pasos siguientesNext steps

A continuación, aprenda a configurar la distribución global mediante los siguientes artículos:Next learn how to configure global distribution by using the following articles: