¿Qué es una arquitectura sin servidor?

La arquitectura sin servidor ejecuta código personalizado en contenedores efímeros totalmente gestionados por terceros. El código personalizado suele ser una pequeña parte de una aplicación completa. También se denomina función. Esto da otro nombre a la arquitectura sin servidor como Función como servicio (FaaS). El contenedor es efímero porque sólo puede durar una invocación. El contenedor puede reutilizarse, pero no es algo en lo que se pueda confiar. Como desarrollador, subes el código a la plataforma FaaS, y el servicio se encarga de toda la capacidad, escalado, parcheado y administración de la infraestructura para ejecutar tu código.

Una aplicación construida utilizando Serverless Architecture sigue el enfoque dirigido por eventos. Por ejemplo, se produce una actividad en la aplicación, como un clic. Esto es muy diferente de una arquitectura clásica donde el código de la aplicación se despliega típicamente en un servidor de aplicaciones como Tomcat o WildFly. Escalar su aplicación significa iniciar instancias adicionales del servidor de aplicaciones o hilar contenedores adicionales con el servidor de aplicaciones empaquetado. Es necesario actualizar el equilibrador de carga con las nuevas direcciones IP. Los sistemas operativos necesitan parches, actualizaciones y mantenimiento.

Arquitecturas sin servidor explicar la diferencia entre el modelo de programación clásico y esta nueva arquitectura sin servidor. Con una plataforma FaaS tu aplicación se divide en múltiples funciones. Cada función se despliega en FaaS. El servicio pone en marcha instancias de computación adicionales para satisfacer las demandas de escalabilidad de su aplicación. Las plataformas FaaS proporcionan el entorno de ejecución y se encargan de iniciar y desinstalar los contenedores para ejecutar su función.

Leer Arquitecturas sin servidor para más detalles sobre estas imágenes. Una de las grandes ventajas de FaaS es que sólo se cobra por el tiempo de computación, es decir, el tiempo que el código está en ejecución. No se cobra nada cuando el código no se está ejecutando. ¿En qué se diferencian las funciones de las máquinas virtuales y los contenedores?

Tenga en cuenta que se utilizan contenedores Linux en lugar de contenedores Docker como implementación para AWS Lambda.

¿En qué se diferencia FaaS de PaaS?

Como se cita en Arquitecturas sin servidorUna respuesta rápida la ofrece el siguiente tuit:

En otras palabras, la mayoría de las aplicaciones PaaS no están orientadas a subir y bajar aplicaciones enteras para cada solicitud, mientras que las plataformas FaaS hacen exactamente esto. Abstracción del back-end con FaaS explicar la diferencia con las distintas ofertas de *aaS. La imagen del blog se muestra a continuación:
faas

Arquitecturas sin servidor también proporcionan grandes detalles sobre lo que es y lo que no es FaaS. AWS Lambda, Funciones de Google Cloud y Funciones Azure son algunas de las opciones para ejecutar aplicaciones sin servidor. Este blog mostrará cómo escribir su primera función de AWS Lambda.

¿Qué es AWS Lambda?

AWS Lambda es un servicio FaaS de Amazon Web Services. Ejecuta el código en una infraestructura informática de alta disponibilidad 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 monitorización del código y el registro. AWS Lambda le cobra por la duración de la ejecución del código en incrementos de 100 ms. No hay ningún costo asociado al almacenamiento de datos. El almacenamiento de la función de Lambda en AWS no conlleva ningún costo.

El primer millón de solicitudes al mes son gratuitas y a partir de ahí el precio es nominal. Más información en Precios Lambda. También proporciona visibilidad del rendimiento mediante métricas y registros en tiempo real para AWS CloudWatch. Todo lo que tienes que hacer es escribir el código. He aquí una rápida introducción:

Consulte también Novedades de AWS Lambda en AWS ReInvent 2016:

Consulte también Serverless Architectural Patterns and Best Practices de AWS ReInvent 2016:

El código que ejecuta en AWS Lambda se denomina función Lambda. Cargue el código como archivo zip o diséñelo con la función Consola de administración de AWS Lambda. Hay un soporte incorporado para AWS SDK y esto simplifica la capacidad de llamar a otros servicios de AWS. En resumen, Lambda es escalable, sin servidor, computación en la nube. AWS Lambda proporciona varios entornos de ejecución:

  • Node.js - v0.10.36, v4.3.2 (recomendado)
  • Java - Java 8
  • Python - Python 2.7
  • .NET Core - .NET Core 1.0.1 (C#)

Este blog mostrará cómo hacerlo:

  • Construir una aplicación Java que almacene un documento JSON en Couchbase
  • Utilizar Maven para crear un paquete de despliegue para una aplicación Java
  • Crear una función lambda
  • Actualizar la función lambda

El código completo de este blog está disponible en github.com/arun-gupta/serverless/tree/master/aws/hellocouchbase.

Aplicación Java para AWS Lambda

En primer lugar, veamos una aplicación Java que se utilizará para esta función Lambda. Modelo de programación para funciones lambda en Java proporcionan más detalles sobre cómo escribir el código de la función Lambda en Java. Nuestra función Lambda implementará la interfaz predefinida com.amazonaws.services.lambda.runtime.RequestHandler. El código tiene el siguiente aspecto:

handleRequest es donde se implementa el código de la función. Contexto proporciona información útil sobre el entorno de ejecución de Lambda. Parte de la información del contexto se almacena en un documento JSON. Por último, SDK Java de Couchbase API upsert se utiliza para escribir un documento JSON en la instancia de Couchbase identificada. Couchbase en Amazon EC2 proporciona instrucciones completas para instalar Couchbase en AWS EC2. La información sobre el servidor Couchbase se obtiene como:

Esto es una vez más utilizando Couchbase Java API CouchbaseCluster como punto de entrada principal al cluster Couchbase. El sitio COUCHBASE_HOST cuando se crea la función Lambda. En nuestro caso, esto apuntaría a un clúster Couchbase de un solo nodo que se ejecuta en AWS EC2. Recientemente se han introducido variables de entorno en AWS Lambda. Por último, necesitas acceder a este bucket en el servidor:

El nombre del cubo es sin servidor y todos los documentos JSON se almacenan en él. Un simple Aplicación Hola Mundo también puede utilizarse para crear esta función.

Crear paquete de implementación de AWS Lambda

AWS FaaS necesita un paquete de despliegue. Este paquete Lambda puede ser .zip o .jar que contiene todas las dependencias de la función. Nuestra aplicación está empaquetada usando Maven, por lo que usaremos un plugin de Maven para crear un paquete de despliegue. La aplicación tiene pom.xml con el siguiente fragmento de plugin:

Encontrará más información sobre la configuración de Maven en Creación de un paquete de despliegue .jar usando Maven sin ningún IDE. En maven-shade-plugin permite crear un uber-jar que incluye todas las dependencias. El sitio sombra objetivo está vinculado al paquete fase. Así que la paquete mvn generará un único jar de despliegue. Empaquete la aplicación utilizando el comando paquete mvn comando. Esto mostrará la salida:

En target/hello-couchbase-1.0-SNAPSHOT.jar es el jar sombreado que se desplegará en AWS Lambda. Más detalles sobre la creación de un paquete de despliegue en Creación de un paquete de implantación.

Crear función AWS Lambda

Crear una función AWS Lambda con CLI DE AWS. El comando CLI en este caso tiene el siguiente aspecto:

En esta CLI:

  • crear-función crea una función Lambda
  • --nombre de la función proporciona el nombre de la función. El nombre de la función distingue entre mayúsculas y minúsculas.
  • --rol especifica el Nombre de Recurso de Amazon (ARN) de un Función IAM que Lambda asume cuando ejecuta su función para acceder a cualquier otro recurso de AWS. Si ha ejecutado una función Lambda
    mediante la consola de AWS, se creará esta función para usted.
  • --archivo zip apunta al paquete de despliegue creado en el paso anterior. archivob es un protocolo específico de la CLI de AWS para indicar que el contenido cargado es binario.
  • --manejador es la clase Java a la que se llama para iniciar la ejecución de la función
  • --publica solicitar a AWS Lambda que cree la función de Lambda y publique una versión como operación atómica. De lo contrario, es posible que se creen varias versiones y que se publiquen en un momento posterior.

La consola Lambda muestra:

servleress-couchbase-lambda-function

Probar la función AWS Lambda

Pruebe la función de AWS Lambda con la CLI de AWS.

Muestra la salida como:

La salida del comando se almacena en hellocouchbase.out y parece:

Invocar esta función almacena un documento JSON en Couchbase. Los documentos almacenados en Couchbase se pueden ver usando la consola web de Couchbase. El nombre de usuario es Administrador y la contraseña es el id de la instancia EC2. A continuación se muestran todos los buckets de datos de esta instancia de Couchbase:

serverless-couchbase-bucket-overview

Tenga en cuenta que el sin servidor se crea manualmente. Al hacer clic en Documentos se muestran los detalles de los distintos documentos almacenados en el cubo:

serverless-couchbase-bucket-documents

Al hacer clic en cada documento se muestran más detalles sobre el documento JSON:

serverless-couchbase-bucket-document

La función lambda también puede probarse utilizando la consola:

serverless-couchbase-console-test

Actualizar la función AWS Lambda

Si la lógica de la aplicación cambia, es necesario cargar un nuevo paquete de despliegue para la función Lambda. En este caso, paquete mvn creará un paquete de despliegue y aws lambda El comando CLI se utiliza para actualizar el código de función:

Muestra el resultado:

A continuación, se puede volver a invocar la función. Durante la redacción de este blog, esto también se utilizó a menudo para depurar la función. Esto se debe a que las funciones Lambda no tienen ningún estado o caja asociada a ellas. Y por lo tanto no se puede iniciar sesión en una caja para comprobar si la función no se desplegó correctamente. Sí que puedes utilizar las declaraciones de registro de CloudWatch una vez que la función esté funcionando.

Referencias de AWS Lambda

Autor

Publicado por Arun Gupta, Vicepresidente, Defensa del Desarrollador, Couchbase

Arun Gupta es vicepresidente de promoción de desarrolladores en Couchbase. Ha creado y dirigido comunidades de desarrolladores durante más de 10 años en Sun, Oracle y Red Hat. Tiene una gran experiencia en liderar equipos multidisciplinares para desarrollar y ejecutar estrategias, planificar y ejecutar contenidos, campañas de marketing y programas. Anteriormente dirigió equipos de ingeniería en Sun y es miembro fundador del equipo Java EE. Gupta es autor de más de 2.000 entradas de blog sobre tecnología. Tiene una amplia experiencia como conferenciante en más de 40 países sobre innumerables temas y es una JavaOne Rock Star desde hace tres años consecutivos. Gupta también fundó el capítulo Devoxx4Kids en Estados Unidos y sigue promoviendo la educación tecnológica entre los niños. Autor de varios libros sobre tecnología, ávido corredor, trotamundos, campeón de Java, líder de JUG, miembro del Dream Team de NetBeans y capitán de Docker, es fácilmente accesible en @arungupta.

Dejar una respuesta