Kinesis: Flujo de Datos y Transformación Digital

23/02/2023

Valoración: 4.65 (12403 votos)

En la era digital actual, la capacidad de procesar y reaccionar a los datos en tiempo real es una ventaja competitiva fundamental. Amazon Web Services (AWS) ofrece un conjunto de herramientas potentes para lograr esto, destacando Amazon Kinesis y DynamoDB Streams. Estos servicios son pilares para construir arquitecturas de datos ágiles y responsivas, permitiendo a las aplicaciones reaccionar a los cambios de información a medida que ocurren. Este artículo explorará cómo se pueden utilizar estas tecnologías para resolver desafíos comunes en la gestión de datos, desde la replicación y auditoría hasta la generación de informes y la activación de notificaciones.

¿Qué ofrece la clínica kinesis?
Clínica Kinesis. Centro Médico de Recuperación Funcional y Fisioterapia El mejor equipo de profesionales, con A. Martínez Vanaclocha y J.R. Salom Terrádez al frente. Cómodas y numerosas instalaciones dotadas con los más potentes y eficaces equipos electromédicos. Inmejorable ubicación en el centro de Valencia, inmersos en el Centro Médico REMED.

La migración de datos de bases de datos relacionales a soluciones NoSQL como Amazon DynamoDB a menudo presenta nuevos paradigmas de diseño. Uno de los desafíos más recurrentes es cómo manejar las relaciones entre múltiples tablas, disparar eventos basados en cambios específicos, auditar o archivar datos, y replicar información de manera eficiente. Aquí es donde DynamoDB Streams, en combinación con otros servicios de AWS, brilla con luz propia.

Índice de Contenido

¿Qué son DynamoDB Streams y Kinesis?

DynamoDB Streams es un servicio integral de AWS que captura una secuencia ordenada en el tiempo de todas las modificaciones a nivel de elemento en una tabla de DynamoDB. Esta información se almacena de forma duradera durante un período de hasta 24 horas, permitiendo a las aplicaciones acceder a un flujo continuo de registros que detallan cada cambio. Es como un libro de contabilidad digital que registra cada acción sobre tus datos.

Es importante destacar que AWS mantiene puntos de conexión (endpoints) independientes para DynamoDB y DynamoDB Streams. Esto significa que tu aplicación necesita acceso a un endpoint de DynamoDB para interactuar con las tablas e índices, y a un endpoint de DynamoDB Streams en la misma región para leer y procesar los registros de la secuencia.

DynamoDB Streams soporta diferentes vistas de registro de secuencias, lo que te permite elegir qué nivel de detalle necesitas:

  • KEYS_ONLY: Solo muestra los atributos clave del elemento modificado. Ideal para escenarios donde solo necesitas saber qué elemento cambió.
  • NEW_IMAGE: Proporciona todos los atributos del elemento modificado con sus valores después de la modificación. Útil para ver el estado final del dato.
  • OLD_IMAGE: Ofrece todos los atributos del elemento modificado con sus valores antes de la modificación. Esencial para auditorías o reversiones.
  • NEW_AND_OLD_IMAGES: Incluye ambas imágenes del elemento (antes y después de la modificación), ofreciendo una visión completa del cambio.

El procesamiento de DynamoDB Streams se puede realizar de varias maneras. Las opciones más comunes son AWS Lambda o una aplicación independiente que utiliza la Kinesis Client Library (KCL) con el adaptador de Kinesis de DynamoDB Streams. Lambda es particularmente popular por su naturaleza sin servidor, ejecutando código basándose en un evento de DynamoDB Streams (insertar, actualizar o eliminar un elemento) sin necesidad de gestionar servidores.

Patrones de Diseño Avanzados con DynamoDB Streams

La versatilidad de DynamoDB Streams permite implementar una amplia gama de patrones de diseño complejos. A continuación, exploraremos algunos de los casos de uso más comunes.

Implementando Capacidades Transaccionales con Múltiples Tablas

Aunque DynamoDB ofrece APIs transaccionales del lado del servidor para una fuerte consistencia en operaciones sobre múltiples tablas, DynamoDB Streams es ideal para vistas materializadas de datos. Esto permite que los cambios de una tabla se propaguen de manera eventualmente consistente a otras tablas, que pueden tener diferentes patrones de acceso.

  • Agregación: Imagina que necesitas mantener el monto total de una factura en tiempo real. Cada vez que se inserta un nuevo elemento en la tabla InvoiceTransactions, DynamoDB Streams puede disparar una función Lambda que actualiza el total en una tabla InvoiceTotal, utilizando una expresión de actualización como ADD Total :Amount SET update_date = :date.
  • Agregación Condicional: Si necesitas registrar el número de transacciones por ubicación solo para facturas asignadas a un propietario para verificación, puedes usar una expresión de actualización con una operación de escritura condicional. Por ejemplo, solo se actualiza si attribute_exists(verify_action).

Replicación de Datos y Tablas Globales

Similar a las vistas materializadas en bases de datos relacionales, DynamoDB Streams facilita la replicación de datos. Puedes replicar la tabla InvoiceTransactions en diferentes regiones para obtener informes de baja latencia o implementar estrategias de recuperación ante desastres. Las tablas globales de DynamoDB utilizan internamente DynamoDB Streams para propagar cambios entre réplicas en distintas regiones de AWS, garantizando la consistencia global de tus datos.

Archivado y Auditoría de Datos

La necesidad de almacenar datos para auditoría o cumplimiento normativo durante largos períodos (por ejemplo, siete años) es común. DynamoDB es excelente para datos “calientes” de acceso frecuente, pero para datos históricos, Amazon S3 es una solución más rentable.

Puedes diseñar una solución robusta utilizando Amazon Kinesis Data Streams, Amazon Kinesis Data Firehose y Amazon S3:

  1. Crea un flujo de datos en Kinesis Data Streams (ej. ddbarchive).
  2. Habilita el flujo de datos a Kinesis en tu tabla de DynamoDB. Cada modificación enviará un registro a Kinesis.
  3. Crea un flujo de entrega de Kinesis Data Firehose para procesar los registros de ddbarchive y almacenarlos en Amazon S3. Firehose agrupa, comprime y cifra los datos antes de la entrega.
  4. Implementa políticas de ciclo de vida de S3 para mover datos más antiguos a S3-IA (acceso poco frecuente) o Amazon Glacier, optimizando costos.

Alternativamente, DynamoDB Time to Live (TTL) simplifica el archivado al eliminar elementos automáticamente basados en un atributo de marca de tiempo. Además, la característica nativa de DynamoDB para exportar a S3 sin código es una opción conveniente. Una vez en S3, servicios como Amazon Athena permiten realizar consultas ad hoc para auditoría.

¿Cuándo nació librería Kier?

Reportes y Análisis

Los reportes son cruciales para entender el estado de tu negocio. DynamoDB Streams ofrece soluciones tanto para reportes en tiempo real como para análisis complejos:

  • Reportes en Tiempo Real: Para consultas rápidas, diseña tu esquema de DynamoDB con claves de partición y ordenamiento adecuadas. Las APIs Query o GetItem de DynamoDB, junto con índices secundarios locales y globales, permiten obtener datos al instante. Ejemplos incluyen reportar todas las transacciones para un número de factura o el total por factura.
  • Consultas Analíticas: Para análisis de baja frecuencia, puedes usar Amazon Athena Federated Query o Amazon EMR con HiveQL directamente sobre DynamoDB. Sin embargo, para un uso analítico frecuente y eficiente sobre grandes conjuntos de datos, es mejor exportar los datos (periódicamente o continuamente vía Streams) a Amazon Redshift, un servicio de data warehousing columnar. Kinesis Data Firehose puede consumir los registros de DynamoDB Streams y cargarlos en Redshift, utilizando un bucket intermedio de S3 y el comando COPY. Herramientas de inteligencia de negocios como Amazon QuickSight pueden luego ejecutar consultas en Redshift.

Notificaciones y Mensajería

La capacidad de reaccionar a eventos específicos es un motor para la automatización y la eficiencia. DynamoDB Streams, combinado con AWS Lambda y Amazon SNS (Simple Notification Service), permite construir sistemas de notificación en tiempo real:

  • Alertas Inmediatas: Si un valor crítico, como el importe de una factura, se inserta o actualiza a cero, puedes configurar una función Lambda para leer el DynamoDB Stream, detectar este evento y publicar un mensaje en un tópico de SNS. Los suscriptores (correo electrónico, SMS) recibirán notificaciones al instante, permitiendo una acción rápida.
  • Integración con Sistemas Externos: Para escenarios donde una nueva entrada en una factura debe activar un flujo de trabajo en otro sistema (ej. procesamiento de pagos), DynamoDB Streams puede enviar mensajes a través de Lambda y SNS a una cola de Amazon SQS (Simple Queue Service). El sistema de procesamiento de pagos puede sondear la cola SQS y disparar la acción de procesamiento.

Búsquedas de Texto Libre

DynamoDB no está diseñado para búsquedas de texto libre en grandes volúmenes de datos. Para estos requerimientos, se recomienda utilizar Amazon OpenSearch Service (Amazon OS).

La solución implica:

  1. Utilizar la tabla de DynamoDB como almacén de datos principal.
  2. Un clúster de Amazon OS para servir todas las búsquedas.
  3. Cualquier inserción, actualización o eliminación en la tabla principal se captura mediante DynamoDB Streams y se procesa con AWS Lambda.
  4. Lambda realiza las llamadas adecuadas a Amazon OS para indexar los datos en tiempo real.

Esta arquitectura es altamente extensible; si agregas un nuevo atributo en DynamoDB, estará disponible automáticamente para consultas en Amazon OS. También puedes aprovechar Kinesis Data Firehose para enviar los cambios a Amazon OS, con la opción de transformar los datos con funciones Lambda antes de la carga.

Prácticas Recomendadas para Trabajar con DynamoDB Streams

Al diseñar soluciones con DynamoDB Streams, considera las siguientes prácticas para asegurar la robustez y eficiencia:

  • Consistencia: DynamoDB Streams ofrece sincronización de datos casi en tiempo real, pero no garantiza consistencia transaccional en múltiples tablas. Esto debe manejarse a nivel de aplicación. Ten en cuenta la latencia involucrada (fracciones de segundo) en la propagación de datos.
  • Manejo de Cambios: Tu aplicación debe estar preparada para controlar todos los tipos de cambios: eliminaciones, actualizaciones y creaciones.
  • Resistencia a Fallos: Diseña tu capa de procesamiento de flujo de datos para manejar diferentes tipos de fallas. Asegúrate de almacenar los datos de la secuencia en una cola de mensajes fallidos (como SQS o S3) para su posterior procesamiento en caso de error.
  • Idempotencia: Las operaciones de procesamiento deben ser idempotentes, lo que significa que pueden repetirse de forma segura sin causar efectos secundarios no deseados. Esto es crucial para la reintentabilidad en caso de errores.
  • Limitaciones: La retención de datos en DynamoDB Streams es de un máximo de 24 horas. Además, no más de dos procesos deben leer de un fragmento de flujo (stream shard) al mismo tiempo para evitar contención.

Comparativa: AWS Lambda vs. Kinesis Client Library (KCL)

La elección entre AWS Lambda y Kinesis Client Library (KCL) para procesar DynamoDB Streams depende de tus necesidades específicas. Aquí una tabla comparativa:

ParámetrosAWS LambdaKinesis Client Library (KCL)
DespliegueLambda sondea DynamoDB Streams e invoca la función/código tan pronto como detecta un nuevo registro.La aplicación se escribe usando la librería KCL con DynamoDB Streams Kinesis Adapter y se aloja en una instancia EC2.
ManejoLambda escala automáticamente en función del rendimiento requerido. Es un servicio sin servidor.Debes administrar los fragmentos (shards), el monitoreo, el escalado y el proceso de comprobación de acuerdo con las prácticas recomendadas de KCL.
Cómo FuncionaPara cada partición de DynamoDB, hay un fragmento (shard) correspondiente y una función Lambda sondea los eventos en la secuencia (fragmento). Obtiene registros, los procesa y luego obtiene el siguiente lote.Enumera las particiones de la secuencia, coordina las asociaciones de fragmentos con otros trabajadores, crea una instancia de un procesador de registros para cada fragmento, extrae registros y los envía al procesador, y ejecuta puntos de control.
Tiempo de EjecuciónLa duración máxima de ejecución de Lambda por solicitud es de 900 segundos.No hay restricciones de tiempo de ejecución.
DisponibilidadLambda es un servicio administrado y altamente disponible. No requiere ventanas de mantenimiento ni tiempos de inactividad programados.La aplicación debe estar alojada en un grupo de EC2 Auto Scaling para alta disponibilidad.
Otras ConsideracionesTen en cuenta el impacto del límite de carga útil de Lambda. Los tipos _IMAGE pueden excederlo, especialmente para elementos más grandes. Especifica el tamaño del lote en consecuencia.Proporciona un control más granular sobre el procesamiento del flujo.

Se recomienda considerar Lambda para el procesamiento de DynamoDB Streams siempre que sea posible, dado que es un servicio sin servidor y reduce la carga de configuración y administración.

Conclusión

DynamoDB Streams es un servicio administrado de AWS excepcionalmente poderoso que, cuando se combina con otros servicios como AWS Lambda, Kinesis Data Streams, Kinesis Data Firehose, Amazon S3, Amazon Redshift y Amazon OpenSearch Service, permite construir soluciones innovadoras para la migración y gestión de datos en tiempo real. Desde la replicación y auditoría hasta la generación de informes y la activación de notificaciones, DynamoDB Streams se posiciona como una pieza central en arquitecturas de datos modernas y reactivas. Comprender sus capacidades y mejores prácticas es fundamental para cualquier profesional que busque optimizar el flujo de información en la nube y desbloquear el verdadero potencial de sus datos.

Preguntas Frecuentes sobre Kinesis y DynamoDB Streams

1. ¿Cuál es la principal función de DynamoDB Streams?
La principal función de DynamoDB Streams es capturar y registrar una secuencia ordenada en el tiempo de todas las modificaciones (inserciones, actualizaciones, eliminaciones) realizadas a nivel de elemento en una tabla de DynamoDB, permitiendo a las aplicaciones reaccionar a estos cambios en tiempo real.

2. ¿Cuánto tiempo se retienen los datos en DynamoDB Streams?
Los datos en DynamoDB Streams se retienen durante un período máximo de 24 horas.

3. ¿Se puede usar DynamoDB Streams para búsquedas de texto libre?
No, DynamoDB no es el servicio adecuado para búsquedas de texto libre. Para este tipo de requerimiento, se recomienda integrar DynamoDB Streams con Amazon OpenSearch Service (Amazon OS), que indexa los datos para permitir búsquedas avanzadas.

4. ¿Cómo puedo archivar datos de DynamoDB a largo plazo?
Puedes archivar datos de DynamoDB a largo plazo utilizando DynamoDB Streams en combinación con Amazon Kinesis Data Firehose para enviarlos a Amazon S3. Además, DynamoDB Time to Live (TTL) y la función nativa de exportación a S3 son opciones para el archivado automático.

5. ¿Cuándo debo usar AWS Lambda en lugar de Kinesis Client Library (KCL) para procesar Streams?
Se recomienda usar AWS Lambda siempre que sea posible, ya que es un servicio sin servidor que escala automáticamente y no requiere administración de infraestructura. KCL es una opción cuando necesitas un control más granular sobre el procesamiento, pero implica mayor gestión por parte del usuario.

Si quieres conocer otros artículos parecidos a Kinesis: Flujo de Datos y Transformación Digital puedes visitar la categoría Librerías.

Subir