Cloudflare Dynamic Workers: Sandboxes 100 veces más rápidos

BBetter Stack
AI/미래기술창업/스타트업컴퓨터/소프트웨어

Transcript

00:00:00(música animada)
00:00:01Cloudflare ha anunciado recientemente los "dynamic workers",
00:00:04una primitiva de worker de bajo nivel
00:00:06que un worker ya existente puede crear mediante programación.
00:00:09Son cien veces más rápidos y eficientes en memoria
00:00:12que un contenedor tradicional, ya que se ejecutan en V8 isolates.
00:00:16Y como son tan baratos,
00:00:18puedes generar tantos como quieras
00:00:20para ejecutar código generado por IA, vistas previas de desarrollo,
00:00:23automatizaciones personalizadas y mucho más.
00:00:25Incluso dijeron que puedes ejecutar un millón de dynamic workers
00:00:29por segundo si quisieras.
00:00:31Pero, ¿el hecho de que solo se pueda ejecutar
00:00:33JavaScript en ellos limita su uso?
00:00:36Suscríbete y vamos a descubrirlo.
00:00:37(música animada)
00:00:40El año pasado hice un video sobre los sandboxes de Cloudflare,
00:00:44que son básicamente contenedores Linux de corta duración
00:00:47que se ejecutan sobre un "durable object".
00:00:49Si eso no te ha dicho nada,
00:00:50entonces ve a echarle un vistazo al video.
00:00:52Pero son perfectos si quieres un contenedor de SO completo
00:00:55con sistema de archivos y la capacidad de ejecutar casi cualquier lenguaje
00:00:59y cualquier binario.
00:01:01Pero si quieres algo un poco más rápido,
00:01:03en realidad mucho más rápido y mucho más ligero,
00:01:06con la capacidad de ejecutar sandboxes concurrentes ilimitados
00:01:09en algo que tiene los mismos límites que un worker normal,
00:01:12entonces quizás prefieras un dynamic worker.
00:01:15Veamos cómo configurar uno.
00:01:16Aquí hay un worker básico que acabo de crear con Wrangler,
00:01:19lleno de algunos errores de TypeScript,
00:01:21tal vez porque olvidé ejecutar los tipos de Wrangler.
00:01:23Pero en nuestro archivo de configuración de Wrangler,
00:01:26he añadido este array "worker_loaders"
00:01:28con un binding llamado "loader".
00:01:30Puedes llamarlo como quieras,
00:01:32pero elegí "loader" porque es más convencional.
00:01:34Y este binding nos permite crear
00:01:37y controlar otros workers.
00:01:38En el código actualizado, tenemos una nueva constante de worker,
00:01:42que utiliza el binding del loader con estos valores.
00:01:45Puedes imaginar esto como un archivo de configuración de Wrangler
00:01:49para el worker anidado,
00:01:50donde la fecha de compatibilidad le indica al worker
00:01:53qué versión del entorno de ejecución debe usar.
00:01:55Y aquí está el código que va a ejecutar.
00:01:57Como puedes ver, el código es muy similar
00:01:59al de un propio worker.
00:02:00Tiene una función fetch
00:02:02con los argumentos request, env y context.
00:02:05Y todo lo que hace aquí es responder
00:02:06con "hello world from the sandbox".
00:02:08Luego hemos impedido todo acceso a la red,
00:02:10ejecutando la función fetch con los argumentos de la solicitud
00:02:13del worker inicial y devolviendo los resultados.
00:02:16Si ejecutamos nuestro worker localmente y hacemos curl a localhost,
00:02:19deberíamos ver "hello from the sandbox".
00:02:21Pero si volvemos a ejecutar esa misma solicitud curl,
00:02:24obtendremos un error.
00:02:24Y esto se debe a que ahora mismo
00:02:26estamos cargando un worker totalmente nuevo.
00:02:28Pero lo que podemos hacer en su lugar es obtener un worker existente,
00:02:31al que daremos el nombre de "worker one",
00:02:33y luego ejecutar el código como una función asíncrona.
00:02:35Esto significa que ahora si ejecutamos curl, obtenemos "hello from the sandbox".
00:02:38Pero si lo ejecutamos de nuevo, obtiene la información
00:02:41del sandbox de "worker one" ya existente.
00:02:43Lo que acabo de mostrar
00:02:45ha sido, por supuesto, un ejemplo muy sencillo,
00:02:47pero se pueden hacer cosas geniales con los dynamic workers
00:02:50como definir bindings personalizados,
00:02:52como este método post de chatroom para crear un stub,
00:02:55con el que el worker se comunica usando cap'n proto,
00:02:57sobre el cual, sí, ya hemos hecho un video,
00:02:59así que ve a verlo si te interesa.
00:03:00Puedes usar dependencias de NPM como Hono
00:03:03y empaquetarlas usando la función "create worker".
00:03:05E incluso puedes interceptar solicitudes salientes
00:03:08para hacer cosas como inyectar credenciales.
00:03:10Pero uno de los grandes motivos para usar dynamic workers
00:03:13es ejecutar código generado por agentes de IA.
00:03:17Así que vamos a intentar hacerlo.
00:03:18Aquí hay algo de código del recetario de E2B
00:03:21que utiliza el SDK de Anthropic para ejecutar Sonnet 3.5
00:03:25con este prompt de sistema y una herramienta personalizada
00:03:28para ejecutar algo de Python en un cuaderno Jupyter.
00:03:31La forma en que esto funciona es que detectará
00:03:33cuándo se utiliza la herramienta personalizada
00:03:34y luego la ejecutará dentro del sandbox de E2B,
00:03:38cuyo código podemos ver por aquí.
00:03:40Ahora lo ejecuta con este prompt muy específico
00:03:42para calcular el valor de pi usando el método de Montecarlo
00:03:46en mil iteraciones.
00:03:47Y como tiene acceso al sistema de archivos,
00:03:50puede crear este archivo image.png
00:03:52y guardarlo para que el usuario lo descargue
00:03:54o para lo que el usuario quiera.
00:03:56Desafortunadamente, los dynamic workers no tienen acceso
00:03:58a un sistema de archivos,
00:04:00aunque pueden crear uno virtual
00:04:02con esta librería de shell.
00:04:04Pero debido a que se ejecutan a través de un worker,
00:04:06podemos proporcionarle detalles como un bucket R2,
00:04:08que es la versión de S3 de Cloudflare,
00:04:11en el que se puede guardar la imagen.
00:04:12Si miramos el código,
00:04:14que es similar al de E2B,
00:04:16primero podemos ver el prompt de sistema que se está utilizando.
00:04:19Y la herramienta personalizada de ejecución de Python
00:04:22que en este caso no utiliza un cuaderno Jupyter,
00:04:25pero sí genera un SVG de los visuales.
00:04:28Y aquí tenemos el código para el worker
00:04:30que, además de ejecutar JavaScript, también puede ejecutar Python.
00:04:33Podemos ver aquí que está usando Sonnet 3.5.
00:04:35Aquí está el prompt que se utiliza.
00:04:37Aquí el código del agente se ejecuta en el sandbox.
00:04:41Y la respuesta del sandbox
00:04:43vuelve al worker principal,
00:04:45que busca en ella el código SVG
00:04:47y luego lo guarda en R2.
00:04:49Si visitamos esa URL, tarda un poco,
00:04:51pero sí genera la página
00:04:53con la información relevante de Claude.
00:04:55Y si bajamos,
00:04:56podemos ver este SVG que se está cargando desde R2.
00:05:01Se ve muy diferente al de E2B,
00:05:03pero confío en que Claude Sonnet
00:05:04ha producido la información correcta.
00:05:06Y por supuesto mencioné que también es posible
00:05:09generar mediante programación tantos dynamic workers como quieras,
00:05:13lo cual puedes hacer con un código como este.
00:05:16Ese es un bucle for que crea nuevos workers
00:05:19basados en el valor de la API.
00:05:21Y también comprueba si un worker ya existe
00:05:23y lo reutiliza si es así.
00:05:25El código que ejecuta es básicamente un console log
00:05:27y una respuesta del worker
00:05:29con el ID específico del worker
00:05:31basado en el índice del bucle for.
00:05:32Así que con el código en marcha,
00:05:34podría generar 50 dynamic workers nuevos
00:05:36y podemos ver que todos se crean al instante.
00:05:40Eso fue muy rápido.
00:05:41Ahora intentémoslo con 10.000,
00:05:43pero no lo voy a hacer localmente
00:05:44porque no quiero que mi máquina explote.
00:05:46Así que he desplegado mi worker padre en Cloudflare
00:05:49para poder usar su infraestructura.
00:05:50Aquí voy a generar 10.000 workers diferentes.
00:05:53Y si pulso enter, todos se crean increíblemente rápido.
00:05:56Podemos ver que hay una página de 30 de ellos por aquí,
00:05:59así que puedo seguir avanzando para ver todos los diferentes IDs de los workers.
00:06:03Y de hecho, cuanto más avanzo, más páginas muestra.
00:06:05Y puedo comunicarme con un worker específico
00:06:07como el worker 1156,
00:06:09que responde con "hello from worker 1156".
00:06:12Así que esa es una rápida visión general de los dynamic workers
00:06:15que ya están siendo utilizados por Cloudflare para el modo código
00:06:18y por Zite para ejecutar aplicaciones generadas por LLM.
00:06:21Pero debo mencionar que aunque ahora son gratis,
00:06:24no lo serán para siempre.
00:06:25Así que, aunque puedas ejecutar un millón de dynamic workers
00:06:28por segundo, quizás prefieras esperar
00:06:30a menos que tengas los bolsillos llenos.
00:06:32Y ya que estamos con el tema de Cloudflare,
00:06:34si quieres saber más sobre su SDK de código abierto VIVE,
00:06:38que te permite crear generadores de apps como v0 y Lovable,
00:06:42entonces echa un vistazo al siguiente video.

Key Takeaway

Cloudflare ha lanzado Dynamic Workers, una solución basada en V8 isolates que permite crear y ejecutar miles de sandboxes ultrarrápidos y eficientes para procesar código dinámico y generado por IA.

Highlights

Los Cloudflare Dynamic Workers son una primitiva de bajo nivel que permite a un worker existente crear otros mediante programación.

Estas unidades son 100 veces más rápidas y eficientes en memoria que los contenedores tradicionales gracias al uso de V8 isolates.

Permiten la ejecución masiva de código generado por IA, automatizaciones personalizadas y vistas previas de desarrollo de forma económica.

A diferencia de los sandboxes previos basados en Linux, los Dynamic Workers se centran en la ligereza y la velocidad extrema dentro del ecosistema JavaScript/Python.

Es posible escalar la creación de workers hasta 10,000 instancias casi instantáneamente utilizando la infraestructura global de Cloudflare.

Aunque actualmente son gratuitos para experimentación, Cloudflare implementará un modelo de costos en el futuro debido a su capacidad de escala masiva.

Timeline

Introducción a los Dynamic Workers

El video comienza presentando los nuevos "dynamic workers" de Cloudflare como una herramienta de bajo nivel revolucionaria. El orador destaca que son significativamente más eficientes que los contenedores tradicionales porque utilizan la tecnología de V8 isolates. Esta arquitectura permite ejecutar código generado por IA y automatizaciones personalizadas con un consumo de memoria mínimo. Se menciona la impresionante cifra de que se podrían ejecutar hasta un millón de estos workers por segundo. Finalmente, se plantea la duda sobre si la limitación de usar principalmente JavaScript afecta su versatilidad general.

Comparativa: Sandboxes de Linux vs. Dynamic Workers

En esta sección, se comparan los sandboxes presentados el año pasado, que son contenedores Linux sobre "durable objects", con los nuevos Dynamic Workers. Los contenedores Linux son ideales para sistemas operativos completos con sistemas de archivos y binarios complejos. Sin embargo, los Dynamic Workers se posicionan como una alternativa mucho más rápida y ligera para casos de uso concurrentes ilimitados. Operan bajo los mismos límites que un worker estándar, pero con una agilidad superior para tareas de corta duración. Esta distinción es crucial para que los desarrolladores elijan la herramienta adecuada según la complejidad de su código.

Configuración técnica y bindings de Wrangler

El presentador demuestra cómo configurar un Dynamic Worker utilizando la herramienta de línea de comandos Wrangler. Se introduce el concepto de "worker_loaders" en el archivo de configuración, que actúa como un binding para crear y controlar workers anidados. El ejemplo de código muestra cómo un worker padre puede instanciar un worker hijo con una fecha de compatibilidad específica y código JavaScript definido dinámicamente. También se explica la diferencia entre cargar un worker nuevo en cada solicitud o reutilizar uno existente mediante un nombre asignado. Esto permite mantener el estado o contexto entre diferentes llamadas, mejorando la eficiencia operativa.

Capacidades avanzadas y casos de uso con IA

Se exploran funcionalidades avanzadas como los bindings personalizados, el uso de bibliotecas de NPM como Hono y la interceptación de solicitudes salientes. El orador enfatiza que uno de los motivos principales para usar esta tecnología es la ejecución de código generado por agentes de IA. Se muestra un ejemplo utilizando el SDK de Anthropic y el modelo Sonnet 3.5 para ejecutar tareas complejas. Aunque estos workers no tienen acceso directo a un sistema de archivos físico, pueden utilizar librerías de shell para crear sistemas virtuales. Esta capacidad es fundamental para entornos de ejecución seguros donde el código de terceros debe estar aislado.

Integración con Python y almacenamiento en R2

El análisis profundiza en la capacidad de los Dynamic Workers para ejecutar no solo JavaScript, sino también Python. Se presenta un flujo de trabajo donde un agente de IA genera código Python para crear un gráfico SVG. Dado que el sandbox es volátil, el resultado se envía de vuelta al worker principal para ser almacenado en un bucket R2 de Cloudflare. El ejemplo práctico demuestra la generación de un visual complejo de Claude Sonnet que se sirve directamente desde la infraestructura de almacenamiento. Este proceso ilustra cómo superar las limitaciones de persistencia de los isolates utilizando otros servicios del ecosistema Cloudflare.

Prueba de escalabilidad masiva y conclusiones

En el tramo final, se realiza una prueba de estrés creando 10,000 workers diferentes de forma casi instantánea en la infraestructura real de Cloudflare. El sistema demuestra una velocidad increíble al asignar IDs específicos a cada instancia y permitir la comunicación individual con cualquiera de ellas. Se menciona que empresas como Zite ya utilizan esta tecnología para ejecutar aplicaciones generadas por modelos de lenguaje de gran tamaño (LLM). El orador advierte que, aunque el servicio es potente y actualmente gratuito, es probable que se vuelva costoso en el futuro debido a su escala. El video concluye invitando a los espectadores a explorar el SDK VIVE para crear generadores de aplicaciones similares a v0.

Community Posts

View all posts