Construyendo Backends Confiables con Ejecución Duradera

Rate this content
Bookmark
Sylwia Vargas
Sylwia Vargas
21 min
04 Apr, 2024

Comments

Sign in or register to post your comment.
  • James S
    James S
    I was disappointed that this ended up being an ad for a SaaS instead of ways to build reliable backends without throwing money at the problem.

Video Summary and Transcription

Esta Charla explora el paradigma de las colas de mensajes para la ejecución confiable de backends. Destaca los beneficios de las colas de mensajes, como la entrega garantizada y la descarga de procesos de larga duración. Se discuten las desventajas de usar colas, incluyendo la complejidad de gestionar la infraestructura y las aplicaciones. Se presenta la solución de usar una capa de confiabilidad llamada Ingest, que permite tareas en segundo plano sin bloqueo y proporciona un panel de control para monitorear y gestionar trabajos. La Charla también enfatiza la importancia de la confiabilidad en la construcción de sistemas de software e introduce el alcance y la funcionalidad en expansión de Ingest.

Available in English

1. Introducción a las Colas de Mensajes

Short description:

Hola a todos. Bienvenidos a mi charla sobre confiabilidad, backend y ejecución. Discutiré el paradigma que facilita la vida. Ahora estamos viviendo en una constante nostalgia de los años 90. Los años 90 nos trajeron muchas cosas geniales, pero hay una cosa de la que podríamos despedirnos: las colas. Las colas de mensajes son una forma de comunicación asincrónica entre servicios. Permiten una entrega garantizada y la descarga de procesos de larga duración.

Hola a todos. Bienvenidos a mi charla donde, durante los próximos 20 minutos, hablaré sobre confiabilidad, backend y ejecución. Solo una breve introducción. Mi nombre es Sylvia Vargas. Soy de Polonia. Me encantan los pierogi y anteriormente trabajé en StackBlitz. Ahora soy líder de relaciones con desarrolladores en Ingest. Esta charla trata sobre el paradigma que facilita la vida. Pero antes de hablar de lo bueno, hablemos de lo malo. Ahora estamos viviendo en una constante nostalgia de los años 90. Y, por supuesto, esto no es sorprendente. Los años 90 nos trajeron muchas cosas diferentes, cosas geniales que todavía están con nosotros. Sin embargo, hay una cosa de la que posiblemente podríamos despedirnos. Y estas son las colas. Así que veamos qué son las colas de mensajes. Una cola de mensajes es una forma de comunicación asincrónica entre servicios utilizando una arquitectura de microservicios. Los mensajes se almacenan en la cola hasta que se procesan y se eliminan. Cada mensaje es procesado solo una vez por un único consumidor. Pero aquí necesito interrumpir porque en realidad, varios trabajadores pueden consumir mensajes de una cola. Para preservar el orden de las tareas, deberán ejecutarse en serie. Pero volviendo a la definición ahora. Y las colas de mensajes se pueden usar para desacoplar el procesamiento pesado para almacenar o agrupar trabajos y suavizar las cargas de trabajo pico. Entonces puedes pensar en que una vez que agregas algo a la cola, llegará a su destino uno por uno. La entrega está garantizada. Y lo que sucede en la cola no afecta otras partes de la infraestructura. Y las colas pueden ser realmente masivas. Así que recapitulemos. Con las colas, obtienes entrega garantizada porque sabes que una vez que algo se agrega a la cola, solo la dejará una vez que se procese. Y las colas permiten a los desarrolladores descargar procesos de larga duración al fondo para que tu aplicación no se atasque. Usarías colas para tareas intensivas de datos.

2. Drawbacks of Using Queues

Short description:

Y otra ventaja de las colas es la escalabilidad horizontal. Sin embargo, hay inconvenientes en el uso de colas. Construir infraestructura adicional y gestionar aplicaciones complejas puede ser mucho trabajo. En tiempos de presupuestos y recursos limitados, vale la pena considerar si gestionar colas es la elección correcta. En cambio, la ejecución duradera nos permite definir la lógica del flujo de trabajo en el código de nuestra aplicación y garantiza una ejecución confiable.

procesos o al integrarse con sistemas externos. Y otra ventaja es la escalabilidad horizontal porque se pueden procesar varios mensajes en paralelo. A medida que aumenta la carga de trabajo, las aplicaciones múltiples pueden manejar un alto rendimiento y seguir siendo confiables. Sin embargo, hay un pero. Así que veamos este comentario de Reddit. Las colas son geniales en procesos intensivos de datos, como dije, que no necesitan ejecutarse en el hilo principal porque se ejecutan de forma asincrónica. Las tareas se procesan en segundo plano y la aplicación sigue siendo receptiva. Sin embargo, hay algunos inconvenientes en las colas, que este usuario de Reddit menciona delicadamente en esta cita. Una vez que tomas algo de la cola, el resto depende de ti. Y el servicio de encolado ya no se preocupa. Entonces, ¿qué significa eso? Veamos eso. Las colas son geniales cuando tu aplicación es simple. Cuando crece en complejidad o si es distribuida, de repente necesitas preocuparte por toda una serie de infraestructura adicional que necesitas construir. Y serás tú quien tenga que construirla. Por ejemplo, deberás construir concurrency porque quieres poder controlar cuántos pasos se ejecutan al mismo tiempo. O, por ejemplo, debouncing porque todos sabemos lo costoso que es cuando las funciones se ejecutan varias veces. O persistencia y gestión de estado porque ahora que tienes una aplicación distribuida o compleja, debes compartir el estado entre diferentes funciones y colas. Luego también está el manejo de errores porque ¿qué pasa si hipotéticamente un proveedor de servicios tiene una interrupción? Deberás incluir reintentos y también fallos. Quiero decir, reintentos para fallos y también tiempos de espera. Y en ese caso, también necesitas herramientas de recuperación para comprender y procesar los errores y eventos fallidos. Esto ya suena como mucho trabajo y ni siquiera es una lista exhaustiva. Así que no tienes que escucharme a mí en eso. En momentos como este, cuando los presupuestos de ingeniería y las plantillas se reducen, nosotros como desarrolladores e ingenieros individuales debemos hacer más con menos. Entonces, realmente vale la pena preguntarse en este momento, ¿realmente quieres estar en el negocio de gestionar y operar tus propias colas? Bueno, Matthew Druker, el CEO de SoundCloud, no cree que debamos hacerlo. Entonces, si esto es ahora un conocimiento común, ¿por qué la gente sigue usando colas? Bueno, estamos acostumbrados a algo. Se siente familiar y acogedor incluso si no es la solución más acogedora. Puedes hacer que todo funcione con el esfuerzo suficiente. Afortunadamente, hay una mejor solución que se basa en el concepto de colas de mensajes. Entonces, en lugar de separar nuestra infraestructura, como las colas, de nuestro código, ¿qué tal si pudiéramos definir nuestra lógica de flujo de trabajo puramente en nuestro código de aplicación y asegurarnos de que se ejecute de manera confiable? Esto es lo que nos ofrece la ejecución duradera. La ejecución duradera es, como su nombre indica, duradera. Garantiza que nuestro código se ejecute.

3. Additional Functionalities and Real-World Example

Short description:

Esta parte explica las funcionalidades adicionales proporcionadas por el sistema. También presenta un ejemplo del mundo real de cómo construir un flujo de registro utilizando servicios de terceros, enfatizando la simplicidad y facilidad que ofrece a los desarrolladores.

se completará, incluso si hay fallos en los mensajes en el camino. Por lo tanto, esta parte es la misma que las colas de mensajes. Sin embargo, a diferencia de las colas de mensajes, también obtienes lógica retrospectiva, manejo de errores, o persistencia de estado, que viene integrado. No tienes que construirlo. Se te proporciona.

La otra parte es el control de flujo, que es todo lo demás que se necesita para que puedas ejecutar tus funciones de manera confiable, como concurrency (concurrencia), debouncing, priorización de tareas, manejo de fallos o herramientas de recuperación. Suficiente teoría. Veamos un ejemplo del mundo real. Trabajas en una nueva startup de reservas de restaurantes muy popular. Tu jefe te pregunta cuánto tiempo te llevará construir un flujo de registro. Entonces recibes una lista de requisitos del gerente de productos. Lo miras con un café con leche helado en la mano. Estás completamente tranquilo. Veamos. Necesitas autenticar de forma segura al usuario. Necesitas agregar al usuario a una database (base de datos). Necesitas agregar al usuario a la lista de correo. Y finalmente enviar un correo electrónico de bienvenida. Afortunadamente, construir esto es mucho más fácil hoy en día de lo que hubiera sido hace cinco años. Porque puedes usar Clerk para la autenticación, SupaBase para la base de datos, MailChimp para la lista de correo y Resend para

4. Challenges of Distributed Applications

Short description:

Construir aplicaciones utilizando servicios de terceros es inteligente y facilita la vida. Sin embargo, hay un inconveniente. A veces, los servicios pueden ser lentos, lo que causa código bloqueante y ralentiza la API. Esto afecta la experiencia del usuario. Gestionar reintentos, registrar errores e implementar un sistema de recuperación añade complejidad y aumenta el tiempo de desarrollo.

email. De acuerdo. Trabajo hecho. Puedes dar un gran sorbo a tu café con leche helado y volver a jugar Wordle o leer uno de esos miles de hilos en Twitter. Entonces, aquí está el code. Y crearías un usuario en la database. Enviarías un correo electrónico de bienvenida. Y agregarías al usuario como miembro de una lista de correo. Bueno, esto parece muy simple. Y nos gusta lo simple. ¿Verdad? Somos perezosos como desarrolladores. Construir aplicaciones utilizando servicios de terceros es inteligente y facilita la vida. Así que nos gusta lo fácil. Pero, ¿dónde está el problema? ¿Termina aquí mi presentación? Bueno, no. Hay un inconveniente. Porque ahora hemos creado una aplicación distribuida en la que no tenemos control sobre gran parte de la infraestructura en la que confiamos. Por ejemplo, a veces los servicios pueden ser lentos. Enviar un correo electrónico o incluso en un buen día puede llevar medio segundo. Así que ahora tenemos un problema. Tenemos código bloqueante en el camino crítico de nuestra solicitud. Como resultado, estamos haciendo que nuestra API sea más lenta. En otras palabras, tu usuario está perdiendo tiempo. La experiencia del usuario no debería verse afectada debido a los requisitos del negocio. Entonces, ¿cómo lo estamos haciendo hasta ahora? ¿Es rápido? Bueno, no. Pero, ¿es confiable? Tampoco. Imagina que mientras estás agregando un usuario a una lista de correo, un servicio se cae. Necesitas gestionar los reintentos. Uno, dos, tres, cuatro reintentos. ¿Y si algo falla permanentemente? Necesitas registrar estos errores en un servicio de registro. Y también necesitas idear un sistema de recuperación. Por lo tanto, la estimación para construir esta característica muy simple ahora es de semanas en lugar de días. Necesitas configurar la infraestructura y los procesos.

5. Solving Partial Failures with Ingest

Short description:

Las fallas parciales son malas. Ignorar errores, mostrar errores a los usuarios o hacer que los usuarios vuelvan a intentar registrarse puede llevar a la pérdida de clientes y entradas duplicadas. Esto resulta en una aplicación lenta y frustrante. Para resolver esto, podemos mover tareas no bloqueantes a trabajos en segundo plano utilizando Ingest. Ingest es una capa de confiabilidad que te permite definir y ejecutar funciones de forma asíncrona. Proporciona un panel de control para monitorear y administrar trabajos.

Además, las fallas parciales son realmente malas. Entonces, imagina esto. Has agregado al usuario a la database, pero no le has enviado un correo electrónico. Ahora tenemos tres opciones. Primero, puedes ignorar el error, lo que significa que el usuario no está en la lista de correo. Segundo, aún peor, mostramos al usuario el error, lo que llevará a la pérdida de un cliente. Y tercero, el peor caso de todos, el usuario volverá a intentar registrarse. Veamos eso. Así que supongamos que el usuario recibe el error e intenta registrarse nuevamente. Pero ahora, el usuario que se crea generará un error porque hay un duplicado. Bueno, buena suerte recuperándote de eso. Así que este es el lío en el que estamos. Y la aplicación tarda una eternidad en funcionar. Me lleva una eternidad construirla. Estaré molesto en mi trabajo porque de repente tengo que lidiar con la acumulación de soporte. Aún no estamos lidiando con las fallas persistentes. Y todos están descontentos. Mi jefe está descontento. Estoy estresado. No puedo dormir. Pero hay una solución. Podemos hacer que nuestro code sea más rápido y confiable. Entonces, movamos las tareas no bloqueantes a trabajos en segundo plano. Primero, agregaremos Ingest al proyecto. Ingest es una capa de confiabilidad para tu aplicación. Entonces, con Ingest, defines funciones o flujos de trabajo utilizando su SDK directamente en tu base de code, y luego los sirves a través de un punto de conexión HTTP en tu aplicación. Entonces, Ingest se encarga de ejecutar funciones de forma confiable de manera asíncrona. También hay un panel de control donde puedes monitorear,

6. Using Ingest for Reliable Function Execution

Short description:

Agregamos una capa de confiabilidad llamada Ingest. Las funciones se envuelven en Ingest.create para ejecutarse cuando se activa un evento. Se utiliza el mismo nombre de evento para varias funciones que se ejecutan simultáneamente, conocido como fan out. En lugar de invocar las funciones directamente, desencadenamos eventos en Ingest a través de un punto de conexión HTTP. Ingest ejecuta las funciones y proporciona notificaciones en el panel de control. Ingest vuelve a intentar automáticamente las funciones fallidas hasta que tengan éxito.

debug, y administra tus trabajos. Todo es visual. Entonces, así es como se ve tu aplicación ahora. Vamos a agregar una capa de confiabilidad que es Ingest. Primero, vamos a envolver esta función en la función Ingest.create. Como puedes ver, estamos proporcionando un nombre de evento. Más tarde, cuando el usuario se registre, desencadenaremos un evento con este nombre. Lo verás en un segundo. Esto le dirá a Ingest que ejecute la función. Así es como se vería en code. Estamos creando la función. Proporcionamos el nombre del evento e invocamos nuestro código existente de MailChimp code de antes. Y ahora haremos lo mismo para la otra función. Como puedes ver, estamos usando el mismo nombre de evento. Esto se debe a que queremos que estas dos funciones se ejecuten al mismo tiempo. Entonces, cuando el usuario se registre, queremos que estas dos funciones se ejecuten. Este patrón se llama comúnmente fan out. Entonces, ahora cuando el usuario haga clic en el botón, enviaremos un evento a Ingest. Así es como se ve en el code. En lugar de invocar estas funciones directamente, desencadenaremos un evento en Ingest. Como mencioné antes, exponemos funciones a Ingest a través de un punto de conexión HTTP. Ingest utiliza este punto de conexión para ejecutar las funciones específicas cuando se activa un evento. Este es el punto de conexión. Ingest lo utilizará para descargar las definiciones de las funciones y luego ejecutarlas. Y aquí está el flujo completo. Entonces, Ingest llama a las funciones correctas en el momento preciso que deseas. Y luego en el panel de control, recibirás una notificación de que se ha desencadenado un evento, que a su vez llamó a dos funciones. Así que vemos que se completaron y cuándo. Todo esto se ve bien. Pero, ¿qué sucede cuando hay un fallo? Bueno, veamos eso. Ingest invoca la función y digamos que falla con un error code. Entonces, lo volverá a intentar una y otra vez hasta que finalmente tenga éxito. No necesitas

7. Explorando Funcionalidades Adicionales de Ingest

Short description:

Puedes solucionar fácilmente errores con la herramienta de consola de Ingest y recuperarte volviendo a activar eventos fallidos. Ingest permite programar tareas en el futuro y orquestar procesos de múltiples pasos. Aumenta la retención de usuarios enviando campañas de correo electrónico de activación.

preocuparte por eso. Además, obtendrás un registro detallado de lo que sucedió. Sé que es difícil de creer, pero a veces los errores persisten no debido a la falta de servicio, sino porque hay errores en nuestro code. Sé que es difícil de creer. Pero en esos casos, en realidad puedes depurar fácilmente con la herramienta de consola de Ingest y una vez que hayas corregido tu función, puedes recuperarte volviendo a activar eventos fallidos. Entonces, ¿cómo lo estamos haciendo ahora? Queríamos hacer que nuestra aplicación sea más rápida, así que movimos las tareas no bloqueantes del camino crítico del usuario a trabajos en segundo plano. Pero además, obtuvimos confiabilidad como una buena adición. Así que ahora tenemos acceso a esta gran infraestructura. Entonces, veamos qué más podemos hacer con ella. Así es como se ve nuestra aplicación en este momento. Aún no te lo había dicho, pero Ingest en realidad te permite programar tareas en el futuro y también orquestar procesos de múltiples pasos. Así que veamos la función de enviar correo electrónico. Aquí, simplemente estamos enviando un correo de bienvenida pero siempre es bueno aumentar la retención de usuarios. Podríamos enviarles una campaña de correo electrónico de activación durante la primera semana. ¿Cómo lo haríamos? Así que primero creemos una función de Ingest,

8. Building a Drip Campaign with Ingest

Short description:

Podemos usar los pasos de Ingest para construir una campaña de goteo con progresión secuencial. Ingest se encarga de la programación para pausar la ejecución de la función. El último paso es el correo electrónico final con consejos. La campaña puede ser dinámica según las acciones del usuario. Usaremos el evento de reserva para determinar el curso de acción.

que reaccionará al mismo evento. Hasta ahora, hemos estado hablando del patrón de propagación, donde tienes múltiples funciones que se activan en el mismo evento. Sin embargo, muchas tareas requieren una progresión secuencial. Aquí estamos construyendo una campaña de goteo, por lo que es conveniente que podamos expresar toda la línea de tiempo como un code procedural. Entonces, usaremos los pasos de Ingest dentro de esta función. Estamos aquí, como puedes ver, estamos usando un paso de Ingest que se ejecuta. De esta manera, el code se volverá a intentar automáticamente si falla. Pero el code que se ejecuta correctamente nunca se volverá a intentar. Lo veremos en acción en un momento. Y primero, estamos enviando un correo electrónico de bienvenida. Esta es la misma parte, la misma parte que hicimos antes. Luego, Ingest pausará la ejecución de esta función durante cuatro días. Para esto, estamos usando step.sleep. Desde la perspectiva de un programador, se ve similar a poner un tiempo de espera, pero en realidad, en segundo plano, Ingest se encarga de la programación por ti. Entonces, esto significa que tu función serverless no se ejecuta durante cuatro días. Entonces, no tienes que vender tu riñón para pagar tu factura de AWS. Y el último paso es el correo electrónico final con tips. Si hay un fallo en uno de los pasos, Ingest sabrá que los otros pasos funcionaron y solo volverá a intentar ese paso hasta que funcione. Entonces, ahora hemos construido una exitosa campaña de goteo y nos merecemos un aplauso. Pero en realidad podemos hacerlo mejor. Imagina que alguien ya se ha registrado e inmediatamente ha realizado una reserva. No tendría sentido que recibieran el mismo correo electrónico que alguien que no finalizó una reserva. Tal vez necesiten diferentes tipos de tips o diferentes llamadas a la acción. La campaña podría ser realmente dinámica según las acciones del usuario. Entonces, hagámoslo. Eliminemos los dos últimos pasos. En otro lugar de tu aplicación, cuando el usuario completa una reserva, se envía un evento llamado booking.created, al igual que user.signup. Entonces, ahora usamos este evento para determinar el curso de acción. Aquí, esperamos cuatro días para ver si este evento incluso sucederá. A continuación, usaremos un evento de reserva para determinar el curso de acción. Si se realizó la reserva, recompensaremos

9. Expanding the Scope of Ingest

Short description:

Si se realizó la reserva, recompensaremos a esta persona con consejos para usuarios avanzados. Hay numerosos casos de uso que van más allá de las campañas de marketing. Puedes construir flujos de pago complejos, LLM, encadenamiento de comandos o transformación de datos en múltiples pasos. Ingest también es independiente del framework y del lenguaje.

Recompensaremos a esta persona con consejos para usuarios avanzados. Y, bueno, si necesitan cuatro días para hacer una reserva, necesitarán algunos consejos básicos. Y esto es realmente divertido, por eso me detuve ahí. Podrías volverte loco y crear muchos correos electrónicos con muchos consejos. Y hablando de consejos, todo esto es solo la punta del iceberg. Aquí estamos hablando de enviar correos electrónicos. Pero Ingest no es solo una herramienta para enviar correos electrónicos. Hay numerosos casos de uso que van más allá de las campañas de marketing. Puedes construir flujos de pago complejos, LLM, encadenamiento de comandos o transformación de datos en múltiples pasos. Siempre que necesites que ocurran muchas cosas en respuesta a un evento dado, puedes considerar Ingest. Por ejemplo, SoundCloud utiliza Ingest para agilizar la generación de videos dinámicos. Y luego, AOMNI ha utilizado Ingest para construir ventas impulsadas por IA utilizando LLM sin servidor. Resend, la plataforma de envío de correos electrónicos que en realidad utilizamos en el ejemplo anterior, utiliza Ingest para verificar los dominios de correo electrónico con flujos de trabajo sin servidor. Simplemente funciona en cualquier nube, Vercel, Netlify, tú lo nombras. Además, también puedes integrar, puedes migrar de una nube a otra sin tiempo de inactividad. Aquí tienes una publicación de blog,

10. Expanding SDKs and Importance of Reliability

Short description:

Recientemente agregamos soporte para BAN y ASTRA. Nuestros SDK están disponibles para TypeScript, Python y Go, con planes de agregar más. Combina y combina los SDK en tus flujos de trabajo e invoca funciones escritas en un lenguaje desde otro. También tenemos un servidor de desarrollo local para facilitar las pruebas. Construir sistemas confiables es crucial para la satisfacción del usuario y la productividad del equipo. Ingest sirve como una capa de confiabilidad, pero tarde o temprano necesitarás una solución. La confiabilidad debe considerarse desde el principio en las elecciones arquitectónicas. Gracias.

si tienes curiosidad. Ingest también es agnóstico de framework. Aquí hay solo algunos de ellos. Pero también hemos agregado recientemente soporte para BAN y ASTRA, por ejemplo. Y finalmente, también es agnóstico de lenguaje. En este ejemplo, vimos mucho TypeScript y type safety. Pero además de TypeScript, también tenemos SDK para Python y Go. También estamos buscando agregar más. Y por cierto, nuestra especificación de SDK es de código abierto y estamos invitando contribuciones. Y dato curioso, también puedes combinar y combinar todos esos SDK en tus flujos de trabajo e invocar funciones escritas en un lenguaje en otro. También hay, finalmente, un servidor de desarrollo local, que no requiere que inicies sesión, por lo que puedes verlo ahora mismo. Pero, sabes, aquí hablé mucho sobre Ingest. Pero esta charla no se trata solo de Ingest. Al construir aplicaciones de producción del mundo real, la confiabilidad es realmente importante. No solo mantiene a tus usuarios felices, sino que también hace que tu equipo sea más productivo. Y tú como desarrollador te ves menos obstaculizado por el mantenimiento y las operaciones. Lograr la confiabilidad es difícil. Cada ingeniero que alguna vez ha tenido que construir un sistema confiable a gran escala conoce la cantidad de iteración e infraestructura que implica. En este ejemplo, usamos Ingest como la capa de confiabilidad. Pero ya sea que uses soluciones de terceros o no, tarde o temprano terminarás necesitando una. La confiabilidad es como la security. Es difícil agregarla después. Entonces, incorporarla en tus elecciones arquitectónicas desde el principio generalmente es una buena idea. Y sí, gracias a todos. Si quieres comunicarte conmigo o ser amigos, aquí es donde puedes encontrarme. 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

Vite: Rethinking Frontend Tooling
JSNation Live 2021JSNation Live 2021
31 min
Vite: Rethinking Frontend Tooling
Top Content
Vite is a new build tool that intends to provide a leaner, faster, and more friction-less workflow for building modern web apps. This talk will dive into the project's background, rationale, technical details and design decisions: what problem does it solve, what makes it fast, and how does it fit into the JS tooling landscape.
React Compiler - Understanding Idiomatic React (React Forget)
React Advanced Conference 2023React Advanced Conference 2023
33 min
React Compiler - Understanding Idiomatic React (React Forget)
Top Content
React provides a contract to developers- uphold certain rules, and React can efficiently and correctly update the UI. In this talk we'll explore these rules in depth, understanding the reasoning behind them and how they unlock new directions such as automatic memoization. 
How Bun Makes Building React Apps Simpler & Faster
React Day Berlin 2022React Day Berlin 2022
9 min
How Bun Makes Building React Apps Simpler & Faster
Bun’s builtin JSX transpiler, hot reloads on the server, JSX prop punning, macro api, automatic package installs, console.log JSX support, 4x faster serverside rendering and more make Bun the best runtime for building React apps
The Inner Workings of Vite Build
DevOps.js Conf 2022DevOps.js Conf 2022
31 min
The Inner Workings of Vite Build
Vite unbundled ESM dev server and fast HMR are game-changing for DX. But Vite also shines when building your production applications.This talk will dive into how the main pieces fit together to bundle and minify your code:Vite build as an opinionated Rollup setup.How esbuild is used as a fast TS and JSX transpile and a minifier.The production plugins pipeline.Modern frameworks (Nuxt, SvelteKit, Astro, among others) have chosen Vite, augmenting the DX and optimizations for their target use case.We'll discover Vite as a polished and extendable toolkit to craft optimized modern apps.

Workshops on related topic

Using CodeMirror to Build a JavaScript Editor with Linting and AutoComplete
React Day Berlin 2022React Day Berlin 2022
86 min
Using CodeMirror to Build a JavaScript Editor with Linting and AutoComplete
Top Content
WorkshopFree
Hussien Khayoon
Kahvi Patel
2 authors
Using a library might seem easy at first glance, but how do you choose the right library? How do you upgrade an existing one? And how do you wade through the documentation to find what you want?
In this workshop, we’ll discuss all these finer points while going through a general example of building a code editor using CodeMirror in React. All while sharing some of the nuances our team learned about using this library and some problems we encountered.
Building a Hyper Fast Web Server with Deno
JSNation Live 2021JSNation Live 2021
156 min
Building a Hyper Fast Web Server with Deno
WorkshopFree
Matt Landers
Will Johnston
2 authors
Deno 1.9 introduced a new web server API that takes advantage of Hyper, a fast and correct HTTP implementation for Rust. Using this API instead of the std/http implementation increases performance and provides support for HTTP2. In this workshop, learn how to create a web server utilizing Hyper under the hood and boost the performance for your web apps.
Database Workflows & API Development with Prisma
Node Congress 2022Node Congress 2022
98 min
Database Workflows & API Development with Prisma
WorkshopFree
Nikolas Burk
Nikolas Burk
Prisma is an open-source ORM for Node.js and TypeScript. In this workshop, you’ll learn the fundamental Prisma workflows to model data, perform database migrations and query the database to read and write data. You’ll also learn how Prisma fits into your application stack, building a REST API and a GraphQL API from scratch using SQLite as the database.
Table of contents:
- Setting up Prisma, data modeling & migrations- Exploring Prisma Client to query the database- Building REST API routes with Express- Building a GraphQL API with Apollo Server
Building a GraphQL-native serverless backend with Fauna
GraphQL Galaxy 2021GraphQL Galaxy 2021
143 min
Building a GraphQL-native serverless backend with Fauna
WorkshopFree
Rob Sutter
Shadid Haque
2 authors
Welcome to Fauna! This workshop helps GraphQL developers build performant applications with Fauna that scale to any size userbase. You start with the basics, using only the GraphQL playground in the Fauna dashboard, then build a complete full-stack application with Next.js, adding functionality as you go along.

In the first section, Getting started with Fauna, you learn how Fauna automatically creates queries, mutations, and other resources based on your GraphQL schema. You learn how to accomplish common tasks with GraphQL, how to use the Fauna Query Language (FQL) to perform more advanced tasks.

In the second section, Building with Fauna, you learn how Fauna automatically creates queries, mutations, and other resources based on your GraphQL schema. You learn how to accomplish common tasks with GraphQL, how to use the Fauna Query Language (FQL) to perform more advanced tasks.
Building GraphQL APIs With The Neo4j GraphQL Library
GraphQL Galaxy 2021GraphQL Galaxy 2021
175 min
Building GraphQL APIs With The Neo4j GraphQL Library
WorkshopFree
William Lyon
William Lyon
This workshop will explore how to build GraphQL APIs backed Neo4j, a native graph database. The Neo4j GraphQL Library allows developers to quickly design and implement fully functional GraphQL APIs without writing any resolvers. This workshop will show how to use the Neo4j GraphQL Library to build a Node.js GraphQL API, including adding custom logic and authorization rules.

Table of contents:
- Overview of GraphQL and building GraphQL APIs
- Building Node.js GraphQL APIs backed a native graph database using the Neo4j GraphQL Library
- Adding custom logic to our GraphQL API using the @cypher schema directive and custom resolvers
- Adding authentication and authorization rules to our GraphQL API