Cloudflare Dynamic Workers tornam Sandboxes 100x mais rápidas

BBetter Stack
Internet TechnologySmall Business/StartupsComputing/Software

Transcript

00:00:00(música animada)
00:00:01A Cloudflare anunciou recentemente os Dynamic Workers,
00:00:04uma primitiva de Worker de nível inferior
00:00:06que pode ser criada via programação por um Worker existente.
00:00:09Eles são cem vezes mais rápidos e eficientes em memória
00:00:12do que um container tradicional, pois rodam em V8 Isolates.
00:00:16E como são muito baratos,
00:00:18você pode gerar quantos quiser
00:00:20para rodar código gerado por IA, prévias de desenvolvimento,
00:00:23automações personalizadas e muito mais.
00:00:25Eles até disseram que você pode rodar 1 milhão de Dynamic Workers
00:00:29por segundo, se desejar.
00:00:31Mas será que o fato de só rodarem
00:00:33JavaScript limita seu uso?
00:00:36Inscreva-se no canal e vamos descobrir.
00:00:37(música animada)
00:00:40Ano passado, fiz um vídeo sobre os Sandboxes da Cloudflare,
00:00:44que são basicamente containers Linux de curta duração
00:00:47que rodam em um Durable Object.
00:00:49Se isso não fez sentido para você,
00:00:50então dê uma olhada naquele vídeo.
00:00:52Mas eles são perfeitos se você quer um container de SO completo,
00:00:55com sistema de arquivos e capacidade de rodar quase qualquer linguagem
00:00:59e qualquer binário.
00:01:01Mas se você quer algo um pouco mais rápido,
00:01:03na verdade, muito mais rápido e bem mais leve,
00:01:06com a capacidade de rodar sandboxes simultâneos ilimitados
00:01:09em algo que tem os mesmos limites de um Worker comum,
00:01:12então você deve optar por um Dynamic Worker.
00:01:15Vamos ver como configurar um.
00:01:16Aqui está um Worker básico que acabei de criar com o Wrangler,
00:01:19cheio de erros de TypeScript,
00:01:21talvez porque esqueci de rodar o "wrangler types".
00:01:23Mas no nosso arquivo de configuração do Wrangler,
00:01:26adicionei este array "worker_loaders"
00:01:28com um binding chamado "loader".
00:01:30Isso pode ter o nome que você quiser,
00:01:32mas escolhi "loader" por ser mais convencional.
00:01:34E esse binding nos permite criar
00:01:37e controlar outros Workers.
00:01:38No código atualizado, temos uma nova constante "worker",
00:01:42que usa o binding "loader" com estes valores.
00:01:45Você pode imaginar isso como um arquivo config do Wrangler
00:01:49para o Worker aninhado,
00:01:50onde a data de compatibilidade diz ao Worker
00:01:53qual versão do runtime ele deve usar.
00:01:55E aqui está o código que ele vai executar.
00:01:57Como podem ver, o código é muito similar
00:01:59ao de um Worker normal.
00:02:00Ele tem uma função fetch
00:02:02com os argumentos request, env e context.
00:02:05E tudo o que ele faz aqui é responder
00:02:06com "hello world from the sandbox".
00:02:08Depois, impedimos todo o acesso à rede,
00:02:10executando a função fetch com os argumentos de requisição
00:02:13do Worker inicial e retornando os resultados.
00:02:16Se rodarmos nosso Worker localmente e dermos um curl no localhost,
00:02:19deveremos ver "hello from the sandbox".
00:02:21Mas se rodarmos a mesma requisição curl novamente,
00:02:24teremos um erro.
00:02:24Isso acontece porque, no momento,
00:02:26estamos carregando um Worker novinho em folha.
00:02:28Mas o que podemos fazer é obter um Worker existente,
00:02:31ao qual daremos o nome de "worker1",
00:02:33e então rodar o código como uma função assíncrona.
00:02:35Isso significa que agora, ao rodar o curl, recebemos a saudação.
00:02:38E se rodarmos de novo, ele obtém a informação
00:02:41da sandbox do "worker1" que já existia.
00:02:43O que acabei de mostrar
00:02:45foi, logicamente, um exemplo bem simples,
00:02:47mas dá para fazer coisas bem legais com Dynamic Workers,
00:02:50como definir bindings personalizados,
00:02:52tipo este método post de chatroom para criar um stub,
00:02:55com o qual o Worker se comunica usando Cap'n Proto e Web,
00:02:57sobre o qual, sim, já fizemos um vídeo,
00:02:59então assista se tiver interesse.
00:03:00Você pode usar dependências do NPM como o Hono
00:03:03e empacotá-las usando a função "createWorker".
00:03:05E você pode até interceptar requisições de saída
00:03:08para fazer coisas como injetar credenciais.
00:03:10Mas um dos grandes motivos para usar Dynamic Workers
00:03:13é rodar código gerado por agentes de IA.
00:03:17Então vamos tentar fazer isso.
00:03:18Aqui está um código do cookbook da E2B
00:03:21que usa o SDK da Anthropic para rodar o Sonnet 3.5
00:03:25com este prompt de sistema e uma ferramenta customizada
00:03:28para executar Python em um Jupyter Notebook.
00:03:31O funcionamento é assim: ele detecta
00:03:33quando a ferramenta customizada é usada
00:03:34e a executa dentro da sandbox da E2B,
00:03:38cujo código podemos ver bem aqui.
00:03:40Ele roda com este prompt bem específico
00:03:42para calcular o valor de pi usando o método de Monte Carlo
00:03:46com mil iterações.
00:03:47E como ele tem acesso ao sistema de arquivos,
00:03:50pode criar esta imagem PNG
00:03:52e salvá-la para ser baixada pelo usuário
00:03:54ou o que quer que o usuário deseje.
00:03:56Infelizmente, os Dynamic Workers não têm acesso
00:03:58a um sistema de arquivos,
00:04:00embora possam criar um virtual
00:04:02com esta biblioteca de shell.
00:04:04Mas como eles rodam através de um Worker,
00:04:06podemos fornecer detalhes a ele como um bucket R2,
00:04:08que é a versão da Cloudflare do S3,
00:04:11onde a imagem pode ser salva.
00:04:12Analisando o código,
00:04:14que é similar ao da E2B,
00:04:16podemos ver primeiro o prompt de sistema sendo usado.
00:04:19E a ferramenta customizada de execução de Python,
00:04:22que neste caso não usa um Jupyter Notebook,
00:04:25mas gera um SVG dos visuais.
00:04:28Aqui temos o código do Worker,
00:04:30que além de JavaScript, também pode rodar Python.
00:04:33Vemos que ele está usando o Sonnet 3.5.
00:04:35Aqui está o prompt que é utilizado.
00:04:37Aqui o código do agente é executado na sandbox.
00:04:41E a resposta da sandbox
00:04:43volta para o Worker principal,
00:04:45que procura nela pelo código SVG
00:04:47e o salva no R2.
00:04:49Ao visitar essa URL, demora um pouco,
00:04:51mas ele gera a página
00:04:53com as informações relevantes do Claude.
00:04:55E se rolarmos para baixo,
00:04:56vemos este SVG sendo carregado do R2.
00:05:01Parece bem diferente do da E2B,
00:05:03mas confio que o Claude Sonnet
00:05:04gerou a informação correta.
00:05:06E claro, mencionei que também é possível
00:05:09gerar quantos Dynamic Workers quiser via programação,
00:05:13o que pode ser feito com um código como este.
00:05:16É um loop "for" que cria Workers novinhos
00:05:19baseado no valor da API.
00:05:21Ele também checa se um Worker já existe
00:05:23e o reutiliza se for o caso.
00:05:25O código que ele roda é basicamente um console log
00:05:27e uma resposta do Worker
00:05:29com o ID específico do Worker,
00:05:31baseado no índice do loop "for".
00:05:32Com o código rodando,
00:05:34eu poderia gerar 50 novos Dynamic Workers
00:05:36e vemos que todos são criados instantaneamente.
00:05:40Isso foi muito rápido.
00:05:41Agora vamos tentar com 10.000,
00:05:43mas não farei isso localmente
00:05:44porque não quero explodir minha máquina.
00:05:46Então, implantei meu Worker pai na Cloudflare
00:05:49para usar a infraestrutura deles.
00:05:50Vou gerar 10.000 Workers diferentes.
00:05:53E se eu der enter, todos são criados insanamente rápido.
00:05:56Vemos que há uma página com 30 deles aqui,
00:05:59então posso continuar navegando para ver os IDs.
00:06:03E quanto mais eu avanço, mais páginas aparecem.
00:06:05Posso me comunicar com um Worker específico,
00:06:07como o Worker 1156,
00:06:09que responde com "hello from worker 1156".
00:06:12Essa foi uma visão rápida dos Dynamic Workers,
00:06:15que já estão sendo usados pela Cloudflare para o Code Mode
00:06:18e pela Zite para rodar apps gerados por LLM.
00:06:21Mas devo mencionar que, embora sejam gratuitos agora,
00:06:24não serão para sempre.
00:06:25Então, embora você possa rodar um milhão deles
00:06:28por segundo, talvez queira ir devagar,
00:06:30a menos que tenha bolsos bem fundos.
00:06:32E aproveitando o assunto Cloudflare,
00:06:34se quiser saber mais sobre o SDK de código aberto VIBE,
00:06:38que permite criar geradores de apps como o v0 e o Lovable,
00:06:42então assista ao próximo vídeo.

Key Takeaway

Os Cloudflare Dynamic Workers revolucionam a computação em nuvem ao oferecer isolamento de código ultra-rápido, escalável e programático, ideal para agentes de IA e automações leves.

Highlights

Os Dynamic Workers da Cloudflare são 100 vezes mais rápidos e eficientes em memória do que containers tradicionais por utilizarem V8 Isolates.

A nova tecnologia permite a criação programática de até 1 milhão de workers por segundo a partir de um Worker existente.

Diferente dos Sandboxes baseados em Linux, os Dynamic Workers são focados em JavaScript e Python, sendo extremamente leves.

É possível isolar a execução de código gerado por IA (como Anthropic Sonnet 3.5) para realizar tarefas complexas com segurança.

Integração nativa com o ecossistema Cloudflare, permitindo o uso de R2 para armazenamento persistente de arquivos gerados nas sandboxes.

A ferramenta oferece controle granular sobre permissões de rede e bindings personalizados para comunicação segura entre processos.

Atualmente em fase gratuita, a tecnologia já impulsiona plataformas de geração de aplicativos como Code Mode e Zite.

Timeline

Introdução aos Dynamic Workers

O vídeo inicia apresentando os Dynamic Workers como uma nova primitiva de nível inferior anunciada pela Cloudflare. O palestrante destaca que eles rodam em V8 Isolates, o que os torna significativamente mais rápidos e baratos que containers comuns. Essa eficiência permite casos de uso inovadores, como a execução massiva de código gerado por inteligência artificial ou automações personalizadas. É mencionada a capacidade teórica de gerar até um milhão de instâncias por segundo. O segmento termina questionando se o foco em JavaScript seria uma limitação para os desenvolvedores.

Comparação: Sandboxes Linux vs. Dynamic Workers

Nesta seção, o autor revisita o conceito de Sandboxes da Cloudflare baseados em containers Linux de curta duração. Ele explica que, embora os containers tradicionais ofereçam um sistema operacional completo e suporte a qualquer binário, eles são mais pesados. Em contrapartida, os Dynamic Workers surgem como uma alternativa muito mais leve e rápida para quem não precisa de um SO inteiro. Eles operam dentro dos mesmos limites de um Worker padrão, mas com flexibilidade de criação ilimitada. Esta comparação ajuda o espectador a decidir qual tecnologia utilizar dependendo da complexidade da tarefa.

Configuração Técnica e Implementação

O tutorial demonstra como configurar um Dynamic Worker utilizando a ferramenta Wrangler e o binding "worker_loaders". O palestrante mostra o código necessário para criar um worker aninhado, definindo versões de compatibilidade e o script a ser executado. Um exemplo prático ilustra como um worker pai pode carregar e controlar um worker filho de forma segura. É demonstrada a diferença entre carregar um novo worker a cada requisição ou reutilizar um worker existente através de nomes identificadores. O código exibido reforça a semelhança sintática com os Workers tradicionais, facilitando a curva de aprendizado.

Recursos Avançados e Integrações

O vídeo explora funcionalidades avançadas como a definição de bindings personalizados e o uso de bibliotecas do NPM como o framework Hono. O autor menciona o uso do protocolo Cap'n Proto para comunicação eficiente entre o worker e outras estruturas. Também é destacada a capacidade de interceptar requisições de saída para injetar credenciais ou aplicar políticas de segurança. Um ponto crucial abordado é a utilidade dessa tecnologia para rodar códigos produzidos por agentes de IA em ambiente isolado. Isso resolve o problema de segurança ao executar scripts dinâmicos de terceiros em larga escala.

Executando Código de IA com Anthropic e R2

O palestrante realiza uma demonstração prática integrando o modelo Claude Sonnet 3.5 da Anthropic com os Dynamic Workers. O objetivo é calcular o valor de pi e gerar um gráfico SVG, simulando as capacidades da plataforma E2B. Como os Dynamic Workers não possuem sistema de arquivos nativo, o vídeo ensina como usar o Cloudflare R2 para salvar os resultados visuais. O processo envolve o envio de prompts específicos, a execução do código Python/JS na sandbox e a recuperação do arquivo final. O resultado mostra que a infraestrutura da Cloudflare consegue rivalizar com soluções de sandbox mais pesadas de forma eficaz.

Teste de Estresse e Conclusão

Na fase final, o autor realiza um teste de estresse criando 10.000 Dynamic Workers simultaneamente na infraestrutura de produção da Cloudflare. O resultado é impressionante, com todos os workers sendo gerados e respondendo quase instantaneamente aos comandos de rede. Ele adverte que, embora o serviço seja gratuito no momento do vídeo, os usuários devem monitorar os custos futuros devido à escala massiva permitida. O vídeo encerra citando empresas que já adotaram a tecnologia, como a Zite, e convida o público a explorar outras ferramentas de desenvolvimento. O palestrante reforça o potencial disruptivo dessa ferramenta para o futuro da computação serverless.

Community Posts

View all posts