Implementación Asíncrona de Likes con AWS Lambda y DynamoDB

Clase 19 de 24Curso Avanzado de Serverless Framework en AWS

Resumen

¿Cómo se suma likes de manera asíncrona y segura en una aplicación?

Sumar likes a una aplicación es una funcionalidad común en las redes sociales y otras plataformas interactivas. Sin embargo, hacerlo de manera eficiente y segura requiere de un enfoque cuidadoso, especialmente cuando se trata de una base de datos que debe manejar grandes volúmenes de tráfico. En esta sección, exploraremos cómo implementar una lógica para sumar likes de forma asíncrona utilizando una función Lambda y Amazon DynamoDB.

¿Qué es DynamoDB y por qué usarlo?

Amazon DynamoDB es una base de datos NoSQL que ofrece características poderosas para manejar grandes volúmenes de datos con rapidez y eficiencia.

  • Escalabilidad: DynamoDB está diseñado para manejar cualquier cantidad de tráfico de lectura y escritura.
  • Eficiencia: Ofrece métodos para realizar actualizaciones atómicas y operaciones complejas con facilidad.
  • Resiliencia: Es conocido por su capacidad para manejar particiones y fallos de nodos sin pérdida de datos.

¿Cómo funciona la Lambda para sumar likes?

La función Lambda que crearemos será la encargada de recibir solicitudes y actualizarlas en DynamoDB. A continuación, se detalla el proceso paso a paso:

1. Requerimiento del SDK de Amazon

Primero, requerimos el SDK de Amazon, esencial para interactuar con DynamoDB desde la función Lambda:

const AWS = require('aws-sdk');
const dynamoDB = new AWS.DynamoDB.DocumentClient();

2. Manejo del parámetro "sleep"

Incluimos una función sleep para controlar la espera entre las operaciones:

const sleep = (milliseconds) => {
  return new Promise(resolve => setTimeout(resolve, milliseconds));
};

3. Extracción del body de la solicitud

Desde el cuerpo de la solicitud POST se extrae el ID que identificará al usuario en la base de datos:

const { id } = JSON.parse(event.body);

4. Actualización en DynamoDB

Usamos la capacidad de DynamoDB para incrementar de manera segura el número de likes:

await dynamoDB.update({
  TableName: 'TablaDeUsuarios',
  Key: { id },
  UpdateExpression: 'ADD likes :inc',
  ExpressionAttributeValues: { ':inc': 1 }
}).promise();

¿Cómo se gestionan las pruebas del sistema?

Después de implementar la función Lambda, es crucial probar su funcionalidad para asegurar su correcto funcionamiento y eficiencia.

Uso de herramientas para probar las Lambdas

  • Serverless Framework: nos ayuda a desplegar y gestionar nuestras funciones sin problemas de peso excesivo gracias a su configuración de ignorar archivos no necesarios.
  • Postman: Permite enviar solicitudes HTTP para comprobar que la lógica de actualización de likes es correcta y eficiente.

Pruebas y validaciones

Realizamos pruebas simulando el envío de múltiples "likes" para detectar cómo se comporta la base de datos bajo carga y verificar la resiliencia del sistema.

¿Cuáles son los beneficios de esta implementación?

Esta aplicación de likes asíncrona y segura proporciona varios beneficios:

  • Desacoplamiento: El uso de colas para gestionar likes desacopla la suma de la carga directa en la base de datos.
  • Optimización de recursos: La aplicación no colapsa ante grandes volúmenes de tráfico y aprovecha la eficiencia de DynamoDB.
  • Mejores prácticas de desarrollo: Obtener una aplicación mejor diseñada y que sigue patrones modernos y seguros.

Con esta lógica y tecnología, podrás ofrecer una experiencia fluida y eficiente para los usuarios mientras mantienes tu sistema seguro y estable. Continúa explorando y mejorando tus conocimientos de programación en AWS y desarrollo de aplicaciones escalables y confiables. ¡Buen aprendizaje!