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.

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.

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: Repensando las Herramientas de Frontend
JSNation Live 2021JSNation Live 2021
31 min
Vite: Repensando las Herramientas de Frontend
Top Content
Vite is a next-generation build tool that leverages native ES modules for improved performance. It eliminates the need for bundling and improves hot module replacement. Vite provides an opinionated default configuration while still allowing advanced customization through plugins. It is framework agnostic and can be used for React and other applications. Vite is being adopted by Next.js and Create React App, and integration with Nuxt 3 offers significant speed improvements.
Compilador React Forget - Entendiendo React Idiomático
React Advanced 2023React Advanced 2023
33 min
Compilador React Forget - Entendiendo React Idiomático
Top Content
Joe Savona
Mofei Zhang
2 authors
The Talk discusses React Forget, a compiler built at Meta that aims to optimize client-side React development. It explores the use of memoization to improve performance and the vision of Forget to automatically determine dependencies at build time. Forget is named with an F-word pun and has the potential to optimize server builds and enable dead code elimination. The team plans to make Forget open-source and is focused on ensuring its quality before release.
Turbopack. ¿Por qué? ¿Cómo? ¿Cuándo? y la Visión...
React Day Berlin 2022React Day Berlin 2022
32 min
Turbopack. ¿Por qué? ¿Cómo? ¿Cuándo? y la Visión...
The Talk discusses TurboPack, a successor to Webpack, aiming to create a framework-independent, flexible, and extensible tool for the open-source community. It addresses performance challenges by integrating SWC into Next.js. The challenges with Next.js and Webpack include orchestration issues, backward compatibility constraints, and cache invalidation problems. TurboEngine and TurboPack provide constant performance in incremental builds, leveraging Rust's predictable performance and parallelism. The Talk also covers topics like dependency tracking, task graphs, cache invalidation, lazy asset graphs, and the integration of TurboPack with Next.js. The future plans involve reconfiguring Webpack and TurboEngine, moving computations to the cloud, providing insights into builds, and facilitating migration and integration with JavaScript projects.
Cómo Bun hace que la construcción de aplicaciones React sea más simple y rápida
React Day Berlin 2022React Day Berlin 2022
9 min
Cómo Bun hace que la construcción de aplicaciones React sea más simple y rápida
BUN is a modern all-in-one JavaScript runtime environment that achieves new levels of performance. It includes BUN dev, a fast front-end dev server, BUN install, a speedy package manager, and BUN run, a fast package runner. BUN supports JSX, has optimized React server-side rendering, and offers hot module reloading on the server. The priorities for BUN include stability, node compatibility, documentation improvement, missing features in BUN install, AST plugin API, native Windows support, Bundler and Minifier optimization, and easier deployment to production. BUN's AST plugin API allows for bundle-time JavaScript execution and embedding code, potentially inspiring new frameworks.
El Núcleo de Turbopack Explicado (Codificación en Vivo)
JSNation 2023JSNation 2023
29 min
El Núcleo de Turbopack Explicado (Codificación en Vivo)
Tobias Koppers introduces TurboPack and TurboEngine, addressing the limitations of Webpack. He demonstrates live coding to showcase the optimization of cache validation and build efficiency. The talk covers adding logging and memorization, optimizing execution and tracking dependencies, implementing invalidation and watcher, and storing and deleting invalidators. It also discusses incremental compilation, integration with other monorepo tools, error display, and the possibility of a plugin system for Toolpag. Lastly, the comparison with Bunn's Builder is mentioned.
El funcionamiento interno de la construcción de Vite
DevOps.js Conf 2022DevOps.js Conf 2022
31 min
El funcionamiento interno de la construcción de Vite
Welcome to vidBuild, a tool that optimizes your application for production by offering fast hodgemodule replacement and support for various technologies. The build process in vidBuild involves optimizing and minifying assets, bundling JS and CSS, and generating chunks for dynamic imports. The pipeline in vidBuild includes plugins for alias, resolution, CSS modules, and asset handling. Vid is a complete build tool with a flexible plugin system and support from a vibrant community. Vite's plugin API is compatible with Rollup, and Vite aims for simplicity while pushing complexity to the plugin system.

Workshops on related topic

Uso de CodeMirror para construir un editor de JavaScript con Linting y AutoCompletado
React Day Berlin 2022React Day Berlin 2022
86 min
Uso de CodeMirror para construir un editor de JavaScript con Linting y AutoCompletado
Top Content
WorkshopFree
Hussien Khayoon
Kahvi Patel
2 authors
Usar una biblioteca puede parecer fácil a primera vista, pero ¿cómo eliges la biblioteca correcta? ¿Cómo actualizas una existente? ¿Y cómo te abres camino a través de la documentación para encontrar lo que quieres?
En esta masterclass, discutiremos todos estos puntos finos mientras pasamos por un ejemplo general de construcción de un editor de código usando CodeMirror en React. Todo mientras compartimos algunas de las sutilezas que nuestro equipo aprendió sobre el uso de esta biblioteca y algunos problemas que encontramos.
Construyendo un Servidor Web Hiper Rápido con Deno
JSNation Live 2021JSNation Live 2021
156 min
Construyendo un Servidor Web Hiper Rápido con Deno
WorkshopFree
Matt Landers
Will Johnston
2 authors
Deno 1.9 introdujo una nueva API de servidor web que aprovecha Hyper, una implementación rápida y correcta de HTTP para Rust. El uso de esta API en lugar de la implementación std/http aumenta el rendimiento y proporciona soporte para HTTP2. En este masterclass, aprende cómo crear un servidor web utilizando Hyper en el fondo y mejorar el rendimiento de tus aplicaciones web.
Flujos de base de datos y desarrollo de API con Prisma
Node Congress 2022Node Congress 2022
98 min
Flujos de base de datos y desarrollo de API con Prisma
WorkshopFree
Nikolas Burk
Nikolas Burk
Prisma es un ORM de código abierto para Node.js y TypeScript. En esta masterclass, aprenderás los flujos de trabajo fundamentales de Prisma para modelar datos, realizar migraciones de base de datos y consultar la base de datos para leer y escribir datos. También aprenderás cómo Prisma se integra en tu stack de aplicaciones, construyendo una API REST y una API GraphQL desde cero utilizando SQLite como base de datos.
Tabla de contenidos:
- Configuración de Prisma, modelado de datos y migraciones- Explorando Prisma Client para consultar la base de datos- Construyendo rutas de API REST con Express- Construyendo una API GraphQL con Apollo Server
Construyendo un backend serverless nativo de GraphQL con Fauna
GraphQL Galaxy 2021GraphQL Galaxy 2021
143 min
Construyendo un backend serverless nativo de GraphQL con Fauna
WorkshopFree
Rob Sutter
Shadid Haque
2 authors
¡Bienvenido a Fauna! Este masterclass ayuda a los desarrolladores de GraphQL a construir aplicaciones de alto rendimiento con Fauna que se escalan a cualquier tamaño de base de usuarios. Comienzas con lo básico, utilizando solo el playground de GraphQL en el panel de Fauna, luego construyes una aplicación completa de pila completa con Next.js, agregando funcionalidad a medida que avanzas.

En la primera sección, Comenzando con Fauna, aprendes cómo Fauna crea automáticamente consultas, mutaciones y otros recursos basados en tu esquema de GraphQL. Aprendes cómo realizar tareas comunes con GraphQL, cómo usar el lenguaje de consulta de Fauna (FQL) para realizar tareas más avanzadas.

En la segunda sección, Construyendo con Fauna, aprendes cómo Fauna crea automáticamente consultas, mutaciones y otros recursos basados en tu esquema de GraphQL. Aprendes cómo realizar tareas comunes con GraphQL, cómo usar el lenguaje de consulta de Fauna (FQL) para realizar tareas más avanzadas.
Construyendo APIs GraphQL con la biblioteca Neo4j GraphQL
GraphQL Galaxy 2021GraphQL Galaxy 2021
175 min
Construyendo APIs GraphQL con la biblioteca Neo4j GraphQL
WorkshopFree
William Lyon
William Lyon
Este masterclass explorará cómo construir APIs GraphQL respaldadas por Neo4j, una base de datos de grafos nativa. La biblioteca Neo4j GraphQL permite a los desarrolladores diseñar e implementar rápidamente APIs GraphQL completamente funcionales sin escribir ningún resolvedor. Este masterclass mostrará cómo utilizar la biblioteca Neo4j GraphQL para construir una API GraphQL en Node.js, incluyendo la adición de lógica personalizada y reglas de autorización.

Tabla de contenidos:
- Visión general de GraphQL y construcción de APIs GraphQL
- Construcción de APIs GraphQL en Node.js respaldadas por una base de datos de grafos nativa utilizando la biblioteca Neo4j GraphQL
- Adición de lógica personalizada a nuestra API GraphQL utilizando la directiva de esquema @cypher y resolvedores personalizados
- Adición de reglas de autenticación y autorización a nuestra API GraphQL