Ir al contenido
HexaTransfer
Volver al blog
Analisis tecnicos

Serverless Transferencia de archivos: Arquitectura y Diseño

Construye sistemas serverless de transferencia de archivos con AWS Lambda, Azure Functions o Google Cloud Functions: diseños rentables y de auto-escalado.

Un sistema serverless de transferencia de archivos permite gestionar un servicio en producción sin administrar servidores, pagando solo por el volumen de peticiones y el tiempo de ejecución de las funciones. AWS Lambda, Azure Functions y Google Cloud Functions gestionan el cómputo; S3, Blob Storage o GCS gestionan los archivos; y las URLs prefirmadas permiten a los clientes subir directamente al almacenamiento, de modo que Lambda nunca toca los bytes. Para servicios de transferencia de tráfico bajo a medio, la factura mensual puede quedar por debajo de 50 € mientras escala automáticamente para gestionar los picos. Aquí tienes un diseño limpio que evita las trampas serverless más comunes.

Por qué serverless encaja bien con la transferencia de archivos

La transferencia de archivos es por ráfagas. Un usuario inicia una subida, ocurre un pico de peticiones durante unos minutos y luego silencio. Mantener una flota 24/7 de VMs para ese patrón desperdicia dinero. Lambda se activa bajo demanda, cobra por cada 100 ms de ejecución y escala a miles de invocaciones concurrentes sin configuración manual. Crucialmente, los bytes del archivo van directamente del cliente a S3 mediante URL prefirmada, por lo que Lambda no gestiona la carga de 10 GB, solo gestiona los metadatos y las comprobaciones de autenticación. Esto mantiene los tiempos de ejecución de Lambda por debajo de 500 ms y los costes son negligibles incluso con millones de transferencias al mes.

Componentes principales y responsabilidades

Una arquitectura serverless mínima: API Gateway (o CloudFront Functions para autenticación en el edge) acepta peticiones HTTPS; Lambda Functions para la inicialización de subida, CRUD de metadatos y autorización de descarga; S3 como almacén real de archivos; DynamoDB o RDS Aurora Serverless v2 para los metadatos de transferencia; SES o SNS para el envío de emails de notificación; EventBridge para el enrutamiento asíncrono de eventos. Nueve servicios, cero servidores. Terraform o AWS CDK aprovisiona el stack. El resultado es un servicio de transferencia con auto-escalado, alta disponibilidad entre zonas de disponibilidad y sin parches de sistema operativo que gestionar.

Subidas directas a S3 mediante URLs prefirmadas

El patrón que hace que serverless sea económico: el cliente llama a Lambda, Lambda genera una URL POST o PUT prefirmada válida durante 15 minutos, Lambda devuelve la URL, el cliente sube directamente a S3. Lambda se ejecutó durante ~100 ms y cobró quizás 0,0000002 €. La subida de 10 GB pasa por el ancho de banda de S3, facturado a tarifas estándar independientemente de si Lambda está involucrado. Para las subidas multiparte, Lambda genera una URL prefirmada para cada parte, el cliente sube las partes en paralelo y un Lambda final completa la subida mediante CompleteMultipartUpload. La arquitectura es esencialmente elegible para el nivel gratuito en servicios pequeños.

Procesamiento posterior basado en eventos

Cuando S3 completa la subida de un objeto, lanza un evento. Las notificaciones de eventos de S3 o EventBridge enrutan a funciones Lambda para el procesamiento posterior: ejecutar ClamAV mediante una imagen de contenedor Lambda (la actualización de la BD de AV es la parte difícil; los contenedores precompilados ayudan), generar miniaturas para imágenes y PDFs mediante ImageMagick o Ghostscript en capas Lambda, actualizar el estado de la transferencia en DynamoDB, enviar emails de notificación mediante SES. Cada paso se ejecuta solo cuando es necesario, no en un bucle de polling. Las colas de mensajes muertos capturan los fallos para que no desaparezcan silenciosamente.

Arranques en frío y cómo mitigarlos

Los arranques en frío de Lambda son la queja persistente. Un Lambda en Node.js típicamente arranca en frío en 200–500 ms; una función Python de forma similar; un Lambda en Java o .NET puede tardar 1–3 segundos. Para un servicio de transferencia, la inicialización de subida visible al usuario debe evitar los arranques en frío. La Concurrencia Aprovisionada mantiene un pool caliente a 0,0000041667 € por GB-segundo, normalmente barato. Escribir las funciones de ruta caliente en Go o Rust con dependencias mínimas arranca en frío habitualmente en menos de 100 ms. Para los Lambdas en segundo plano (análisis post-subida, notificaciones), los arranques en frío suelen ser irrelevantes porque el trabajo es asíncrono.

Opciones de base de datos bajo la escala serverless

Aurora Serverless v2 escala el cómputo de 0,5 a 128 ACU bajo demanda, lo que lo hace rentable para cargas de trabajo por ráfagas. Los precios bajo demanda de DynamoDB cobran por petición, ideal cuando el tráfico es impredecible. RDS Proxy ayuda con el agotamiento de conexiones Lambda-a-RDS, ya que cada instancia Lambda que abre una conexión Postgres puede saturar una instancia RDS pequeña durante picos de tráfico. Para metadatos simples de transferencia, DynamoDB suele ser más sencillo: un diseño de tabla única con clave de partición transfer_id gestiona todo el CRUD en latencias de un solo dígito de milisegundos. El coste es una fracción de céntimo por 1.000 lecturas.

API Gateway, HTTP API y opciones de edge

AWS ofrece tres puertas de entrada de API. REST API Gateway es rico en funcionalidades pero caro a 3,50 € por millón de peticiones. HTTP API es más nuevo, más barato a 1,00 € por millón, y válido para la mayoría de las APIs respaldadas por Lambda. CloudFront Functions y Lambda@Edge se ejecutan en el edge para lógica de autenticación o redirección de latencia ultra-baja. Para un servicio de transferencia de archivos, HTTP API en la región más cercana al usuario más CloudFront para la caché de assets equilibra coste y rendimiento. Azure API Management y el API Gateway de Google ofrecen opciones análogas a precios similares.

Patrones de autenticación

Los tokens JWT emitidos por Cognito, Auth0 o un autorizador Lambda personalizado validan en cada petición. API Gateway soporta autorizadores JWT de forma nativa, validando tokens antes de que se ejecute Lambda, de modo que las peticiones inválidas no incurren en costes de Lambda. Para el compartir anónimo de archivos (el modelo de HexaTransfer), un token aleatorio de 256 bits incrustado en el fragmento de URL sirve tanto de identificador como de clave de descifrado; Lambda solo valida el identificador mientras la clave permanece en el lado del cliente. La limitación de tasa mediante planes de uso de API Gateway previene el abuso, con 1.000 peticiones por segundo típicas para los niveles gratuitos.

Estructura de costes y sorpresas de escalado

La economía serverless invierte el panorama tradicional. El tráfico bajo es esencialmente gratuito; el tráfico alto puede sorprender. Con 10 millones de transferencias mensuales, los costes típicos son: invocaciones Lambda 2–20 €, API Gateway 10–35 €, DynamoDB 20–100 €, almacenamiento S3 varía enormemente con la retención, el egreso de S3 a menudo es la línea más importante a menos que una CDN preceda las descargas. Ten cuidado con los bucles: un bug que cause que Lambda reintente infinitamente en la limitación de DynamoDB puede acumular 500 € en una hora. Configura alarmas de facturación de CloudWatch y límites de concurrencia en cada Lambda para limitar el radio de explosión.

Supervisión y depuración de sistemas serverless

CloudWatch Logs captura cada invocación de Lambda; el registro estructurado en JSON con IDs de correlación facilita la búsqueda. X-Ray rastrea el camino Lambda-a-DynamoDB-a-S3 con tiempos. Lambda Insights proporciona métricas de memoria y CPU por función. Las herramientas de terceros como Lumigo, Thundra y Dashbird se especializan en la observabilidad serverless. Métricas clave a rastrear: latencia p99 por función, tasa de errores, tasa de limitación y porcentaje de arranques en frío. El modelo de despliegue serverless recompensa las funciones pequeñas de propósito único con observabilidad estrecha sobre los manejadores monolíticos grandes.

Cuándo serverless deja de ser la elección correcta

Si tu volumen de transferencia es consistentemente alto (millones de subidas concurrentes en curso, saturación 24/7), una flota dedicada de EC2 o Fargate puede ser más barata. Si necesitas conexiones de larga duración (WebSocket con sesiones de minutos), el máximo de 15 minutos de ejecución de Lambda y los precios por invocación se vuelven incómodos. Si tu cumplimiento normativo requiere un despliegue con air gap, serverless no es viable. HexaTransfer usa un híbrido de servicios serverless y basados en contenedores para mantener la arquitectura simple y la factura predecible, priorizando la corrección y la fiabilidad sobre las hazañas de escalado exóticas.

Pruébalo en https://hexatransfer.com — gratuito, sin cuenta, hasta 10 GB.

Envía archivos grandes de forma segura con cifrado de extremo a extremo

Transfiere archivos de hasta 10 GB gratis con cifrado de extremo a extremo. Sin necesidad de cuenta. Tus archivos se cifran en tu navegador antes de subirlos: nadie más puede leerlos.

Enviar un archivo