-
-
-
-
URL copied!
Autor: Juan Alfredo Rella
Introducción a Serverless
El término "Serverless" produce algún grado de confusión debido a que en la implementación y puesta en marcha de toda aplicación se complementan hardware de servidor y procesos ejecutándose en algún lugar. La diferencia en comparación con los enfoques normales es que la organización que crea y da soporte a una aplicación "Serverless" no se ocupa de ese hardware o esos procesos.
Una empresa externa se encarga del duro trabajo de aprovisionar, administrar y escalar servidores. Al implementar una arquitectura Serverless, no se administra ni aprovisiona nada.
La arquitectura serverless a menudo incorpora dos componentes:
- Function as a Service (FaaS)
- Backend as a Service (BaaS)
Function as a Service
Functions-as-a-Service (FaaS) es un modelo relativamente nuevo de computación en la nube. El modelo se basa en tecnologías y arquitecturas informáticas sin servidor que permiten a los desarrolladores de software implementar fácilmente aplicaciones en la nube sin tener que administrar servidores.
Backend as a Service
Backend-as-a-Service (BaaS) es un modelo de servicio en la nube en el que los desarrolladores subcontratan todos los aspectos detrás de escena de una aplicación web o móvil para que solo tengan que escribir y mantener la interfaz. Los proveedores de BaaS proporcionan software prescrito para actividades que tienen lugar en servidores, como autenticación de usuarios, administración de bases de datos, actualización remota y notificaciones push (para aplicaciones móviles), así como almacenamiento y alojamiento en la nube.
¿Qué es una función?
Una función es una tarea u operación dentro de una aplicación que puede escribirse como un fragmento de código y ejecutarse de forma independiente.
¿Qué son las funciones Lambda?
Las funciones Lambda son pequeñas operaciones del negocio estructuradas en forma de funciones que son disparadas por eventos (event driven). Estas funciones efímeras y altamente escalables pueden ser desarrolladas en varios lenguajes como Python, Javascript, Java, Go, etc.
Se pueden utilizar especialmente para:
- Procesamiento de datos.
- Procesamiento de archivos en tiempo real.
- Extracción, transformación y carga.
- Back-ends:
- IoT.
- Aplicaciones móviles.
- Aplicaciones web.
- Integración de aplicaciones (APIs).
Beneficios
- No es necesario administrar servidores
- El escalamiento es flexible
- Alta disponibilidad
- No se paga por capacidad latente
Limitaciones
- Los entornos de programación (lenguajes, librerías, etc.) están límitados por el proveedor
- Son servicios sin estado, cualquier operación que requiera “recordar” entre ejecuciones ha de apoyarse en otros servicios
- Al cobrarse por tiempo de ejecución, y en algunos proveedores limitarse, se penaliza un consumo prologando en el tiempo.
Implementación de funciones en AWS Lambda
AWS Lambda es un servicio informático donde se puede cargar el código, crear funciones independientes y vincularlas a eventos específicos en la infraestructura de la nube.
AWS administra toda la infraestructura en la que se ejecutan nuestras funciones y realiza toda la administración de los recursos informáticos, incluido el mantenimiento del servidor y del sistema operativo, el aprovisionamiento de capacidad y el escalado automático, la supervisión de código y el registro. Cuando la función tiene una gran demanda, AWS aumenta automáticamente el recuento de máquinas subyacentes para garantizar que la función funcione con el mismo rendimiento.
Es posible escribir funciones en AWS Lambda en uno de los lenguajes admitidos de forma nativa.
Algunos lenguajes de programación son ampliamente compatibles con todas las principales plataformas serverless y también se adaptan bien al paradigma impulsado por eventos de la arquitectura serverless.
Los más usados son Node.js y Python; también hay soporte para Java y .NET en todos estos entornos en este momento.
Por otro lado existe un patrón común en este tipo de arquitectura que incluye los siguientes conceptos básicos:
- Handler: Handler es un método que el tiempo de ejecución de Lambda llama cada vez que se invoca su función.
- Contexto: también se pasa un objeto de contexto especial al método del controlador. Con este objeto, puede acceder a algunos valores de tiempo de ejecución de AWS Lambda, como el ID de solicitud, el tiempo de ejecución restante antes de que AWS Lambda finalice su función de Lambda, etc.
- Evento: los eventos son cargas útiles JSON que el tiempo de ejecución de Lambda inyecta en su función de Lambda durante la ejecución.
La estructura del documento de evento es diferente para cada tipo de evento y contiene datos sobre el recurso o solicitud que activó la función. Los tiempos de ejecución de Lambda convierten el evento en un objeto y lo pasan a su función.
- Registro: dentro de su función Lambda, puede iniciar sesión en CloudWatch. Amazon CloudWatch es un servicio de monitorización y observación creado para ingenieros de DevOps, desarrolladores y administradores de TI. CloudWatch recopila datos de monitorización y operaciones en formato de registros, métricas y eventos, y permite su visualización mediante paneles automatizados para obtener una vista unificada de los recursos, las aplicaciones y los servicios de AWS que se ejecutan en servidores locales y de AWS. Estas métricas y registros se pueden correlacionar para comprender mejor el estado y el rendimiento de los recursos o llevar un trace de la ejecución de las funciones y descubrir el origen de posibles errores.
Las funciones de AWS Lambda se pueden invocar manualmente o respondiendo a diferentes eventos.
Después de implementar una función serverless, la función en sí debe tener una forma de ser invocada. Hay tres formas principales de invocar una de estas funciones:
- A través de un endpoint HTTP
- A través de aws-sdk (muchas veces desde otra función)
- Desde un evento en la nube (S3 al cargar la imagen, cuando se crea un elemento en su base de datos, etc.)
Se invoca la función interactuando con ella a través de un endpoint HTTP.
Layers
Muchos proyectos comparten bibliotecas comunes en torno a diferentes funciones.
La gestión de dependencias es importante en cualquier proyecto, ya que necesita tener dependencias consistentes en todas sus funciones.
Una Layer Lambda es un archivo ZIP que contiene las bibliotecas. Las capas son muy útiles si tiene varias funciones de Lambda que utilizan las mismas dependencias, ya que las dependencias se importarán a la función de Lambda en tiempo de ejecución.
Infrastructure as code
Un punto muy importante en la implementación de estas funciones es la posibilidad de manejar configuraciones de ambientes, versionado de código, deploy y pruebas de ejecución locales. Para estos fines existen herramientas como SAM y Terraform que permiten gestionar estas operaciones de una forma más prolija y eficiente.
Resumen
Como resumen aplica correctamente lo especificado en la página de AWS:
"AWS Lambda le permite ejecutar código sin aprovisionar ni administrar servidores. Paga solo por el tiempo de cómputo que consume.
Con Lambda, puede ejecutar código para casi cualquier tipo de aplicación o servicio backend sin tener que realizar tareas de administración. Solo tiene que cargar el código y Lambda se encargará de todo lo necesario para ejecutar y escalar el código con alta disponibilidad"
Links de interés
https://martinfowler.com/articles/serverless.html
https://docs.aws.amazon.com/es_es/lambda/?id=docs_gateway
https://aws.amazon.com/es/serverless/developer-tools/
https://read.acloud.guru/serverless-functions-in-depth-507439b4be88
Top Insights
Escribiendo User Stories en Agile
AutomotiveCommunicationsConsumer and RetailFinancial ServicesHealthcareManufacturing and IndustrialMediaTechnologyWhat is TM Forum Frameworx and how to...
UncategorizedAutomotiveCommunicationsConsumer and RetailFinancial ServicesHealthcareManufacturing and IndustrialMediaTechnologyImpact Mapping en Metodologías ágiles
AutomotiveCommunicationsConsumer and RetailFinancial ServicesHealthcareManufacturing and IndustrialMediaTechnologyTop Authors
Blog Categories
Trabajemos juntos
Contenido Relacionado
5 razones por las que tu proyecto necesita un Business Analyst
Contar con un Business Analyst (BA) en tu equipo no solo te ayudará a delegar tareas más operativas, sino que también potenciará al equipo de desarrollo y contribuirá significativamente al éxito de tu proyecto de desarrollo de software.
Conocer más
7 claves para ser un miembro de un equipo efectivo
Un gran desarrollador necesita trabajar tanto en sus habilidades técnicas como en sus habilidades blandas, ya que estas forman la base para cualquier profesional que quiera ser una pieza efectiva e inspirar un cambio positivo en su equipo y organización. He recopilado una serie de recomendaciones que considero básicas y de vital importancia para trabajar … Continue reading Serverless: todo lo que necesitás saber →
Conocer más
Share this page:
-
-
-
-
URL copied!