Construyendo Aplicaciones Multijugador con Cloudflare Workers y Durable Objects

Spanish audio is available in the player settings
Rate this content
Bookmark

Los Durable Objects, parte de la plataforma Cloudflare Workers, son la solución para un almacenamiento y coordinación fuertemente consistentes en el borde. En esta charla, aprenderás sobre los Durable Objects, por qué son adecuados para casos de uso colaborativos y cómo construir aplicaciones multijugador con ellos!

This talk has been presented at Node Congress 2023, check out the latest edition of this JavaScript Conference.

FAQ

Los Durable Objects en CloudFlare son una abstracción que aplica la filosofía serverless al estado y la coordinación. Permiten escribir una clase JavaScript con un método FetchHandler que se invoca en instancias de esa clase, facilitando la creación de aplicaciones colaborativas escalables como editores de documentos y servidores de juegos.

Los Durable Objects utilizan una API de almacenamiento persistente específica para cada instancia, basada en una interfaz de clave-valor con semánticas fuertemente consistentes. Esta API permite realizar operaciones de almacenamiento que son localmente coherentes y optimizadas para el rendimiento.

La plataforma de workers de CloudFlare permite ejecutar código JavaScript en una infraestructura global sin servidores, utilizando un tiempo de ejecución propio basado en el motor V8. Los workers son multitenant y ejecutan código en aislamientos V8, ofreciendo despliegue global inmediato y alta eficiencia en el arranque en frío.

Los Durable Objects aseguran la coordinación a través de un sistema de ID único global que permite a múltiples workers referenciar y interactuar con la misma instancia de un objeto duradero, garantizando así un punto de coordinación único y consistente para operaciones colaborativas.

El modelo de facturación para los Durable Objects se basa en la duración del tiempo que el objeto está manejando una solicitud activa. No se factura por tiempo de inactividad o cuando el objeto está dormido, solo por el tiempo de procesamiento activo.

Cada Durable Object es un único hilo de ejecución de JavaScript. Si un Durable Object individual necesita manejar una carga de trabajo significativa continuamente, puede no ser el enfoque adecuado. La plataforma está diseñada para aplicaciones que pueden dividirse en múltiples objetos duraderos con cargas moderadas.

Los Durable Objects utilizan 'IO Gates' que previenen condiciones de carrera y aseguran la consistencia del estado. Las puertas de entrada bloquean nuevos eventos mientras el objeto está esperando en el almacenamiento, y las puertas de salida previenen salidas de mensajes de red durante escrituras de almacenamiento pendientes.

Si un Durable Object está continuamente ocupado, puede experimentar retrasos en responder a nuevas solicitudes. Los Durable Objects tienen mecanismos de manejo de fallos que reinician el objeto en caso de que las operaciones de almacenamiento subyacente fallen o se excedan los tiempos de espera.

Matt Alonso
Matt Alonso
28 min
14 Apr, 2023

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Los Durable Objects son parte del objetivo a largo plazo de CloudFlare para expandir las posibilidades de las aplicaciones en los workers, permitiendo la construcción de aplicaciones colaborativas escalables. Los Durable Objects proporcionan una forma de almacenar el estado global y coordinar aplicaciones multi-cliente. Pueden ser creados lo más cerca posible del usuario y tienen IDs únicos para el enrutamiento de solicitudes. Los Durable Objects tienen una API de almacenamiento persistente con semántica fuertemente consistente y compuertas de IO para prevenir errores de corrección. Son adecuados para aplicaciones colaborativas y pueden ser usados con WebSockets. El impacto en el rendimiento y las réplicas de lectura son consideraciones para acceder a los Durable Objects a nivel global.

1. Introducción a los Durable Objects

Short description:

Soy Matt Alonzo, un ingeniero de software en CloudFlare. Trabajo en el equipo de datos distribuidos de los trabajadores y tengo una amplia experiencia con los durable objects. Los Durable Objects son parte del objetivo a largo plazo de CloudFlare para expandir las posibilidades de las aplicaciones en los trabajadores. No son solo un producto de almacenamiento, sino también ideales para construir aplicaciones colaborativas escalables como editores de documentos, servidores de juegos y salas de chat.

Soy Matt Alonzo y soy un ingeniero de software en CloudFlare. Trabajo en el equipo de datos distribuidos de los trabajadores que mantiene los durable objects. Trabajé en CloudFlare durante casi tres años y pasé casi todo el tiempo trabajando en durable objects. Estoy muy familiarizado con ellos. Y los durable objects son parte de un objetivo a largo plazo para CloudFlare donde estamos tratando de expandir los tipos de aplicaciones que los clientes pueden construir sobre los trabajadores. Y los durable objects se han pensado como una especie de producto de almacenamiento que se añade a esto. Puedes almacenar estado-en-el-borde en los durable objects, pero hay mucho más en ellos que solo eso. Los durable objects también son realmente adecuados para construir aplicaciones colaborativas infinitamente escalables como editores de documentos, servidores de juegos y salas de chat, y esta charla es toda sobre analizar por qué.

2. Resumen de Workers y Durable Objects

Short description:

Voy a hablar sobre los workers, dar un rápido resumen. Hablaré sobre los durable objects, su API y coordinación. Tengo un estudio de caso y una demostración. Workers es la plataforma de JavaScript sin servidor de Cloudflare. Utiliza su propio tiempo de ejecución y se ejecuta a nivel mundial. Está implementado con aislamientos V8, lo que permite una ejecución de código eficiente. Así es como los workers pueden existir hoy.

Si alguien tiene alguna pregunta después de la charla, no dude en enviarme un correo electrónico o contactarme en mis redes sociales. Y entonces, voy a tratar algunos temas hoy. Voy a hablar sobre los workers, dar un rápido resumen de ellos. Voy a hablar sobre los durable objects, qué son, cómo se ve la API y luego voy a hablar sobre la coordinación. ¿Por qué son útiles los durable objects para la coordinación? ¿Por qué querrías usarlos? Y luego tengo un poco de un case study, una aplicación que construí sobre los durable objects, y luego si todo va bien, haré una demostración de ella.

Y entonces, workers es la plataforma JavaScript serverless de Cloudflare. La idea es que escribas un manejador de fetch como este de arriba, que toma un objeto de solicitud, hace algún trabajo y devuelve una respuesta. Y entonces tomas tu code de worker, lo subes a Cloudflare, y nosotros nos encargamos del resto. Esto es bastante similar a muchas otras plataformas serverless, pero hay algunas grandes diferencias con los workers. Los workers usan su propio tiempo de ejecución, y los workers no se ejecutan en regiones. Realmente, solo hay una región con los workers. Es la Tierra. Despliegas una vez, y tu code se ejecuta en cualquiera de las ubicaciones de red de Cloudflare en todo el mundo. Cuando usas workers, tu dominio también está utilizando los productos CDN de Cloudflare, y por lo tanto las consultas DNS a tu dominio devuelven una IP Anycast de Cloudflare. Cuando envías tráfico a una IP Anycast en una de las de Cloudflare, va a ir al centro de datos de Cloudflare más cercano, sin importar dónde estés en el mundo. Y entonces esto significa que cuando haces una solicitud a un worker de Cloudflare, se va a ejecutar cerca de ti en el centro de datos de Cloudflare más cercano, sin importar desde dónde estés haciendo la solicitud. Y este mapa aquí es un mapa del último que pude encontrar de todas las ubicaciones de Cloudflare alrededor del mundo. Como puedes ver, es bastante difícil estar lejos de un lugar donde los workers pueden ejecutarse, a menos que estés en medio de la selva o algo así.

Y entonces una parte central de poder ejecutar code de esta manera en el borde de Cloudflare es la forma en que los workers están implementados es muy diferente de otras plataformas serverless. Tenemos nuestro propio tiempo de ejecución de JavaScript construido sobre V8. Y este es el mismo motor de JavaScript utilizado por Node.js y Chromium. Y en lugar de implementar la multi-tenencia iniciando múltiples instancias de tiempo de ejecución como funcionan otras plataformas serverless, lo que hacen los workers es que implementamos la multi-tenencia con aislamientos V8. Esta es una característica de V8 que te permite ejecutar code separado, todo en el mismo proceso. Y entonces ejecutamos el code de varios clientes en el mismo proceso del sistema operativo, todos corren en diferentes aislamientos, y están completamente aislados entre sí, no pueden interferir con cada uno, cambiar el estado global, o algo así. Y entonces los aislamientos son mucho más baratos de iniciar que todo un proceso del sistema operativo. Y entonces cuando una solicitud para un worker en frío llega al tiempo de ejecución del worker, detectamos un nuevo aislamiento. Y esto solo toma unos pocos milisegundos, en comparación con cientos de milisegundos para iniciar en frío todo un tiempo de ejecución. Y esto es realmente importante para los workers. No sería posible para nosotros ejecutar todo un tiempo de ejecución por cliente en el Edge. Esta idea es cómo los workers son capaces de existir hoy.

QnA

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

Viviendo al Límite
React Advanced Conference 2021React Advanced Conference 2021
36 min
Viviendo al Límite
The Talk discusses the future of React and introduces new APIs, including streaming rendering and server components. React Suspense allows for asynchronous loading of components and data fetching. The use of serverless computing, specifically Cloudflare Workers, is explored as a way to improve performance. The Talk emphasizes the potential for simplifying the React ecosystem and the excitement about the new API.
Acceso a la base de datos en el Edge con Cloudflare Workers y Prisma
Node Congress 2022Node Congress 2022
31 min
Acceso a la base de datos en el Edge con Cloudflare Workers y Prisma
This Talk discusses database access on the edge with CloudFlare workers and the challenges of serverless platforms. It explores solutions for database access, including CloudFlare-specific solutions and using Prisma data proxy. The Prisma toolkit and demo are showcased, demonstrating how to convert an application to use a database. The process of setting up Prisma Data Platform and deploying the application to CloudFlare workers is explained. The Talk concludes with insights on database usage and the differences between serverless, CDN, and the Edge.
Sitios web estáticos primero con Cloudflare Workers
Node Congress 2022Node Congress 2022
30 min
Sitios web estáticos primero con Cloudflare Workers
The Talk covers the historical landscape of web development, the rise of static site generators, the serverless revolution, edge computing, and using Cloudflare services to enhance static websites. It explores the challenges of early web development, the shift to static sites and client-side rendering, and the advantages of server-side and client-side rendering. It also discusses Cloudflare services like Cloudflare workers, KV, durable objects, and HTML rewriter for building fast and minimal hosting solutions. The Talk highlights the use of DurableObjects for analytics and integration, dynamic content on static sites, JAMstack, and the advantages of using Cloudflare Workers for automatic deployment, multiple language support, and combining static pages with JavaScript functions. It introduces the concept of edge computing and the difference between Cloudflare Pages and Workers. It also touches on error handling and the use of HTML rewriter, Cloudflare KVstore, and DurableObjects for managing state and storing dynamic data.
Automatiza el Navegador con la API de Renderizado del Navegador de Workers
JSNation 2024JSNation 2024
20 min
Automatiza el Navegador con la API de Renderizado del Navegador de Workers
The Talk discusses browser automation using the Worker's Browser Rendering API, which allows tasks like navigating websites, taking screenshots, and creating PDFs. Cloudflare integrated Puppeteer with their workers to automate browser tasks, and their browser rendering API combines remote browser isolation with Puppeteer. Use cases for the API include taking screenshots, generating PDFs, automating web applications, and gathering performance metrics. The Talk also covers extending sessions and performance metrics using Durable Objects. Thank you for attending!
El Futuro de los Runtimes de JavaScript
Node Congress 2022Node Congress 2022
34 min
El Futuro de los Runtimes de JavaScript
Today's Talk explores the future of JavaScript runtimes, their evolution, and impact on software development. It discusses the historical trends of JavaScript, the adoption of new tools and libraries, and the convergence of Node and Deno. The emergence of isolate clouds and their potential to replace traditional VMs and containers is also highlighted. Additionally, the talk touches on the possibilities of JavaScript in exotic use cases, its impact on machine learning, and the potential for TypeScript to become the de facto language for JavaScript development.
Construyendo aplicaciones full-stack en el Edge
React Advanced Conference 2022React Advanced Conference 2022
9 min
Construyendo aplicaciones full-stack en el Edge
This Talk explores building full stack applications on the edge and the blurring line between front end and back end development. It discusses the benefits of using the JAMstack and APIs for scalable web development. The Talk also highlights the improvements in edge technology, such as serverless functions and efficient data storage, and the deployment of functions and durable objects on the edge network. Overall, the Talk emphasizes the importance of delivering high-quality experiences with low latency through edge computing.

Workshops on related topic