Tablas globales: cómo funcionan - Amazon DynamoDB

Tablas globales: cómo funcionan

importante

Esta documentación corresponde a la versión 2017.11.29 (heredada) de las tablas globales, lo que debe evitarse en el caso de las tablas globales nuevas. Los clientes deberían utilizar la versión 2019.11.21 (actual) de las tablas globales siempre que sea posible, ya que proporciona mayor flexibilidad, mayor eficacia y consume menos capacidad de escritura que la 2017.11.29 (heredada).

Para determinar qué versión utiliza, consulte Determinación de la versión de las tablas globales utilizadas. Para actualizar las tablas globales existentes de la versión 2017.11.29 (heredada) a la versión 2019.11.21 (actual), consulte Actualización de tablas globales.

Las secciones siguientes le ayudarán a comprender los conceptos y el comportamiento de las tablas globales en Amazon DynamoDB.

Conceptos de tablas globales para la versión 2017.11.29 (heredada)

Una tabla global es una colección de una o más réplicas de tabla, propiedad de una única cuenta de AWS.

Una réplica de tabla (o réplica) es una única tabla de DynamoDB que funciona como una parte de una tabla global. Cada réplica almacena el mismo conjunto de elementos de datos. Cualquier tabla global solo puede tener una réplica de tabla por región de AWS.

A continuación se muestra información general de carácter conceptual acerca de cómo se crea una tabla global.

  1. Cree una tabla normal de DynamoDB con DynamoDB Streams habilitada en una región AWS.

  2. Repita el paso 1 para cada región en la que desea replicar los datos.

  3. Defina una tabla global de DynamoDB en función de las tablas que haya creado.

La AWS Management Console automatiza estas tareas para que pueda crear una tabla global de forma más rápida y sencilla. Para obtener más información, consulte Creación de una tabla global.

La tabla global de DynamoDB resultante se compone de varias réplicas de tabla, una por región, que DynamoDB considera como una única unidad. Cada réplica tiene el mismo nombre de tabla y el mismo esquema de clave primaria. Cuando una aplicación escribe datos en una réplica de tabla de una región, DynamoDB propaga automáticamente la operación de escritura en el resto de las réplicas de tablas de las otras regiones de AWS.

importante

Para mantener los datos de la tabla sincronizados, las tablas globales crean automáticamente los siguientes atributos para cada elemento:

  • aws:rep:deleting

  • aws:rep:updatetime

  • aws:rep:updateregion

No modifique estos atributos ni cree atributos con el mismo nombre.

Puede agregar réplicas de tablas a la tabla global para que esté disponible en otras regiones. (Para ello, la tabla global debe estar vacía. En otras palabras, ninguna de las réplicas de tabla puede contener ningún dato).

También puede eliminar una réplica de tabla de una tabla global. En tal caso, la tabla se desasocia completamente de la tabla global. Esta nueva tabla independiente ya no interactúa con la tabla global y los datos ya no se propagarán hacia o desde allí.

aviso

Tenga en cuenta que eliminar una réplica no es un proceso atómico. Para asegurar un comportamiento coherente y un estado conocido, puede considerar la posibilidad de desviar el tráfico de escritura de su aplicación fuera de la réplica que se va a eliminar con antelación. Después de eliminarla, espere hasta que todos los puntos de conexión de la región de réplica muestren la réplica como disociada antes de realizar más escrituras en ella como su propia tabla regional aislada.

Tareas comunes

Las tareas comunes de las tablas globales funcionan de la siguiente manera.

Puede eliminar la tabla de réplica de una tabla global de la misma manera que una tabla normal. Esto detendrá la replicación en esa región y eliminará la copia de la tabla guardada en dicha región. No puede separar la replicación y tener copias de la tabla que existan como entidades independientes.

nota

No podrá eliminar una tabla de origen hasta que transcurran al menos 24 horas desde que se haya utilizado para iniciar una nueva región. Si intenta eliminarla demasiado pronto, se producirá un error.

Pueden surgir conflictos si las aplicaciones actualizan el mismo elemento en diferentes regiones aproximadamente al mismo momento. Para garantizar la coherencia final, las tablas globales de DynamoDB usan el método “el último escritor gana”. Todas las réplicas estarán de acuerdo con la última actualización y convergerán en un estado en el cual todas tienen datos idénticos.

nota

Existen varias maneras de evitar los conflictos, entre las que se incluyen:

  • Uso de una política de IAM para permitir solo escrituras en la tabla en una región.

  • Uso de una política de IAM para redirigir a los usuarios a una sola región y mantener la otra en espera inactiva o, alternativamente, redirigir a los usuarios impares a una región y a los usuarios pares a otra.

  • Evitar el uso de actualizaciones no idempotentes, como Bookmark = Bookmark + 1, en favor de actualizaciones estáticas como Bookmark=25.

Monitoreo de tablas globales

Puede utilizar CloudWatch para observar la métrica ReplicationLatency. Esta métrica realiza el seguimiento del tiempo transcurrido entre el momento en que un elemento aparece en la secuencia de DynamoDB para 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 pareja de región de origen y región de destino. Esta es la única métrica de CloudWatch que proporciona la versión 2 de las tablas globales.

Las latencias que observará dependerán de la distancia entre las regiones elegidas, así como de otras variables. Las latencias en el intervalo de 0,5 a 2,5 segundos para las regiones pueden ser comunes en la misma área geográfica.

Tiempo de vida (TTL)

Puede utilizar el tiempo de vida (TTL) para especificar un nombre de atributo cuyo valor indique el tiempo de caducidad del elemento. Este valor se especifica como un número en segundos desde el inicio del tiempo Unix.

Con la versión heredada de las tablas globales, las eliminaciones de TTL no se replican automáticamente en otras réplicas. Cuando se elimina un elemento mediante una regla de TTL, ese trabajo se realiza sin consumir unidades de escritura.

Tenga en cuenta que si las tablas de origen y destino tienen una capacidad de escritura aprovisionada muy baja, se puede producir una limitación, ya que las eliminaciones de TTL requieren capacidad de escritura.

Flujos y transacciones con tablas globales

Cada tabla global produce un flujo independiente basado en todas sus escrituras, independientemente del punto de origen de dichas escrituras. Puede optar por consumir este flujo de DynamoDB en una región o en todas las regiones de forma independiente.

Si desea procesar escrituras locales pero no escrituras replicadas, puede agregar su propio atributo de región a cada elemento. A continuación, puede utilizar un filtro de eventos de Lambda para invocar únicamente a Lambda para las escrituras en la región local.

Las operaciones transaccionales proporcionan garantías ACID (atomicidad, coherencia, aislamiento y durabilidad) SOLO en la región en la que se crea la escritura originalmente. No se admiten las transacciones entre regiones en las tablas globales.

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.

nota
  • Las tablas globales “sustituyen” a Acelerador de DynamoDB al actualizar DynamoDB directamente. Como resultado, DAX no sabrá que contiene datos obsoletos. La memoria caché de DAX solo se actualizará cuando caduque el TTL de la memoria caché.

  • Las etiquetas de las tablas globales no se propagan automáticamente.

Rendimiento de lectura y escritura

Las tablas globales administran el rendimiento de lectura y escritura de las siguientes maneras.

  • La capacidad de escritura debe ser la misma en todas las instancias de tabla en todas las regiones.

  • Con la versión 2019.11.21 (actual), si la tabla está configurada para admitir el escalado automático o está en el modo bajo demanda, la capacidad de escritura se mantiene sincronizada automáticamente. La cantidad actual de capacidad de escritura aprovisionada en cada región aumentará y disminuirá de forma independiente según la configuración de escalado automático sincronizado. Si la tabla se coloca en modo bajo demanda, ese modo se sincronizará con las demás réplicas.

  • La capacidad de lectura puede diferir de una región a otra porque las lecturas pueden no ser iguales. Al agregar una réplica global a una tabla, se propaga la capacidad de la región de origen. Tras la creación, puede ajustar la capacidad de lectura de una réplica y esta nueva configuración no se transferirá al otro lado.

Coherencia y resolución de conflictos

Cualquier cambio en cualquier elemento de cualquier réplica de tabla se replicará en el resto de réplicas en la misma tabla global. En una tabla global, un elemento que se acaba de escribir se propagará normalmente a todas las réplicas de tabla en cuestión de segundos.

Con una tabla global, cada réplica de tabla almacena el mismo conjunto de elementos de datos. DynamoDB no admite la replicación parcial de solo algunos de los elementos.

Una aplicación puede leer y escribir datos en cualquier réplica de tabla. DynamoDB admite lecturas coherentes posteriores entre regiones, pero no admite lecturas altamente coherentes entre regiones. Si la aplicación solo utiliza operaciones de lectura eventualmente consistentes y solo realiza operaciones de lectura en una región de AWS, funcionará sin ninguna modificación. No obstante, si su aplicación requiere lecturas altamente coherentes, debe realizar todas las lecturas y escrituras altamente coherentes en la misma región. De no ser así, si realiza una escritura en una región y una lectura en otra, es posible que la respuesta de la lectura incluya datos anticuados que no reflejen los resultados de las operaciones de escritura completadas recientemente en la otra región.

Pueden surgir conflictos si las aplicaciones actualizan el mismo elemento en diferentes regiones aproximadamente al mismo momento. Para garantizar la consistencia final, las tablas globales de DynamoDB usan la reconciliación gana quien escribe último entre las actualizaciones simultáneas. DynamoDB hace todo lo posible para determinar quién realizó la última escritura. Con este mecanismo de resolución de conflictos, todas las réplicas estarán de acuerdo con la última actualización y convergerán en un estado en el cual todas tienen datos idénticos.

Disponibilidad y durabilidad

Si una única región de AWS se encuentra aislada o degradada, la aplicación puede redirigir a otra región y realizar las operaciones de lectura y escritura en una réplica de tabla diferente. Puede aplicar una lógica empresarial personalizada para determinar cuándo deben redirigirse solicitudes a otras regiones.

Si una región se encuentra aislada o degradada, DynamoDB lleva un seguimiento de las operaciones de escritura que se han realizado pero que todavía no se han propagado a todas las réplicas de tabla. Cuando la región vuelva a estar en línea, DynamoDB reanudará la propagación de cualquier operación de escritura pendiente desde esa región a las réplicas de tabla en otras regiones. Asimismo, reanudará la propagación de las operaciones de escritura de otras réplicas de tabla a la región que ahora está en línea. Todas las escrituras realizadas correctamente con anterioridad se propagarán finalmente sin importar el tiempo que la región permanezca aislada.