Escribiendo Aplicaciones Serverless Testeables Utilizando Arquitectura Hexagonal

Rate this content
Bookmark

Según muchas encuestas, la prueba de aplicaciones serverless y el miedo al bloqueo del proveedor en la nube se encuentran entre los cinco principales desafíos que enfrentan las organizaciones al adoptar serverless. A menudo escuchamos que utilizar serverless de manera efectiva requiere un cambio de mentalidad. Pero, ¿qué significa eso? ¿Necesitamos nuevas herramientas y estrategias para probar aplicaciones serverless, o podemos utilizar las herramientas existentes que ya usamos para nuestras aplicaciones no serverless? ¿Y qué hay del bloqueo del proveedor en la nube? ¿Es algo real o solo una historia ficticia que asusta a la gente alejándola de serverless? ¿Podemos disminuir el riesgo de bloqueo del proveedor utilizando una arquitectura conocida, como la arquitectura hexagonal?

28 min
15 Jun, 2021

Video Summary and Transcription

Lo más aterrador de serverless es el miedo al bloqueo del proveedor y la pérdida de control. La planificación, una buena arquitectura y los procedimientos de implementación ayudan a mantener los costos de cambio razonables. La arquitectura hexagonal es un enfoque útil para escribir aplicaciones serverless testeables. Las pruebas de integración son cruciales para las aplicaciones serverless, y la arquitectura hexagonal ayuda a combatir el bloqueo del proveedor y reducir los costos de cambio. Docker se utiliza para probar las funciones serverless, y la practicidad de la arquitectura hexagonal sigue siendo una pregunta.

Available in English

1. The Scariest Thing About Serverless

Short description:

Lo más aterrador de sin servidor es perder el control y el miedo al bloqueo del proveedor. El bloqueo del proveedor se refiere a depender de un proveedor específico para productos o servicios, lo que dificulta cambiar a otro proveedor sin costos significativos. Explicaremos esto con una analogía de alquiler de servidor. Alquilas un servidor a un tipo llamado Jeff, que ofrece servicios adicionales como bases de datos y almacenamiento en caché. Sin embargo, si Jeff aumenta los precios o se vuelve poco confiable, tienes la opción de cambiar a otro proveedor como Bill. Pero migrar tu aplicación a un proveedor diferente puede llevar tiempo y ser costoso. A esto lo llamamos bloqueo del proveedor en la nube.

Hola. ¿Cuál es la cosa más aterradora de serverless? Hay muchas cosas aterradoras, ¿verdad? Bueno, algunas personas dirían que lo más aterrador son las tareas de larga duración, pero eso no es realmente lo más aterrador porque hay muchas formas de tener funciones de mayor duración y cosas así. ¿Has oído hablar del inicio en frío? Eso era realmente aterrador al principio, pero ahora no es tanto porque con Node.js, tu inicio en frío es tal vez de 100 milisegundos o algo así.

¿Qué pasa con el desarrollo local y la depuración? Eso todavía es algo realmente difícil de hacer pero las herramientas están mejorando cada día así que ya no es tan aterrador. Pero hay una cosa que todos mencionan, es perder el control. Sí, tal vez, pero por otro lado, al perder el control, estás ganando velocidad y algunas otras cosas. Así que no creo que eso sea lo más aterrador. Pero nuevamente, hay una cosa de la que todos tienen miedo y no importa si hablas con un desarrollador o una persona de negocios, todos mencionarán el temido bloqueo del proveedor. Es realmente aterrador, ¿verdad?

Pero veamos qué es el bloqueo del proveedor. Si vas a Wikipedia, verás que en economía, el bloqueo del proveedor hace que un cliente dependa de un proveedor para productos o servicios sin poder usar otro proveedor sin costos de cambio sustanciales. No me gusta mucho la definición así que intentemos explicarlo con algunos diagramas. Así que digamos que necesitas un servidor. No sé por qué, pero simplemente quieres tener un servidor y construir algún tipo de aplicación. Puedes comprarlo o alquilarlo, pero nadie compra servidores en estos días. Así que decides alquilarlo. Encuentras a un tipo que tiene muchos servidores en su sótano, llamémosle Jeff, y alquilas un servidor de Jeff y eso ahora es tu cloud. Estás usando ese servidor y después de un tiempo, Jeff es muy inteligente y sabe cómo usar sus servidores y sabe que estás construyendo bases de datos, almacenamiento en caché y cosas así. Así que comienza a construir servicios para ti. Puedes usar solo una database sin el servidor o simplemente usar caché o tal vez machine learning o funciones. Y es aún mejor porque puedes pagar por estas cosas solo cuando las usas. Es realmente increíble y ahora amarás los servicios de tu cloud. Pero ¿qué pasa si Jeff en realidad es un villano y en algún momento dependes tanto de sus servicios y aumenta los costos de todos estos servicios. Y por supuesto, tu billetera no estaría feliz en ese momento y seguramente tú tampoco estarías feliz. Pero afortunadamente tienes algunas opciones. Por ejemplo, puedes encontrar a otro tipo que tiene muchos servidores en su sótano o lo que sea, llamémosle Bill Y Bill también tiene una database y computación y machine learning y todo lo demás. Y los costos son más o menos los mismos que los costos de los servicios de Jeff antes de que aumentara los precios. Pero lo que es costoso es la migración porque la database de Jeff no es exactamente la misma que la database de Bill. Así que necesitas invertir mucho tiempo para mover tu aplicación de un servicio a otro. Y eso es básicamente el bloqueo del proveedor en la nube. Vimos otro ejemplo recientemente con Parler, pero eso es probablemente diferente porque no pueden migrar a ningún proveedor importante.

2. Switching Costs and Testable Serverless Apps

Short description:

El bloqueo del proveedor se refiere a los costos de cambio al cambiar de plataforma o proveedor. La planificación, la buena arquitectura y los procedimientos de implementación ayudan a mantener los costos de cambio razonables. El tema de hoy es escribir aplicaciones sin servidor testables utilizando la arquitectura hexagonal. Las pruebas son importantes para las aplicaciones sin servidor, ya que aún eres dueño de tu código y lógica empresarial. Las aplicaciones sin servidor a menudo tienen servicios pequeños con dependencias externas. Por ejemplo, nuestra WebApp con un chatbot de Slack permite a los usuarios solicitar vacaciones con unos pocos clics.

Este es un caso extremo, pero esta presentación no lo cubrirá. En cuanto al bloqueo del proveedor, realmente creo que Mark Schwartz, estratega de enterprise en AWS, tiene razón. Él piensa que el término bloqueo es engañoso porque en realidad estamos hablando de costos de cambio. Tan pronto como nos comprometemos con una plataforma o proveedor, tendremos costos de cambio si luego decidimos cambiar ese proveedor o plataforma. Por ejemplo, si construyes tu aplicación en PHP, y luego en algún momento quieres migrar eso a Node.js o Go o algo más, tendrás un gran costo de cambio porque necesitas hacer una pausa por un tiempo, reconstruir todo en un lenguaje diferente, y luego continuar desde ese punto.

Entonces, ¿cómo combatimos el bloqueo del proveedor, o mejor aún, hagamos la mejor pregunta, ¿cómo mantenemos nuestros costos de cambio razonables? Bueno, podemos hacer algunas cosas. Primero, necesitamos planificación y análisis. Por ejemplo, necesitamos responder algunas preguntas como ¿qué tan probable es que necesite cambiar a otra plataforma o servicio? ¿Cuál sería el costo de ese cambio? Si no hay muchas posibilidades de cambiar a otra cosa, por ejemplo, elegiste tu database y no crees que necesitarás cambiar en el futuro cercano, está bien tener un costo de migración ligeramente más alto, pero para algunas otras cosas, necesitas mantener ese costo más bajo. Necesitas tener una buena arquitectura, por supuesto. Y finalmente, necesitas tener procedimientos de implementación porque si no los tienes, será realmente, realmente difícil migrar a cualquier lugar.

Eso nos lleva a nuestro tema de hoy, y eso es escribir aplicaciones serverless testables y prevenir el bloqueo del proveedor utilizando la arquitectura hexagonal. Pero antes de continuar, permítanme presentarme. Soy Slobodan Stanovich, CTO y socio de Cloud Horizon y VacationTracker, VacationTracker es un sistema de gestión de seguimiento de clientes y Cloud Horizon es básicamente una agencia que crea aplicaciones web para otras personas. También escribí el libro, Aplicaciones serverless con Node.js con mi amigo Alexander Simovich, y está publicado por muchas editoriales. Y también soy un héroe serverless de AWS. Puedes seguirme en mi sitio web. Escribo mucho sobre serverless y también sobre pruebas. Así que volvamos a nuestro tema porque eso es definitivamente más interesante que yo. Hablaremos sobre cómo escribir aplicaciones serverless testables utilizando la arquitectura hexagonal. Pero primero, centrémonos en la parte de las pruebas. ¿Por qué son importantes las pruebas para las aplicaciones serverless? Básicamente, externalizas algunas partes de tu aplicación a un proveedor, pero eso no cubre todo. Ellos administrarán la infraestructura por ti, pero aún eres dueño de tu código y tu lógica empresarial. Entonces, necesitas probar esa parte de la aplicación. Y la mayoría de las veces, las aplicaciones serverless no son monolitos completamente aislados sin integraciones. En cambio, contienen muchos servicios pequeños que interactúan entre sí todo el tiempo, y tienen muchas dependencias externas. Mencioné VacationTracker, así que aquí tienes un ejemplo. Nuestra aplicación es una WebApp que también tiene un chatbot de Slack. Y dentro de Slack, puedes escribir /vacation y solicitar vacaciones con solo unos pocos clics. Es muy fácil, puedes hacerlo en solo unos minutos, en realidad, unos pocos segundos. Pero en segundo plano, se ve algo como esto.

3. Serverless Application Testing

Short description:

Slack envía solicitudes a la puerta de enlace de la API de Amazon, que decide qué función de Lambda ejecutar. La función de Lambda envía la solicitud a Amazon EventBridge, que se comunica con la lógica empresarial. La respuesta se devuelve a través de la puerta de enlace de la API a Slack. Las pruebas aseguran cambios intencionales y ayudan a determinar qué probar en una aplicación sin servidor. La pirámide de pruebas para las aplicaciones sin servidor es similar a la pirámide tradicional, pero las pruebas de integración y de interfaz de usuario son más rápidas y económicas.

Slack envía algunas solicitudes a nuestra puerta de enlace de API de Amazon. La puerta de enlace de API recibe esa solicitud HTTP y decide qué función de Lambda ejecutar. Esa función de Lambda analizará esa solicitud, la enviará a algo llamado Amazon EventBridge, que se comunicará con nuestra lógica empresarial en segundo plano, es un bus de servicios empresariales. Y luego, inmediatamente, la función de Lambda de AWS devolverá la respuesta a través de la puerta de enlace de API de Amazon a Slack y le dirá a Slack que recibió el mensaje. En segundo plano, nuestra lógica empresarial capturará ese mensaje y hará algo con él, por ejemplo, solicitar un permiso para ti o hacer algo así.

Hay muchas cosas que pueden cambiar o fallar en cualquier momento, por ejemplo, Slack puede cambiar la carga útil. Ha sucedido algunas veces en los últimos años. O por ejemplo, Slack puede estar inactivo. Luego, la puerta de enlace de API de Amazon puede cambiar su carga útil o algo así. Luego, la función de Lambda de AWS, tal vez nuestra función de Lambda, no está enviando el mensaje correcto a Amazon EventBridge o no tenemos los derechos para enviar ese mensaje. Entonces eso puede fallar. Y finalmente, tal vez Amazon EventBridge no pueda activar nuestra lógica empresarial por alguna razón. Por lo tanto, hay muchos cambios que pueden ocurrir todo el tiempo y las pruebas no evitarán estos cambios con seguridad. Pero se asegurarán de que los cambios que estamos haciendo no sean accidentales.

Entonces, ¿cómo prevenimos los cambios? No podemos, nuestra aplicación necesita adaptarse muy rápido y comenzar a funcionar con una carga útil diferente o lo que sea. Entonces, ¿cómo sabemos qué parte de la aplicación qué debemos probar realmente en nuestra aplicación sin servidor? En las aplicaciones tradicionales, hay algo llamado pirámide de pruebas. Está definida por Michael Cohen, en su libro, Succeeding with Agile. Y se ve algo así. En la parte inferior de la pirámide, hay pruebas unitarias porque son rápidas y realmente económicas. No necesitas nada externo para estas pruebas. Entonces son baratas y rápidas por eso. Y necesitas escribir muchas pruebas unitarias. Luego, para las pruebas de integración, son un poco más caras y más lentas porque necesitan conectarse a algún tipo de base de datos u otros servicios. Entonces necesitas menos pruebas de integración, pero también son un poco más caras. Y finalmente, las pruebas de interfaz de usuario o de extremo a extremo son las más caras y las más lentas porque necesitas tener toda la aplicación y todo. Y por eso no quieres tener demasiadas de ellas. Finalmente, muchos equipos tienen alguna sesión manual de pruebas basada en sesiones. Esa es la más lenta porque las personas necesitan hacer eso y son las más caras. Con sin servidor, en realidad la pirámide de pruebas sin servidor se parecería más a una pirámide maya en lugar de una pirámide egipcia. Entonces, las pruebas unitarias son las mismas, pero las pruebas de integración y las pruebas de interfaz de usuario son un poco más rápidas y un poco más económicas porque es más barato iniciar otra instancia de tu aplicación y puedes hacer cosas en paralelo.

4. Arquitectura y Pruebas de Aplicaciones sin Servidor

Short description:

Las pruebas de integración en aplicaciones sin servidor son más económicas y rápidas que nunca. Puedes utilizar cualquier arquitectura que te permita probar fácilmente tu aplicación sin servidor y mantener bajos los costos de cambio. Una de las arquitecturas que se adapta muy bien a estas necesidades es la arquitectura hexagonal o puertos y adaptadores. Permite que una aplicación sea impulsada por programas de usuarios, pruebas automatizadas o scripts por lotes, y que se desarrolle y pruebe de forma aislada de su entorno de ejecución y bases de datos finales. Al aislar la lógica empresarial en el centro y utilizar puertos y adaptadores, podemos probar fácilmente nuestra aplicación sin servidor.

Por eso son un poco más rápidas. Las pruebas de integración en aplicaciones sin servidor son más económicas y rápidas que nunca. Pero también son más importantes porque la aplicación sin servidor común se divide en muchas piezas pequeñas.

Entonces mencionamos la arquitectura. ¿Qué arquitectura es la mejor para las aplicaciones sin servidor? Básicamente, no hay una arquitectura única. Puedes utilizar cualquier arquitectura que te permita probar fácilmente tu aplicación sin servidor y mantener bajos los costos de cambio. Porque tarde o temprano necesitarás cambiar o migrar partes de tu aplicación, no a otro proveedor de servicios en la nube, pero la mayoría de las veces utilizarás otro servicio o cambiarás alguna integración y cosas así.

Hay algunas cosas que debes tener en cuenta al construir una aplicación sin servidor y elegir una arquitectura. Tienes riesgos de configuración. Si tu función está configurada como debería, riesgo de flujo de trabajo técnico, si manejas los errores y las respuestas de éxito como deberías, riesgos de lógica empresarial, si tu lógica empresarial funciona como debería, y finalmente riesgos de integración. Por ejemplo, si estás conectado a la base de datos correcta y si tienes los permisos para esa base de datos y cosas así. Una de las arquitecturas que se adapta muy bien a estas necesidades es la arquitectura hexagonal o puertos y adaptadores.

Hablemos de eso por un segundo. Su creador Alistair Coburn lo explica como una arquitectura que permite que una aplicación sea impulsada tanto por programas de usuarios, pruebas automatizadas o scripts por lotes, como para ser desarrollada y probada de forma aislada de su entorno de ejecución y bases de datos finales, lo cual es realmente bueno para las aplicaciones sin servidor porque, como dijimos al principio, la depuración y el desarrollo local a veces pueden ser un poco más complejos que antes. Se llama puertos y adaptadores porque funciona de la misma manera que los puertos y adaptadores. Por ejemplo, si viajas a otros países, necesitas un enchufe de corriente diferente para tu computadora portátil y no quieres comprar otro cable de carga. En su lugar, puedes comprar un adaptador pequeño y simplemente usar tu cable de carga regular. Queremos hacer lo mismo para nuestras aplicaciones y lo hacemos aislando la lógica empresarial en el centro. Y luego tenemos ciertos puertos para nuestros eventos, básicamente para eventos. Y luego tenemos adaptadores para diferentes servicios. Por ejemplo, cuando estamos probando nuestro servicio localmente, podemos usar un adaptador de activación local y con la aplicación sin servidor, podemos usar algún tipo de adaptador de evento Lambda o algo así. Así que veamos esto en un ejemplo. Volvamos a este ejemplo y centrémonos en una función Lambda. Si queremos construir nuestra aplicación de manera que sea fácilmente probable, podemos hacer algo como esto. Podemos tener un archivo Lambda JS. No hacemos pruebas para ese archivo, pero tiene solo unas pocas líneas de código. Luego tenemos nuestro archivo principal JS o varios archivos que representan nuestra lógica empresarial. Esta lógica empresarial tiene sus propias pruebas unitarias y también su propia prueba de integración. Pero, por ejemplo, tenemos muchas funciones conectadas a EventBridge.

5. Pruebas de Funciones y Lucha contra el Bloqueo del Proveedor

Short description:

Tenemos un repositorio para probar cada función contra EventBridge. También tenemos un repositorio de EventBridge con sus propias pruebas unitarias y pruebas de integración. El código invoca nuestra lógica empresarial, pasando el evento y el analizador. Podemos probar fácilmente esto con pruebas unitarias pasando valores estáticos y simulando el analizador y el repositorio de notificaciones. Con las pruebas de integración, podemos pasar valores estáticos para el evento y probar el adaptador de notificaciones. La arquitectura hexagonal ayuda a combatir el bloqueo del proveedor y reducir los costos de cambio. Teníamos un prototipo sin servidor con un chatbot y MongoDB, pero hicimos migraciones a una API sin servidor, DynamoDB y AppSync.

No queremos probar cada función contra EventBridge. Tenemos un repositorio para eso y las pruebas de integración probarán esto contra algún tipo de repositorio local con la misma API y básicamente la misma interfaz que el repositorio real de EventBridge. Y luego tenemos el repositorio de EventBridge con sus propias pruebas unitarias y pruebas de integración. Y aquí queremos probar eso contra el servicio real de Amazon EventBridge para asegurarnos de que funcione. Y podemos tener algunos archivos de ayuda, por ejemplo, un analizador de eventos que básicamente se ejecutará solo en pruebas unitarias porque no está conectado a nada fuera de nuestra función.

Veamos el código para esto. Esto puede representar nuestro archivo Lambda.js. Requerimos algunas cosas de nuestra lógica empresarial y algunas cosas de nuestra carpeta común o lo que sea. Y luego, dentro de la función, queremos crear una instancia de nuestro repositorio de EventBridge. Y finalmente, la parte más importante de este código es esta línea, invocamos nuestra lógica empresarial, pasamos el evento que recibimos, pasamos el analizador que podrá analizar este evento. Ese es nuestro adaptador, por ejemplo, el disparador Lambda. Y finalmente, pasamos la instancia de nuestro repositorio de notificaciones.

Con las pruebas unitarias, podemos probar fácilmente esto pasando algunos valores estáticos para el evento, podemos simular el analizador y el repositorio de notificaciones. Para las pruebas de integración, podemos pasar nuevamente algunos valores estáticos para el evento y luego podemos pasar alguna función de análisis y bloquear un adaptador de notificaciones. Y, por supuesto, como dijimos, el verdadero adaptador de notificaciones tendrá su propia prueba de integración, por lo que realmente no nos importa si esta función puede comunicarse con EventBridge. En cambio, solo queremos verificar si esta función puede comunicarse con el adaptador de notificaciones.

Es simple y agradable, pero al principio mencionamos el temido bloqueo del proveedor. Estoy bastante seguro de que todavía lo recuerdas. Bueno, ¿cómo nos ayuda esta arquitectura hexagonal a combatir el bloqueo del proveedor o, como dijimos, a mantener nuestros costos de cambio razonables? Veamos otra historia. Nuevamente, un rastreador de vacaciones. Así que construimos el prototipo sin servidor al principio. Teníamos un equipo pequeño con un desarrollador a tiempo completo. El producto inicial era un chatbot sin servidor más express.js y MongoDB, y estaba creciendo rápidamente después de unos meses. Teníamos más de 200 equipos usándolo. Ahora tenemos muchos más que eso. Y, por supuesto, tuvimos muchas malas decisiones como bonificación que tomamos durante ese proceso. Hicimos muchas migraciones en los últimos meses y años. Por ejemplo, reemplazamos la API de Express con una API sin servidor. Reemplazamos MongoDB con DynamoDB y reemplazamos el API Gateway ahora con AppSync y GraphQL. Centrémonos en MongoDB a DynamoDB.

6. Cambiar de Base de Datos con Arquitectura Hexagonal

Short description:

Con la arquitectura hexagonal, cambiar la base de datos se vuelve más fácil. Al crear la misma interfaz para diferentes bases de datos, como MongoDB y DynamoDB, podemos cambiar los adaptadores en la aplicación sin cambiar la lógica empresarial. Migrar los datos es necesario, pero la lógica empresarial permanece igual.

Es realmente, realmente difícil cambiar la database, pero con la arquitectura hexagonal, básicamente puedes comenzar con la misma interfaz como dijimos. Entonces, por ejemplo, nuestro MongoDB, cada vez que quieras obtener el usuario, puedes invocar db.getUser y devolverá el objeto de usuario. Lo que hicimos con DynamoDB, creamos la misma interfaz. Entonces, básicamente tiene la misma función getUser. Cuando pasas el ID de ese usuario, tendrás el mismo objeto de retorno. Así que el usuario uno será igual al usuario dos. Entonces hicimos lo siguiente. Todavía tenemos nuestra función y está conectada al repositorio de MongoDB en algún punto. También conectamos esa función al repositorio de DynamoDB y simplemente cambiamos ese adaptador en la aplicación. Eso fue solo una pequeña parte, por supuesto, que es utilizada por nuestro código. Pero esto es, por supuesto, necesitábamos migrar los data y todo. Pero es realmente importante hacer esto porque de esta manera, nuestra lógica empresarial permanece igual. No importa realmente para nuestra lógica empresarial si los data están dentro de DynamoDB o MongoDB y cómo funcionan en el fondo.

7. Pruebas de Integración y Conclusiones

Short description:

Puedes crear una base de datos de prueba con serverless, ejecutar tus pruebas y destruir la base de datos. Una buena arquitectura ayuda a mantener bajos los costos de cambio. La arquitectura hexagonal es útil para probar aplicaciones serverless de forma aislada. Las pruebas de integración son cruciales para las aplicaciones serverless. El monitoreo y el seguimiento de errores son necesarios para garantizar que todo funcione correctamente. Visita mi sitio web para obtener más contenido e información sobre el taller de pruebas de aplicaciones serverless. Gracias por asistir. El porcentaje de personas que utilizan serverless está creciendo, pero varía según el mercado.

Y si volvemos a estas pruebas de integración, podemos hacer algo así de simple. Antes de todo, podemos crear una base de datos de prueba con serverless y al final, podemos destruirla. El código es realmente sencillo. Se ve algo así. Creamos la tabla, esperamos a que se cree la tabla. Esto puede tomar de 15 a 20 segundos, y luego al final, simplemente podemos destruir esa tabla y esperar unos dos o tres segundos para que se destruya esa tabla. Y solo pagas por esta tabla cuando estás ejecutando pruebas y después de eso, tu cuenta está clara. Y sí, te conviertes en un superhéroe de las pruebas.

Básicamente, hagamos un breve resumen para finalizar esta presentación. Una buena arquitectura te ayuda a mantener bajos los costos de cambio, o al menos razonables si no puedes evitarlos en algunas situaciones. La arquitectura hexagonal es buena para las aplicaciones serverless porque te ayuda a probar estas aplicaciones de forma aislada. Y realmente debes probar las integraciones con las aplicaciones serverless. Y por supuesto, debes probar otras partes de tu aplicación, pero las integraciones son más importantes que nunca. Y a veces las pruebas no son suficientes, así que necesitarás agregar un poco de monitoreo y seguimiento de errores para asegurarte de que todo funcione todo el tiempo.

Y eso es todo por hoy. Como dije, hablo y escribo mucho sobre serverless. Puedes visitar mi sitio web y ver el contenido. Y también estoy haciendo un taller de pruebas de aplicaciones serverless pronto. Así que si estás interesado en eso, podrás ir a mi sitio web y obtener más información. Muchas gracias. Eso es todo por hoy. Hola, bienvenidos. Es genial tenerte aquí. Gracias por la increíble charla. Gracias. Vi que el 29% de las personas utilizan serverless, así que estoy realmente feliz con ese número porque serverless todavía es nuevo. Así que tomará algunos años más hasta que tengamos un mayor porcentaje de personas utilizando serverless pero hasta ahora, casi una de cada tres personas que utilizan serverless es mejor de lo que esperaba. Así que sí, estoy contento con ese número. Supongo que depende un poco de tu mercado. Siempre siento que el mercado estadounidense está un poco adelante del mercado europeo.

QnA

Adopción de Serverless y Uso de Docker

Short description:

El número de personas que utilizan serverless ha crecido significativamente en los últimos años. Docker se utiliza para probar funciones serverless, pero su lugar en la escala entre lo tradicional y lo serverless es subjetivo. AWS SAM es una herramienta útil para implementar y ejecutar partes de una aplicación serverless localmente, pero no se utiliza a diario. No hemos intentado migrar AWS AppiStack a Kubernetes u otras plataformas en la nube. La pregunta de qué tan práctica es la arquitectura hexagonal sigue sin respuesta.

Y así me sorprendió un poco que sea solo alrededor de un tercio, pero sí, supongo que depende. Es un buen número. Sí. Por supuesto, por supuesto. Pero recuerdo los días en que teníamos un porcentaje realmente pequeño de personas que utilizaban serverless como menos del 5% o algo así. Así que 29 es un número realmente bueno. Sí, cuando recién comenzó. Ha crecido mucho en los últimos años y la aceptación también ha crecido mucho. Así que esperemos que el número siga aumentando.

Tenemos algunas preguntas del público para ti. Aaron quiere saber dónde colocas Docker en la escala entre lo tradicional y serverless. Probablemente no sea la persona adecuada para responder preguntas sobre contenedores porque no estoy usando realmente contenedores tanto, pero sí, lo único para lo que uso Docker es para probar algunas de las funciones serverless. Veo otra pregunta relacionada con AWSM y esta es exactamente la parte donde uso Docker de vez en cuando. No estoy seguro de dónde encaja en esa pirámide serverless. Y sí, las pruebas, probablemente estén en algún punto intermedio, pero ahora hay algunos contenedores administrados que están muy cerca de serverless. Así que sí, realmente depende. No soy la mejor persona para responder preguntas sobre contenedores en este momento. De acuerdo. Entonces pasemos a la siguiente pregunta. Jamatask quiere saber, ¿utilizas AWS SAM y sus capacidades locales para probar varias aplicaciones localmente? ¿Esa era la pregunta a la que te referías, verdad? Sí, exactamente. Entonces, AWS SAM o modelo de aplicación serverless es una herramienta muy útil que te ayuda a implementar, pero también a ejecutar localmente algunas partes de tu aplicación serverless. Y lo usamos de vez en cuando para probar... No realmente para ejecutar una prueba automatizada, sino para ver si la función realmente funciona de la manera que queremos que funcione. Pero no lo uso todos los días. Así que cuando necesito probar algo localmente, es mucho más fácil para mí escribir algunas pruebas unitarias o algo así, o pruebas de integración que iniciar Docker, probablemente actualizar Docker porque no lo uso todos los días. Así que puede ser realmente útil, especialmente cuando estás comenzando con serverless. Pero para mí, no es una herramienta que use todos los días, pero usamos AWS SAM para la implementación y básicamente para nuestra infraestructura como código. De acuerdo, genial. DammaTask también pregunta, ¿intentaste migrar AWS AppiStack a Kubernetes más Istio o Google Cloud o Microsoft Azure? Oh, definitivamente no.

Practicality of Hexagonal Architecture

Short description:

La lógica empresarial de las funciones serverless sigue siendo la misma, mientras que los conectores y el almacenamiento de datos pueden cambiar. Esto es similar a usar adaptadores al viajar a diferentes países. Al igual que no quieres comprar un nuevo cable de alimentación para cada dispositivo electrónico, es más rentable tener un adaptador compacto. El mismo principio se aplica al código. No es necesario reescribir la lógica empresarial, ya que debe ser independiente de la plataforma. Aunque no hemos migrado todo a Kubernetes, hemos migrado nuestra lógica empresarial a GraphQL, manteniendo muchas funciones sin cambios.

Por otro lado, no tenemos planeado hacer eso. Entonces, la siguiente pregunta de seguimiento es básicamente qué tan práctica es la arquitectura hexagonal. Así que si queremos hacer alguna migración importante, necesitaríamos escribir mucho código, eso seguro. Pero lo bueno de la arquitectura serverless es que la lógica empresarial de tus funciones sigue siendo la misma. Así que sé que la lógica empresarial de la función, por ejemplo, hablo de nuestro producto, Location Tracker, la forma en que solicitas una licencia o apruebas una licencia seguirá siendo la misma. Lo que cambiará son básicamente los conectores, cómo se almacenan esos datos en una base de datos y cosas así. Así que adaptadores y cosas así. Pero la lógica empresarial es independiente de la plataforma. Por eso, cuando mencionaste los puertos y los adaptadores al principio, esa es una muy buena explicación. Por ejemplo, si viajas en verano, por supuesto, no este año, pero esperemos que pronto en el futuro, no quieres comprar un nuevo adaptador. Por ejemplo, cuando vas a los Estados Unidos u otro país con enchufes de corriente diferentes, no quieres comprar todo el cable de alimentación para tu Mac o algo así y pagar mucho dinero. En su lugar, compras un adaptador pequeño solo para permitir que tu computadora, en realidad, use tu adaptador de corriente existente con una fuente de alimentación en tu hotel o algo así. Quieres hacer lo mismo con tu código. Exactamente, porque no solo terminarías comprando un adaptador de corriente para tu computadora portátil, sino que necesitarías uno para todos tus dispositivos electrónicos. Entonces, es mucho más barato obtener el adaptador agradable y compacto. Es lo mismo con el código. No quieres reescribir tu lógica empresarial porque debe ser independiente de la plataforma en la que estás ejecutando tu aplicación. Entonces, no, nunca intentamos migrar todo a Kubernetes, pero por otro lado, intentamos migrar nuestra lógica empresarial a GraphQL, y eso cambió muchas cosas. Pero muchas funciones siguieron siendo las mismas. Afortunadamente, logramos eliminar muchas funciones y reemplazarlas con otros servicios, pero la lógica empresarial siguió siendo la misma. De acuerdo, creo que tenemos tiempo para una última pregunta. Aaron quiere saber, he escuchado que MongoDB tiene un mal rendimiento en implementaciones serverless. ¿Es por eso que migraste a DynamoDB? No, no experimentamos ese mal rendimiento, al menos no en nuestra aplicación. Pero ¿cuál era el problema? El problema con MongoDB era que todavía éramos dueños de la infraestructura de esa MongoDB. Necesitábamos escalar esa base de datos. Y a veces teníamos mucho tráfico porque, por ejemplo, Slack nos enviaba muchos webhooks y la gente usaba nuestras aplicaciones. Así que en lugar de tener una base de datos no serverless, intentamos migrar a DynamoDB porque esa base de datos es completamente serverless, se escalará automáticamente. Tuvimos un error y en un mes, tuvimos alrededor de 250 millones de solicitudes de escritura a nuestra base de datos además de lo que normalmente tenemos. Y sí, simplemente funcionó. Nuestra factura fue de $300 más, pero sí, todo funcionó. De acuerdo, genial. Gracias por responder todas las preguntas. Hubo algunas preguntas más y para responder a esas, únete a Slobodan en la sala de oradores en spatial chat. Muchas gracias por acompañarnos esta noche. Gracias.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Scaling Up with Remix and Micro Frontends
Top Content
Do you have a large product built by many teams? Are you struggling to release often? Did your frontend turn into a massive unmaintainable monolith? If, like me, you’ve answered yes to any of those questions, this talk is for you! I’ll show you exactly how you can build a micro frontend architecture with Remix to solve those challenges.
TestJS Summit 2021TestJS Summit 2021
33 min
Network Requests with Cypress
Top Content
Whether you're testing your UI or API, Cypress gives you all the tools needed to work with and manage network requests. This intermediate-level task demonstrates how to use the cy.request and cy.intercept commands to execute, spy on, and stub network requests while testing your application in the browser. Learn how the commands work as well as use cases for each, including best practices for testing and mocking your network requests.
TestJS Summit 2021TestJS Summit 2021
38 min
Testing Pyramid Makes Little Sense, What We Can Use Instead
Top Content
Featured Video
The testing pyramid - the canonical shape of tests that defined what types of tests we need to write to make sure the app works - is ... obsolete. In this presentation, Roman Sandler and Gleb Bahmutov argue what the testing shape works better for today's web applications.
Remix Conf Europe 2022Remix Conf Europe 2022
37 min
Full Stack Components
Top Content
Remix is a web framework that gives you the simple mental model of a Multi-Page App (MPA) but the power and capabilities of a Single-Page App (SPA). One of the big challenges of SPAs is network management resulting in a great deal of indirection and buggy code. This is especially noticeable in application state which Remix completely eliminates, but it's also an issue in individual components that communicate with a single-purpose backend endpoint (like a combobox search for example).
In this talk, Kent will demonstrate how Remix enables you to build complex UI components that are connected to a backend in the simplest and most powerful way you've ever seen. Leaving you time to chill with your family or whatever else you do for fun.
React Advanced Conference 2022React Advanced Conference 2022
29 min
Understanding React’s Fiber Architecture
Top Content
We've heard a lot about React's Fiber Architecture, but it feels like few of us understand it in depth (or have the time to). In this talk, Tejas will go over his best attempt at understanding Fiber (reviewed by other experts), and present it in an 'explain-like-I'm-five years old' way.
TestJS Summit 2022TestJS Summit 2022
27 min
Full-Circle Testing With Cypress
Top Content
Cypress has taken the world by storm by brining an easy to use tool for end to end testing. It’s capabilities have proven to be be useful for creating stable tests for frontend applications. But end to end testing is just a small part of testing efforts. What about your API? What about your components? Well, in my talk I would like to show you how we can start with end-to-end tests, go deeper with component testing and then move up to testing our API, circ

Workshops on related topic

React Summit 2023React Summit 2023
151 min
Designing Effective Tests With React Testing Library
Top Content
Featured Workshop
React Testing Library is a great framework for React component tests because there are a lot of questions it answers for you, so you don’t need to worry about those questions. But that doesn’t mean testing is easy. There are still a lot of questions you have to figure out for yourself: How many component tests should you write vs end-to-end tests or lower-level unit tests? How can you test a certain line of code that is tricky to test? And what in the world are you supposed to do about that persistent act() warning?
In this three-hour workshop we’ll introduce React Testing Library along with a mental model for how to think about designing your component tests. This mental model will help you see how to test each bit of logic, whether or not to mock dependencies, and will help improve the design of your components. You’ll walk away with the tools, techniques, and principles you need to implement low-cost, high-value component tests.
Table of contents- The different kinds of React application tests, and where component tests fit in- A mental model for thinking about the inputs and outputs of the components you test- Options for selecting DOM elements to verify and interact with them- The value of mocks and why they shouldn’t be avoided- The challenges with asynchrony in RTL tests and how to handle them
Prerequisites- Familiarity with building applications with React- Basic experience writing automated tests with Jest or another unit testing framework- You do not need any experience with React Testing Library- Machine setup: Node LTS, Yarn
DevOps.js Conf 2024DevOps.js Conf 2024
163 min
AI on Demand: Serverless AI
Featured WorkshopFree
In this workshop, we discuss the merits of serverless architecture and how it can be applied to the AI space. We'll explore options around building serverless RAG applications for a more lambda-esque approach to AI. Next, we'll get hands on and build a sample CRUD app that allows you to store information and query it using an LLM with Workers AI, Vectorize, D1, and Cloudflare Workers.
TestJS Summit 2022TestJS Summit 2022
146 min
How to Start With Cypress
Featured WorkshopFree
The web has evolved. Finally, testing has also. Cypress is a modern testing tool that answers the testing needs of modern web applications. It has been gaining a lot of traction in the last couple of years, gaining worldwide popularity. If you have been waiting to learn Cypress, wait no more! Filip Hric will guide you through the first steps on how to start using Cypress and set up a project on your own. The good news is, learning Cypress is incredibly easy. You'll write your first test in no time, and then you'll discover how to write a full end-to-end test for a modern web application. You'll learn the core concepts like retry-ability. Discover how to work and interact with your application and learn how to combine API and UI tests. Throughout this whole workshop, we will write code and do practical exercises. You will leave with a hands-on experience that you can translate to your own project.
React Summit 2022React Summit 2022
117 min
Detox 101: How to write stable end-to-end tests for your React Native application
Top Content
WorkshopFree
Compared to unit testing, end-to-end testing aims to interact with your application just like a real user. And as we all know it can be pretty challenging. Especially when we talk about Mobile applications.
Tests rely on many conditions and are considered to be slow and flaky. On the other hand - end-to-end tests can give the greatest confidence that your app is working. And if done right - can become an amazing tool for boosting developer velocity.
Detox is a gray-box end-to-end testing framework for mobile apps. Developed by Wix to solve the problem of slowness and flakiness and used by React Native itself as its E2E testing tool.
Join me on this workshop to learn how to make your mobile end-to-end tests with Detox rock.
Prerequisites- iOS/Android: MacOS Catalina or newer- Android only: Linux- Install before the workshop
TestJS Summit 2023TestJS Summit 2023
48 min
API Testing with Postman Workshop
Top Content
WorkshopFree
In the ever-evolving landscape of software development, ensuring the reliability and functionality of APIs has become paramount. "API Testing with Postman" is a comprehensive workshop designed to equip participants with the knowledge and skills needed to excel in API testing using Postman, a powerful tool widely adopted by professionals in the field. This workshop delves into the fundamentals of API testing, progresses to advanced testing techniques, and explores automation, performance testing, and multi-protocol support, providing attendees with a holistic understanding of API testing with Postman.
1. Welcome to Postman- Explaining the Postman User Interface (UI)2. Workspace and Collections Collaboration- Understanding Workspaces and their role in collaboration- Exploring the concept of Collections for organizing and executing API requests3. Introduction to API Testing- Covering the basics of API testing and its significance4. Variable Management- Managing environment, global, and collection variables- Utilizing scripting snippets for dynamic data5. Building Testing Workflows- Creating effective testing workflows for comprehensive testing- Utilizing the Collection Runner for test execution- Introduction to Postbot for automated testing6. Advanced Testing- Contract Testing for ensuring API contracts- Using Mock Servers for effective testing- Maximizing productivity with Collection/Workspace templates- Integration Testing and Regression Testing strategies7. Automation with Postman- Leveraging the Postman CLI for automation- Scheduled Runs for regular testing- Integrating Postman into CI/CD pipelines8. Performance Testing- Demonstrating performance testing capabilities (showing the desktop client)- Synchronizing tests with VS Code for streamlined development9. Exploring Advanced Features - Working with Multiple Protocols: GraphQL, gRPC, and more
Join us for this workshop to unlock the full potential of Postman for API testing, streamline your testing processes, and enhance the quality and reliability of your software. Whether you're a beginner or an experienced tester, this workshop will equip you with the skills needed to excel in API testing with Postman.
TestJS Summit - January, 2021TestJS Summit - January, 2021
173 min
Testing Web Applications Using Cypress
WorkshopFree
This workshop will teach you the basics of writing useful end-to-end tests using Cypress Test Runner.
We will cover writing tests, covering every application feature, structuring tests, intercepting network requests, and setting up the backend data.
Anyone who knows JavaScript programming language and has NPM installed would be able to follow along.