¿Qué es la arquitectura sin servidor?
La arquitectura sin servidor es un modelo de computación en nube en el que los desarrolladores crean y ejecutan aplicaciones sin gestionar los servidores tradicionales. Los servidores siguen existiendo, pero están en la nube, donde los proveedores de la nube gestionan automáticamente la infraestructura, el escalado y la asignación de recursos.
En las aplicaciones sin servidor, los desarrolladores suelen escribir código como funciones aisladas que se ejecutan en respuesta a eventos o desencadenantes, y los proveedores de la nube cobran solo por los recursos informáticos reales utilizados. Este enfoque simplifica el desarrollo de aplicaciones, reduce la sobrecarga operativa y permite una rápida escalabilidad, por lo que es ideal para microservicios y aplicaciones basadas en eventos.
Esta página cubre:
- Cómo funciona la arquitectura sin servidor
- Conceptos clave de la arquitectura sin servidor
- Cuándo utilizar la arquitectura sin servidor
- Ventajas de la arquitectura sin servidor
- Limitaciones de la arquitectura sin servidor
- Herramientas de computación sin servidor
- Conclusión
Cómo funciona la arquitectura sin servidor
La arquitectura sin servidor abstrae la gestión del servidor de los desarrolladores y confía en los proveedores de la nube para gestionar la infraestructura subyacente. Así es como suele funcionar:
1. Creación de funciones: Los desarrolladores escriben código como funciones individuales, y cada función está diseñada para realizar una tarea o servicio específico. La arquitectura sin servidor a veces se denomina función como servicio o función como servicio. FaaS.
2. Despliegue de funciones: Las funciones se empaquetan e implementan en una plataforma sin servidor proporcionada por un proveedor de servicios en la nube. Las plataformas sin servidor más comunes son AWS Lambda, Azure Functions y Google Cloud Functions.
3. Activadores de eventos: Las funciones están configuradas para ejecutarse en respuesta a eventos o disparadores específicos. Los eventos pueden incluir peticiones HTTP (por ejemplo, API Gateway), cambios en los datos (por ejemplo, actualizaciones de bases de datos), temporizadores, cargas de archivos o cualquier otra cosa. El proveedor de la nube gestiona las fuentes de eventos e invoca automáticamente las funciones asociadas.
4. Autoescalado: A medida que se producen los eventos, la plataforma sin servidor escala automáticamente los recursos subyacentes para adaptarse a la carga de trabajo. Si tu función experimenta un pico repentino de solicitudes, el proveedor de la nube proporcionará más recursos.
5. Ejecución: Cuando un evento activa una función, la plataforma sin servidor inicializa un contenedor o entorno de ejecución para esa función. El código de la función se ejecuta y puede acceder a los recursos o datos necesarios. Una vez que la función completa su tarea, el contenedor puede permanecer caliente durante un breve periodo de tiempo, lo que permite que las solicitudes posteriores se ejecuten con mayor rapidez.
6. Facturación: La facturación se basa en el tiempo de ejecución real y en los recursos utilizados por las funciones. Se cobra por ejecución y por los recursos informáticos, como CPU y memoria, que se asignan durante la ejecución.
7. Apátridas: Las funciones sin servidor no suelen tener estado, lo que significa que no retienen información entre invocaciones. Cualquier estado o dato necesario debe almacenarse externamente, a menudo en una base de datos o servicio de almacenamiento.
8. Registros y seguimiento: Las plataformas sin servidor suelen proporcionar herramientas de registro y supervisión integradas, lo que permite a los desarrolladores realizar un seguimiento del rendimiento y solucionar problemas en sus funciones.
Conceptos clave de la arquitectura sin servidor
Dado que el desarrollo sin servidor es una alternativa al desarrollo tradicional, debe familiarizarse con los siguientes términos y conceptos para comprender claramente cómo diseñar, implementar y administrar aplicaciones sin servidor:
Invocación: Evento que desencadena la ejecución de una función sin servidor. Algunos ejemplos son una solicitud HTTP, una actualización de la base de datos o un temporizador programado.
Duración: La cantidad de tiempo que una función sin servidor tarda en ejecutarse, que es un factor en el cálculo del coste de ejecución.
Arranque en frío: La ejecución inicial de una función sin servidor, en la que el proveedor de la nube aprovisiona recursos y configura el entorno de ejecución. Los arranques en frío introducen latencia adicional en comparación con los arranques en caliente.
Arranque en caliente: Ejecuciones posteriores de una función sin servidor cuando el entorno de ejecución ya está preparado, lo que da lugar a tiempos de respuesta más rápidos en comparación con los arranques en frío.
Límite de concurrencia: El número máximo de ejecuciones simultáneas de funciones permitidas por la plataforma sin servidor. Este límite puede afectar a la capacidad de gestionar solicitudes o eventos simultáneos.
Tiempo de espera: La duración máxima permitida para la ejecución de una función sin servidor. Si una función supera este límite, finaliza de forma forzada y es posible que no se devuelva el resultado.
Fuente del evento: El origen de un evento que activa una función sin servidor. Algunos ejemplos de orígenes de eventos son los buckets de Amazon S3, las puertas de enlace de API, las colas de mensajes y las actualizaciones de bases de datos.
Apátridas: Las funciones sin servidor no suelen tener estado, lo que significa que no retienen datos entre invocaciones. Cualquier estado necesario debe almacenarse externamente en bases de datos o servicios de almacenamiento.
Asignación de recursos: La especificación de recursos informáticos como CPU o memoria para una función sin servidor. Los desarrolladores suelen elegir estos recursos al definir la función.
Autoescalado: El ajuste automático de los recursos sin servidor por parte del proveedor de la nube para adaptarse a cargas de trabajo variables y garantizar un rendimiento óptimo.
Base de datos sin servidor: Las bases de datos sin servidor son bases de datos de escalado elástico que no exponen la infraestructura en la que operan. Couchbase Capella™ DBaaS es un ejemplo de base de datos sin servidor totalmente gestionada.
Cuándo utilizar la arquitectura sin servidor
Aunque la arquitectura sin servidor es versátil, no es la mejor opción para todos los casos de uso: las aplicaciones con tareas de larga duración, requisitos de cálculo elevados o cargas de trabajo constantes suelen beneficiarse más de las arquitecturas tradicionales basadas en servidor. Asegúrese de tener en cuenta los requisitos específicos y los puntos fuertes exclusivos de la arquitectura sin servidor a la hora de decidir si es la opción adecuada para su aplicación.
Casos de uso de la arquitectura sin servidor
Algunos de los casos de uso más comunes y más adecuados para la arquitectura sin servidor incluyen:
Aplicaciones web y móviles: Gestione backends de aplicaciones web y móviles, sirva contenidos, procese solicitudes de usuarios y gestione la autenticación de usuarios.
APIs: Autoescala tus API RESTful y GraphQL e intégralas fácilmente con otros servicios.
IoT: Gestione eficazmente el procesamiento y el análisis de datos procedentes de dispositivos IoT que activan eventos con datos de sensores.
Tratamiento de datos en tiempo real: Procese flujos de datos en tiempo real, como análisis de secuencias de clics, procesamiento de registros y análisis basados en eventos.
Procesamiento por lotes: Ejecute trabajos por lotes periódicos o a petición, como ETL (extracción, transformación y carga) de datos, generación de informes y limpieza de datos.
Tareas de almacenamiento de archivos y datos: Interactúe con los servicios de almacenamiento en la nube para gestionar la carga y descarga de archivos y la manipulación de datos.
Autenticación y autorización de usuarios: Los servicios de gestión de identidades y accesos (IAM) para la autenticación y autorización de usuarios son una buena opción para las funciones sin servidor.
Servicios de notificación: Envíe notificaciones y alertas como correo electrónico, SMS o notificaciones push en respuesta a eventos o desencadenantes específicos.
Chatbots y asistentes virtuales: Construya interfaces conversacionales en las que las funciones procesen peticiones en lenguaje natural y generen respuestas.
Tratamiento de datos e imágenes: Realice tareas como el cambio de tamaño de las imágenes, la conversión de formatos y la transformación de datos que requieren una interacción mínima del usuario.
Tareas programadas: Automatice tareas periódicas como las copias de seguridad de datos, la generación de informes y el mantenimiento de bases de datos.
Microservicios: Cree y gestione microservicios individuales dentro de una aplicación más amplia, lo que permite escalar fácilmente y realizar despliegues independientes.
Servicios de seguridad y conformidad: Implantar funciones relacionadas con la seguridad, como la detección de intrusiones, la supervisión y la auditoría de conformidad.
Sin servidor frente a contenedores
A primera vista, la arquitectura sin servidor a veces se confunde con la arquitectura de contenedores o con la arquitectura de microservicios porque comparte ciertas similitudes con cada una de ellas. En realidad, serverless es bastante distinta de ambas, y vamos a explicar en qué se diferencian.
Qué contenedores y serverless es que ambos permiten a los desarrolladores desplegar código de aplicación abstrayéndose del entorno host. Sin embargo, una de las principales diferencias es que la ausencia de servidor abstrae por completo la gestión del servidor, mientras que los contenedores permiten a los desarrolladores gestionar sus propios entornos de servidor con un mayor control sobre la infraestructura.
Como forma ligera de virtualización, los contenedores empaquetan aplicaciones y sus dependencias en entornos aislados y coherentes que se ejecutan como instancias independientes en un sistema operativo compartido. Los contenedores permiten garantizar que las aplicaciones funcionen de forma coherente en distintos entornos, desde el desarrollo hasta la producción, y ofrecen una forma estandarizada de empaquetar y distribuir software. Los contenedores suelen ser de larga duración y pueden incluir varios procesos dentro de un mismo contenedor.
En resumen, la computación sin servidor se abstrae de la gestión del servidor y es ideal para tareas impulsadas por eventos y de corta duración, mientras que los contenedores proporcionan más control sobre el entorno del servidor y son más adecuados para procesos de larga duración y cargas de trabajo consistentes. La elección entre uno y otro depende de los requisitos específicos de su aplicación y de su nivel de control sobre la infraestructura subyacente. En algunos casos, se utiliza una combinación de ambas tecnologías dentro de una misma aplicación para distintos componentes.
Sin servidor frente a microservicios
Microservicios son un patrón de arquitectura de software que estructura una aplicación como una colección de pequeños servicios desplegables de forma independiente que se comunican a través de API y trabajan juntos para proporcionar una funcionalidad compleja y modular. La confusión entre los microservicios y la arquitectura sin servidor a menudo surge debido a su énfasis compartido en la modularidad y la escalabilidad. Lo que difumina aún más la línea es que a menudo se utilizan juntos, con funciones sin servidor que actúan como microservicios dentro de una aplicación más grande basada en microservicios.
A pesar de sus similitudes, serverless y microservicios tienen características únicas en las siguientes áreas que los diferencian:
Gestión de infraestructuras
- Microservicios - los desarrolladores conservan el control sobre la orquestación de servidores y contenedores.
- Sin servidor - la gestión del servidor se abstrae por completo, y los desarrolladores no tienen que ocuparse de la infraestructura subyacente.
Modelo de ejecución
- Microservicios - se ejecutan continuamente en instancias de servidor dedicadas.
- Sin servidor - se ejecutan en respuesta a eventos o disparadores. Esta distinción puede dar lugar a una diferencia en los tiempos de respuesta, ya que las aplicaciones sin servidor pueden experimentar arranques en frío.
Modelo de costes
- Microservicios - le obligan a aprovisionar y mantener recursos de servidor. Esto puede generar costes continuos incluso en periodos de poco uso.
- Sin servidor - sigue un modelo de pago por uso basado en la ejecución real de las funciones. Esto puede resultar más rentable para cargas de trabajo esporádicas.
Modularidad
- Microservicios - una aplicación se divide en pequeños servicios independientes.
- Sin servidor - Los desarrolladores escriben el código como unidades individuales de funcionalidad.
Escalabilidad
- Microservicios - permiten el escalado independiente de cada servicio.
- Sin servidor - escala automáticamente las funciones individuales.
Ventajas de la arquitectura sin servidor
La arquitectura sin servidor ofrece una amplia gama de ventajas que la convierten en una opción atractiva para muchas aplicaciones y casos de uso. Las ventajas más convincentes son:
Escala automática: Las plataformas de arquitectura sin servidor amplían o reducen automáticamente los recursos en función de la carga de trabajo entrante. Esto garantiza que su aplicación pueda gestionar distintos niveles de tráfico, proporcionando alta disponibilidad y rendimiento sin intervención manual.
Rentabilidad: Con la tecnología sin servidor, sólo se paga por los recursos informáticos reales utilizados durante la ejecución de la función. No hay costes asociados al tiempo de inactividad, por lo que resulta rentable, especialmente para cargas de trabajo con tráfico impredecible o esporádico.
Reducción de los gastos operativos: Serverless abstrae las tareas de gestión del servidor, lo que permite a los desarrolladores centrarse en el código en lugar de en el mantenimiento de la infraestructura. Esto reduce la necesidad de esfuerzos de DevOps y simplifica el despliegue y el escalado.
Desarrollo más rápido: La tecnología sin servidor acelera el proceso de desarrollo al eliminar la necesidad de gestionar servidores e infraestructuras. Los desarrolladores pueden iterar y desplegar código con rapidez, lo que agiliza la comercialización de las aplicaciones.
Resiliencia: Las funciones sin servidor suelen ser apátridas, promoviendo un diseño que depende de servicios de almacenamiento externo o bases de datos para la persistencia de datos. Esto puede dar lugar a aplicaciones más resistentes y tolerantes a fallos.
Registro y supervisión integrados: Las plataformas sin servidor a menudo proporcionan herramientas integradas para la supervisión y el registro, lo que permite a los desarrolladores realizar un seguimiento del rendimiento, solucionar problemas y obtener información sobre el comportamiento de la aplicación.
Reducción de la dependencia del proveedor: Muchas funciones pueden diseñarse para ser relativamente agnósticas con respecto al proveedor, lo que facilita su migración o la integración de servicios de distintos proveedores de la nube. No siempre es así, como verás en la siguiente sección sobre las limitaciones de las funciones sin servidor.
Alta disponibilidad: Las plataformas sin servidor están diseñadas para tener una alta disponibilidad, con mecanismos de redundancia y conmutación por error incorporados. Esto ayuda a garantizar que su aplicación siga siendo accesible y receptiva incluso ante fallos.
Eficiencia energética y de recursos: El escalado automático y la gestión de recursos de las plataformas sin servidor pueden conducir a una mejora de la eficiencia energética y la utilización de recursos, reduciendo el impacto medioambiental.
Limitaciones de la arquitectura sin servidor
Aunque la arquitectura sin servidor ofrece muchas ventajas, también tiene sus limitaciones. Ciertas características de serverless pueden manifestarse como beneficios o desafíos. Al evaluar serverless para una aplicación específica, tenga en cuenta sus requisitos o limitaciones relacionados con lo siguiente:
Arranca en frío: Las funciones sin servidor pueden experimentar un retraso cuando la función se invoca por primera vez porque el proveedor de la nube necesita inicializar un nuevo entorno de ejecución. Esta latencia puede ser problemática para las aplicaciones que requieren tiempos de respuesta rápidos y constantes.
Limitación de recursos: Las plataformas sin servidor imponen restricciones de recursos, como límites de memoria y tiempo de ejecución. Estas restricciones pueden ser limitantes para tareas de cálculo intensivo o aplicaciones que requieren procesos de larga duración.
Apátridas: Las funciones sin servidor suelen ser apátridas, lo que significa que no retienen datos entre invocaciones. Aunque esto puede ayudar a mejorar la resiliencia (como se ha explicado anteriormente), el uso de bases de datos externas o servicios de almacenamiento para la persistencia de datos puede añadir complejidad a algunas aplicaciones.
Bloqueo del proveedor: Aunque muchas funciones pueden diseñarse para que sean relativamente independientes del proveedor, su aplicación puede tener algunas configuraciones e integraciones específicas de la plataforma que dificulten el traslado a un proveedor de nube diferente.
Depuración compleja: La depuración y la resolución de problemas de las aplicaciones sin servidor pueden ser más complicadas en una arquitectura sin servidor, ya que la naturaleza distribuida de las funciones y la falta de acceso directo al servidor pueden dificultar la identificación y resolución de problemas.
Pruebas locales limitadas: Desarrollar y probar funciones sin servidor a nivel local puede ser un reto porque las pruebas locales pueden no replicar completamente el entorno de ejecución en la nube. Los desarrolladores a menudo necesitan desplegar funciones en la plataforma sin servidor para realizar pruebas exhaustivas.
Herramientas de computación sin servidor
Existen numerosas plataformas y herramientas de computación sin servidor que permiten a los desarrolladores crear, desplegar y gestionar aplicaciones sin servidor utilizando sus lenguajes de codificación y proveedores de servicios en la nube favoritos. Estas son algunas de las más populares:
Plataformas
AWS Lambda de Amazon admite varios lenguajes de programación y se integra a la perfección con otros servicios de AWS. AWS también proporciona una puerta de enlace de API para crear API RESTful y activar funciones de Lambda.
Funciones Azure de Microsoft es una oferta sin servidor dentro del ecosistema de la nube Azure. Es compatible con varios idiomas y ofrece integración con los servicios de Azure, lo que la convierte en una opción sólida para las aplicaciones basadas en Windows.
Funciones en la nube de Google es compatible con varios lenguajes de programación y se integra bien con otros servicios de Google Cloud, por lo que resulta adecuado para crear aplicaciones dentro del ecosistema de Google Cloud.
Funciones de IBM Cloud se basa en el marco Apache OpenWhisk y le permite integrarse con los servicios de IBM Cloud utilizando varios lenguajes.
Alibaba Cloud Function Compute permite a los desarrolladores crear aplicaciones en el ecosistema de Alibaba Cloud e integrarlas con otros servicios de Alibaba Cloud utilizando varios idiomas.
Herramientas
Netlify es una plataforma más conocida por alojar sitios web estáticos, pero también ofrece funciones sin servidor para crear servicios backend, API y flujos de trabajo.
OpenFaaS es un marco sin servidor de código abierto para funciones basadas en contenedores. Permite crear y ejecutar funciones sin servidor mediante contenedores Docker.
Kubeless es un marco sin servidor nativo de Kubernetes de código abierto que permite desplegar funciones como pods nativos de Kubernetes.
Fisión es otro marco sin servidor nativo de Kubernetes de código abierto que admite varios idiomas y está diseñado para facilitar la implementación en clústeres de Kubernetes.
Conclusión
La arquitectura sin servidor es popular para aplicaciones web y móviles, IoT, procesamiento de datos en tiempo real y otros casos de uso comunes porque permite a los desarrolladores centrarse en escribir código en lugar de gestionar servidores. La responsabilidad de la gestión se transfiere a proveedores en la nube como AWS Lambda, Azure Functions o Google Cloud Functions para que puedan gestionar la infraestructura subyacente y escalar los recursos automáticamente para adaptarse a los cambios en la carga de trabajo. Sin embargo, Serverless no es ideal para todos los casos de uso, y ciertas cargas de trabajo o tareas de larga duración pueden ser más adecuadas para los enfoques tradicionales basados en servidores.
Para obtener más información sobre la arquitectura sin servidor y las tecnologías relacionadas, consulte estos recursos:
Arquitectura sin servidor con computación en nube
Predicciones Couchbase 2023 - Edge Computing, Serverless y más
Capella App Services (BaaS)
Visite nuestro Centro de conceptos para conocer otros temas relacionados con las bases de datos.