Funcionamiento de las tablas globales de DynamoDB - Amazon DynamoDB

Funcionamiento de las tablas globales de DynamoDB

En las siguientes secciones, se describen los conceptos y el comportamiento de las tablas globales en Amazon DynamoDB.

Conceptos

Las tablas globales son una característica de DynamoDB que replica los datos de las tablas en todas las regiones de AWS.

Una tabla de réplica (o réplica) es una tabla de DynamoDB que funciona como parte de una tabla global. Una tabla global consta de dos o más tablas de réplica en diferentes regiones de AWS. Cada tabla global solo puede tener una réplica por región de AWS. Todas las réplicas de una tabla global comparten el mismo nombre de tabla, esquema de clave principal y datos de elementos.

Cuando una aplicación escribe datos en una réplica en una región, DynamoDB replica automáticamente la escritura en el resto de las réplicas en la tabla global. Para obtener más información sobre cómo empezar a usar tablas globales, consulte Tutoriales: creación de tablas globales.

Versiones

Hay disponibles dos versiones de las tablas globales de DynamoDB: versión 2019.11.21 (actual) y versión 2017.11.29 (antigua). Debe utilizar la versión 2019.11.21 (actual) siempre que sea posible. La información de esta sección de la documentación corresponde a la versión 2019.11.21 (actual). Para obtener más información, consulte Determinación de la versión de una tabla global.

Disponibilidad

Las tablas globales ayudan a mejorar la continuidad empresarial al facilitar la implementación de una arquitectura de alta disponibilidad de varias regiones. Si una carga de trabajo en una única región de AWS se ve afectada, puede cambiar el tráfico de la aplicación a otra región y realizar las operaciones de lectura y escritura en una tabla de réplica diferente en la misma tabla global.

Cada tabla réplica en una tabla global proporciona la misma durabilidad y disponibilidad que una tabla de DynamoDB de una sola región. Las tablas globales ofrecen un Acuerdo de nivel de servicio (SLA) con una disponibilidad del 99,999 %, en comparación con el 99,99 % de las tablas de una sola región.

Modos de coherencia

Al crear una tabla global, puede configurar el modo de consistencia. Las tablas globales admiten dos modos de coherencia: coherencia final de varias regiones (MREC) y coherencia alta de varias regiones (MRSC).

Si no especifica un modo de coherencia al crear una tabla global, esta adoptará de forma predeterminada la coherencia final de varias regiones (MREC). Una tabla global no puede contener réplicas configuradas con diferentes modos de coherencia. No puede cambiar el modo de coherencia de una tabla global después de la creación.

Consistencia posterior de varias regiones (MREC)

La coherencia final de varias regiones (MREC) es el modo de coherencia predeterminado para las tablas globales. Los cambios de elementos en una réplica de tabla global de MREC se replican de forma asíncrona en todas las demás réplicas, normalmente en un segundo o menos. En el improbable caso de que una réplica de una tabla global de MREC quede aislada o se vea afectada, cualquier dato que aún no se haya replicado en otras regiones se replicará cuando la réplica recupere el estado correcto.

Si el mismo elemento se modifica simultáneamente en varias regiones, DynamoDB resolverá el conflicto mediante la modificación con la última marca temporal interna por elemento, lo que se denomina método de resolución de conflictos “el último escritor gana”. Al final, un elemento convergerá en todas las réplicas a la versión creada por la última escritura.

Las operaciones de lectura altamente coherente devuelven la versión más reciente de un elemento si este se ha actualizado por última vez en la región en la que se ha producido la lectura, pero podrían devolver datos obsoletos si el elemento se ha actualizado por última vez en una región diferente. Las escrituras condicionales evalúan la expresión de la condición comparándola con la versión del elemento en la región.

Para crear una tabla global de MREC, se agrega una réplica a una tabla de DynamoDB existente. La agregación de una réplica no tiene impacto en el rendimiento de las tablas de DynamoDB de una sola región ni de las réplicas de tablas globales existentes. Puede agregar réplicas a una tabla global de MREC para ampliar el número de regiones en las que se replican los datos o eliminar réplicas de una tabla global de MREC si ya no son necesarias. Una tabla global de MREC puede tener una réplica en cualquier región en la que DynamoDB esté disponible y puede tener tantas réplicas como regiones haya en la partición de AWS.

Coherencia alta de varias regiones (MRSC)

Puede configurar el modo de coherencia alta de varias regiones (MRSC) al crear una tabla global. Los cambios de elementos en la réplica de una tabla global de MRSC se replican de forma sincrónica en al menos otra región antes de que la operación de escritura devuelva una respuesta correcta. Al convertir una tabla de una sola región existente en una tabla global de MRSC, debe asegurarse de que la tabla esté vacía hasta que se complete la conversión para garantizar una configuración de inicialización y replicación adecuada.

Las operaciones de lectura altamente coherente en cualquier réplica de MRSC siempre devuelven la versión más reciente de un elemento. Las escrituras condicionales siempre evalúan la expresión de la condición comparándola con la versión más reciente de un elemento.

Una operación de escritura produce un error con una ReplicatedWriteConflictException cuando intenta modificar un elemento que ya se está modificando en otra región. Las escrituras que tengan un error con la ReplicatedWriteConflictException se pueden reintentar y se realizarán correctamente si el elemento ya no se está modificando en otra región.

Puede configurar una tabla global de MRSC con tres réplicas o con dos réplicas y un testigo. Un testigo es un componente de una tabla global de MRSC que contiene datos escritos en réplicas de tablas globales y proporciona una alternativa opcional a una réplica completa, al tiempo que admite la arquitectura de disponibilidad de MRSC. No puede realizar operaciones de lectura o escritura en un testigo. Un testigo se encuentra en una región diferente a las dos réplicas.

Al crear una tabla global de MRSC, debe elegir las regiones para las réplicas y para la implementación de testigos en el momento de crear la tabla de MRSC. Puede determinar si una tabla global de MRSC tiene un testigo configurado y en qué región, a partir de la salida de la API de DescribeTable. El testigo es propiedad y lo administra DynamoDB, y no aparecerá en la cuenta de AWS en la región en la que esté configurado.

Una tabla global de MRSC se debe implementar exactamente en tres regiones. Se crea una tabla global de MRSC mediante la agregación de una réplica y un testigo o dos réplicas a una tabla de DynamoDB existente que no contenga datos. No puede agregar réplicas adicionales a una tabla global de MRSC existente. No puede eliminar una réplica única o un testigo de una tabla global de MRSC. Puede eliminar dos réplicas o eliminar una réplica y un testigo de una tabla global de MRSC, convirtiendo la réplica restante en una tabla de DynamoDB de una sola región.

Las siguientes consideraciones se aplican a las tablas globales de MRSC:

  • Al convertir una tabla de una sola región en una tabla global de MRSC, debe asegurarse de que la tabla esté vacía. No se admite la conversión de una tabla de una sola región en una tabla global de MRSC con los elementos existentes. Asegúrese de que no se escriba ningún dato en la tabla durante el proceso de conversión.

  • Las tablas globales de MRSC están disponibles en los siguientes conjuntos de regiones:

    • Conjunto de regiones de EE. UU.: Este de EE. UU. (Norte de Virginia), Este de EE. UU. (Ohio), Oeste de EE. UU. (Oregón)

    • Conjunto de regiones de la Unión Europea: Europa (Irlanda), Europa (Londres), Europa (París), Europa (Fráncfort)

    • Conjunto de regiones Asia-Pacífico: Asia-Pacífico (Tokio), Asia-Pacífico (Seúl) y Asia-Pacífico (Osaka).

  • Las tablas globales de MRSC no pueden abarcar conjuntos de regiones (por ejemplo, una tabla global de MRSC no puede contener réplicas de conjuntos de regiones de EE. UU. y de la UE).

  • El Tiempo de vida (TTL) no se admite para las tablas globales de MRSC.

  • Los índices secundarios locales (LSI) no se admiten para las tablas globales de MRSC.

  • La información de CloudWatch Contributor Insights solo se comunica para la región en la que se ha producido una operación.

Elección de un modo de coherencia

El criterio clave para elegir un modo de coherencia de varias regiones es si la aplicación prioriza las escrituras de menor latencia y las lecturas altamente coherentes, o si prioriza la coherencia alta global.

Las tablas globales de MREC tendrán latencias de escritura y lectura altamente coherente inferiores en comparación con las tablas globales de MRSC. Las tablas globales de MREC pueden admitir un objetivo de punto de recuperación (RPO) igual al retraso de replicación entre réplicas, normalmente unos segundos, en función de las regiones de las réplicas.

Debe utilizar el modo MREC cuando:

  • La aplicación puede tolerar que se devuelvan datos obsoletos de operaciones de lectura altamente coherentes si esos datos se han actualizado en otra región.

  • Prioriza las latencias de escritura y de lectura altamente coherente más bajas sobre la consistencia de lectura de varias regiones.

  • La estrategia de alta disponibilidad de varias regiones puede tolerar un RPO superior a cero.

Las tablas globales de MRSC tendrán latencias de escritura y de lectura altamente coherente más elevadas que las tablas globales de MREC. Las tablas globales de MRSC admiten un objetivo de punto de recuperación (RPO) de cero.

Debe utilizar el modo MRSC cuando:

  • Necesita lecturas altamente coherentes en varias regiones.

  • Dé prioridad a la consistencia de lectura global sobre una latencia de escritura menor.

  • La estrategia de alta disponibilidad de varias regiones requiera un RPO de cero.

Monitoreo de tablas globales

Las tablas globales configuradas para una coherencia final de varias regiones (MREC) publican la métrica ReplicationLatency en CloudWatch. Esta métrica realiza un seguimiento del tiempo transcurrido entre el momento en que un elemento se escribe en una tabla de réplica y el momento en que dicho elemento aparece en otra réplica de la tabla global. ReplicationLatency se expresa en milisegundos y se emite para cada par de región de origen y destino en una tabla global.

Los valores típicos de ReplicationLatency dependen de la distancia entre las regiones de AWS elegidas, así como de otras variables, como el tipo de carga de trabajo y el rendimiento. Por ejemplo, una réplica de origen en la región Oeste de EE. UU. (Norte de California) (us-west-1) tiene un nivel más bajo de ReplicationLatency hacia la región Oeste de EE. UU. (Oregón) (us-west-2) en comparación con la región África (Ciudad del Cabo) (af-south-1).

Un valor en aumento de ReplicationLatency podría indicar que las actualizaciones de una réplica no se están propagando hacia otras tablas de réplica de manera puntual. En este caso, puede redirigir temporalmente la actividad de lectura y escritura de la aplicación a otra región de AWS.

Las tablas globales configuradas para coherencia alta de varias regiones (MRSC) no publican una métrica de ReplicationLatency.

Pruebas de inyección de errores

Las tablas globales de MREC se integran con el Servicio de inyección de errores de AWS (AWS FIS) para realizar experimentos de inyección de errores en las cargas de trabajo de las tablas globales. Esto le permite probar la respuesta de la aplicación a un aislamiento de región simulado al pausar la replicación hacia y desde una réplica seleccionada. Para obtener más información, consulte Pausar la replicación de una tabla global.

Tiempo de vida (TTL)

Las tablas globales configuradas para MREC admiten la configuración de la eliminación de Tiempo de vida (TTL). La configuración de TTL se sincroniza automáticamente para todas las réplicas en una tabla global. Cuando TTL elimina un elemento de una réplica en una región, la eliminación se replica en todas las demás réplicas de la tabla global. El TTL no consume capacidad de escritura, por lo que no se le cobrará por la eliminación de TTL en la región donde se realizó la eliminación. Sin embargo, se le cobrará por la eliminación replicada en cada una de las demás regiones con una réplica en la tabla global.

La replicación de eliminación de TTL consume la capacidad de escritura de las réplicas en las que se está replicando la eliminación. Las réplicas configuradas para la capacidad aprovisionada pueden limitar las solicitudes si la combinación del rendimiento de escritura y el rendimiento de eliminación de TTL es superior a la capacidad de escritura aprovisionada.

Las tablas globales configuradas para la coherencia alta de varias regiones (MRSC) no admiten la configuración de la eliminación de Tiempo de vida (TTL).

Transmisión

Las tablas globales configuradas para una coherencia final de varias regiones (MREC) replican los cambios leyendo esos cambios desde un Flujo de DynamoDB en una tabla de réplica y aplicándolos a todas las demás tablas de réplica. Por lo tanto, los flujos están habilitados de forma predeterminada en todas las réplicas de una tabla global de MREC y no se pueden desactivar en esas réplicas. El proceso de replicación de MREC puede combinar varios cambios en un corto periodo de tiempo en una sola escritura replicada, lo que hace que el flujo de cada réplica contenga registros ligeramente diferentes. Los registros de flujos en las réplicas de MREC siempre se ordenan por elemento, pero el orden entre los elementos puede variar entre las réplicas.

Las tablas globales configuradas para una coherencia sólida de varias regiones (MRSC) no utilizan los flujos de DynamoDB para la replicación, por lo que los flujos no están habilitados de forma predeterminada en las réplicas de MRSC. Puede habilitar flujos en una réplica de MRSC. Los registros de flujos en las réplicas de MRSC son idénticos para todas las réplicas, incluido el orden de los registros de flujos.

Si desea escribir una aplicación que procese los registros de flujos para cambios que se produjeron en una región específica pero no en otras regiones de una tabla global, puede agregar un atributo a cada elemento que defina en qué región se produjo el cambio para ese elemento. Puede usar este atributo para filtrar los registros de flujos en busca de cambios que se hayan producido en otras regiones, incluido el uso de filtros de eventos de Lambda para invocar solo las funciones de Lambda para los cambios en una región específica.

Transacciones

En una tabla global configurada para MREC, las operaciones de transacción de DynamoDB (TransactWriteItems y TransactGetItems) son solo atómicas dentro de la región donde se invocó la operación. Las escrituras transaccionales no se replican como una unidad en todas las regiones, lo que significa que solo algunas de las escrituras de una transacción pueden devolverse mediante operaciones de lectura en otras réplicas en un momento dado.

Por ejemplo, si tiene una tabla global con réplicas en las regiones Este de EE. UU. (Ohio) y Oeste de EE. UU. (Oregón) y realiza una operación TransactWriteItems en la región Este de EE. UU. (Ohio), puede observar transacciones completadas parcialmente en la región Oeste de EE. UU. (Oregón) a medida que los cambios se replican. Solo se replicarán los cambios en otras regiones cuando se hayan confirmado en la región de origen.

Las tablas globales configuradas para lograr una coherencia alta de varias regiones (MRSC) no admiten operaciones de transacción y devolverán un error si esas operaciones se invocan en una réplica de MRSC.

Rendimiento de lectura y escritura

La replicación consume capacidad de escritura. Las réplicas configuradas para la capacidad aprovisionada pueden limitar las solicitudes si la combinación del rendimiento de escritura y el rendimiento de replicación es superior a la capacidad de escritura aprovisionada. La capacidad de escritura en el modo bajo demanda se sincroniza para todas las réplicas en una tabla global. Las tablas globales configuradas para la capacidad aprovisionada sincronizan la configuración de escalado automático entre réplicas. La configuración de la capacidad de escritura aprovisionada real puede variar entre las réplicas en función del rendimiento de escritura consumido.

Puede configurar de forma independiente los ajustes de capacidad de lectura para cada réplica en una tabla global. Al agregar una réplica a una tabla global, la capacidad de lectura de la tabla o réplica de origen se utiliza como valor inicial, a menos que se especifique un valor de invalidación.

Sincronización de ajustes

Los ajustes de las tablas globales de DynamoDB son parámetros de configuración que controlan varios aspectos del comportamiento y la replicación de las tablas. Estos ajustes se administran mediante las API del plano de control de DynamoDB y se pueden configurar al crear o modificar tablas globales. Las tablas globales sincronizan automáticamente determinados ajustes en todas las réplicas para mantener la coherencia, al tiempo que permiten flexibilidad para optimizaciones específicas de cada región. Entender qué ajustes se sincronizan y cómo se comportan le ayuda a configurar la tabla global de manera efectiva. Los ajustes se dividen en tres categorías principales en función de cómo se sincronizan entre las réplicas.

Los siguientes ajustes siempre se sincronizan entre las réplicas de una tabla global:

  • Modo de capacidad (capacidad aprovisionada o bajo demanda)

  • Capacidad de escritura aprovisionada de tabla

  • Escalado automático de la escritura de tablas

  • Definición del índice secundario global (GSI)

  • Capacidad de escritura aprovisionada por GSI

  • Escalado automático de escritura de GSI

  • Tipo de cifrado del servidor (SSE)

  • Definición de flujos en modo de MREC

  • Tiempo de vida (TTL)

  • Rendimiento en caliente

  • Rendimiento de escritura máximo bajo demanda

Los siguientes ajustes se sincronizan entre las réplicas, pero se pueden invalidar por réplica:

  • La capacidad de lectura aprovisionada de la tabla

  • Escalado automático de lectura de tablas

  • Capacidad de lectura aprovisionada de GSI

  • Escalado automático de lectura de GSI

  • Clase de tabla

  • Rendimiento de lectura máximo bajo demanda

nota

Los valores de configuración anulables se modifican si la configuración se cambia en cualquier otra réplica. Como ejemplo, tiene una tabla global de MREC con réplicas en Este de EE. UU. (Norte de Virginia) y Oeste de EE. UU. (Oregón). La réplica de Este de EE. UU. (Norte de Virginia) tiene un rendimiento de lectura aprovisionado establecido en 200 RCU. La réplica en Oeste de EE. UU. (Oregón) tiene una invalidación del rendimiento de lectura aprovisionada establecida en 100 RCU. Si actualiza la configuración de rendimiento de lectura aprovisionada en la réplica de Este de EE. UU. (Norte de Virginia) de 200 a 300 RCU, el nuevo valor de rendimiento de lectura aprovisionado también se aplicará a la réplica en Oeste de EE. UU. (Oregón). Esto cambia la configuración de rendimiento de lectura aprovisionada para la réplica de Oeste de EE. UU. (Oregón) del valor invalidado de 100 RCU al nuevo valor de 300 RCU.

Los siguientes ajustes nunca se sincronizan entre réplicas:

  • Protección contra eliminación

  • Recuperación en un momento dado

  • Etiquetas

  • Habilitación de CloudWatch Contributor Insights para tablas

  • Habilitación de CloudWatch Contributor Insights para GSI

  • Definición de Kinesis Data Streams

  • Políticas de recursos

  • Definición de flujos en modo de MRSC

Todos los demás ajustes no están sincronizados entre réplicas.

DynamoDB Accelerator (DAX)

Las réplicas de escrituras en tablas globales omiten DynamoDB Accelerator (DAX) y actualizan DynamoDB directamente. Como resultado, las cachés de DAX pueden quedar obsoletas, ya que las escrituras no actualizan la caché de DAX. Las cachés de DAX configuradas para réplicas de tablas globales solo se actualizarán cuando caduque el TTL de la caché.

Consideraciones para la administración de tablas globales

No puede eliminar una tabla utilizada para agregar una nueva réplica de tabla global hasta que hayan transcurrido 24 horas desde que se creó la nueva réplica.

Si desactiva una región de AWS que contiene réplicas de tablas globales, esas réplicas se convierten permanentemente en tablas de una sola región 20 horas después de desactivar la región.