Cloudflare Dynamic Workers: песочницы стали в 100 раз быстрее

BBetter Stack
Internet TechnologySmall Business/StartupsComputing/Software

Transcript

00:00:00(ритмичная музыка)
00:00:01Cloudflare недавно анонсировали динамические воркеры —
00:00:04низкоуровневый примитив Worker,
00:00:06который может программно создаваться существующим воркером.
00:00:09Они в сто раз быстрее и эффективнее по памяти,
00:00:12чем традиционные контейнеры, так как работают на изолятах V8.
00:00:16И поскольку они такие дешевые,
00:00:18вы можете запускать их сколько угодно
00:00:20для выполнения кода, созданного ИИ, превью разработок,
00:00:23кастомной автоматизации и многого другого.
00:00:25Они даже заявили, что можно запускать миллион воркеров
00:00:29в секунду, если возникнет такая необходимость.
00:00:31Но не ограничивает ли их использование тот факт,
00:00:33что на них можно запускать только JavaScript?
00:00:36Подписывайтесь, и давайте выясним.
00:00:37(ритмичная музыка)
00:00:40В прошлом году я делал видео о песочницах Cloudflare,
00:00:44которые, по сути, являются эфемерными Linux-контейнерами,
00:00:47работающими на Durable Object.
00:00:49Если для вас это звучит как абракадабра,
00:00:50то обязательно посмотрите то видео.
00:00:52Они идеальны, если вам нужен полноценный контейнер ОС
00:00:55с файловой системой и возможностью запускать почти любой язык
00:00:59и любые бинарные файлы.
00:01:01Но если вам нужно что-то более быстрое,
00:01:03точнее, гораздо более быстрое и легкое,
00:01:06с возможностью запускать неограниченное число песочниц
00:01:09с теми же лимитами, что и у обычного воркера,
00:01:12то вам стоит присмотреться к динамическим воркерам.
00:01:15Давайте разберемся, как их настроить.
00:01:16Вот базовый воркер, который я только что создал через Wrangler,
00:01:19полный ошибок TypeScript,
00:01:21возможно, потому что я забыл запустить "wrangler types".
00:01:23Но в нашем конфигурационном файле Wrangler
00:01:26я добавил массив "worker_loaders"
00:01:28с привязкой под названием "loader".
00:01:30Назвать её можно как угодно,
00:01:32но я выбрал "loader", так как это более стандартно.
00:01:34И эта привязка позволяет нам создавать
00:01:37и контролировать другие воркеры.
00:01:38Итак, в обновленном коде у нас есть константа "new worker",
00:01:42которая использует привязку "loader" с этими значениями.
00:01:45Это можно представить как файл конфигурации Wrangler
00:01:49для вложенного воркера,
00:01:50где дата совместимости (compatibility_date) указывает,
00:01:53какую версию рантайма ему следует использовать.
00:01:55А вот и код, который он будет выполнять.
00:01:57Как видите, код очень похож
00:01:59на код самого воркера.
00:02:00В нем есть функция fetch
00:02:02с аргументами request, env и context.
00:02:05И всё, что он делает здесь, — это отвечает
00:02:06"hello world from the sandbox".
00:02:08Затем мы запретили любой доступ к сети,
00:02:10запускаем функцию fetch с аргументами запроса
00:02:13из исходного воркера и возвращаем результат.
00:02:16Если мы запустим воркер локально и выполним curl localhost,
00:02:19мы должны увидеть приветствие из песочницы.
00:02:21Но если мы выполним тот же curl-запрос снова,
00:02:24то получим ошибку.
00:02:24Это происходит потому, что в данный момент
00:02:26мы загружаем абсолютно новый воркер.
00:02:28Но вместо этого мы можем вызвать существующий воркер,
00:02:31которому дадим имя "worker-1",
00:02:33и запустить код как асинхронную функцию.
00:02:35Теперь при запуске curl мы получаем ответ из песочницы.
00:02:38И при повторном запуске он берет информацию
00:02:41из уже существующей песочницы "worker-1".
00:02:43То, что я только что показал,
00:02:45был, конечно, очень простой пример,
00:02:47но с динамическими воркерами можно делать крутые вещи,
00:02:50например, определять кастомные привязки,
00:02:52как этот метод POST для чат-комнаты, чтобы создать стаб,
00:02:55с которым воркер общается через Cap'n Proto over Web,
00:02:57о котором — да, мы уже делали видео,
00:02:59так что посмотрите его, если интересно.
00:03:00Вы можете использовать NPM-зависимости, такие как Hono,
00:03:03и бандлить их с помощью функции "create worker".
00:03:05И вы даже можете перехватывать исходящие запросы,
00:03:08чтобы, например, подставлять учетные данные.
00:03:10Но одна из главных причин использовать динамические воркеры —
00:03:13это выполнение кода, сгенерированного ИИ-агентами.
00:03:17Давайте попробуем это сделать.
00:03:18Вот код из сборника рецептов E2B,
00:03:21использующий Anthropic SDK для запуска Sonnet 3.5
00:03:25с этим системным промптом и кастомным инструментом
00:03:28для выполнения Python в Jupyter Notebook.
00:03:31Это работает так: система обнаруживает,
00:03:33когда используется кастомный инструмент,
00:03:34и запускает его внутри песочницы E2B,
00:03:38код которой мы видим вот здесь.
00:03:40Она запускает его со специфическим промптом:
00:03:42вычислить значение числа Пи методом Монте-Карло
00:03:46за тысячу итераций.
00:03:47И так как у неё есть доступ к файловой системе,
00:03:50она может создать файл image.png
00:03:52и сохранить его для скачивания пользователем
00:03:54или для любых других целей.
00:03:56К сожалению, у динамических воркеров нет доступа
00:03:58к реальной файловой системе,
00:04:00хотя они могут создать виртуальную
00:04:02с помощью этой библиотеки оболочки.
00:04:04Но поскольку они работают через Worker,
00:04:06мы можем предоставить им такие ресурсы, как бакет R2 —
00:04:08версию S3 от Cloudflare —
00:04:11в котором можно сохранить изображение.
00:04:12Посмотрим на код,
00:04:14который похож на пример от E2B.
00:04:16Сначала мы видим системный промпт.
00:04:19Затем кастомный инструмент выполнения Python,
00:04:22который в данном случае не использует Jupyter,
00:04:25но генерирует SVG-визуализацию.
00:04:28А вот код воркера,
00:04:30который помимо JavaScript может запускать и Python.
00:04:33Здесь видно, что используется Sonnet 3.5 (зачеркнуто) — 4.6.
00:04:35Вот используемый промпт.
00:04:37Здесь код агента выполняется в песочнице.
00:04:41Ответ из песочницы
00:04:43возвращается в основной воркер,
00:04:45который ищет в нем код SVG
00:04:47и сохраняет его в R2.
00:04:49Если мы перейдем по URL — это займет время,
00:04:51но страница действительно генерируется
00:04:53с соответствующей информацией от Claude.
00:04:55И если прокрутить вниз,
00:04:56мы увидим этот SVG, загружаемый из R2.
00:05:01Он выглядит иначе, чем в примере E2B,
00:05:03но я верю, что Claude Sonnet
00:05:04выдал корректную информацию.
00:05:06И, конечно, я упоминал, что можно
00:05:09программно запускать сколько угодно динамических воркеров,
00:05:13что делается с помощью такого кода.
00:05:16Это цикл for, который создает новые воркеры
00:05:19на основе данных из API.
00:05:21Он также проверяет, существует ли уже воркер,
00:05:23и использует его повторно, если да.
00:05:25Запускаемый код — это просто console.log
00:05:27и ответ от воркера
00:05:29с конкретным ID воркера,
00:05:31основанным на индексе цикла.
00:05:32Итак, запустив этот код,
00:05:34я смог мгновенно создать 50 новых
00:05:36динамических воркеров.
00:05:40Это было очень быстро.
00:05:41Теперь попробуем с 10 000,
00:05:43но я не буду делать это локально,
00:05:44чтобы мой компьютер не взорвался.
00:05:46Поэтому я развернул родительский воркер в Cloudflare,
00:05:49чтобы использовать их инфраструктуру.
00:05:50Итак, я собираюсь запустить 10 000 разных воркеров.
00:05:53Нажимаю Enter, и все они создаются безумно быстро.
00:05:56Здесь мы видим страницу с 30 воркерами,
00:05:59и я могу листать дальше, чтобы увидеть все ID.
00:06:03И чем дальше я листаю, тем больше страниц появляется.
00:06:05Я могу обратиться к конкретному воркеру,
00:06:07например, к воркеру 1156,
00:06:09который отвечает: "hello from worker 1156".
00:06:12Это был краткий обзор динамических воркеров,
00:06:15которые уже используются Cloudflare для Code Mode
00:06:18и Zite для запуска приложений, созданных LLM.
00:06:21Но стоит упомянуть: хотя сейчас они бесплатны,
00:06:24так будет не всегда.
00:06:25Так что, хотя вы и можете запускать миллион воркеров
00:06:28в секунду, лучше попридержать коней,
00:06:30если только у вас не бездонные карманы.
00:06:32И раз уж мы заговорили о Cloudflare,
00:06:34если хотите узнать больше об их открытом Vibe SDK,
00:06:38который позволяет создавать генераторы вроде v0 или Lovable,
00:06:42то смотрите следующее видео.

Key Takeaway

Cloudflare Dynamic Workers представляют собой сверхбыструю и масштабируемую альтернативу контейнерам, позволяя мгновенно развертывать тысячи изолированных сред для выполнения динамического кода и ИИ-агентов.

Highlights

Cloudflare анонсировала Dynamic Workers — низкоуровневый примитив, работающий на изолятах V8.

Новые воркеры в 100 раз быстрее и эффективнее по памяти, чем традиционные Linux-контейнеры.

Технология позволяет программно создавать и запускать до миллиона воркеров в секунду.

Dynamic Workers идеально подходят для выполнения кода, сгенерированного ИИ, и создания превью-сред.

Реализована возможность использования зависимостей NPM и выполнения кода на Python.

Воркеры могут взаимодействовать с хранилищем R2 для сохранения артефактов, таких как изображения или SVG.

Timeline

Введение в Dynamic Workers и их преимущества

Автор представляет новую технологию Cloudflare — динамические воркеры, которые являются программно создаваемыми низкоуровневыми примитивами. Основное преимущество заключается в использовании изолятов V8, что делает их в 100 раз быстрее и экономичнее по памяти по сравнению с обычными контейнерами. Эти инструменты предназначены для запуска кода, созданного ИИ, автоматизации и различных превью-разработок. Спикер подчеркивает невероятную масштабируемость, заявляя о возможности запуска до миллиона воркеров в секунду. В конце раздела ставится вопрос о языковых ограничениях, в частности, поддерживается ли что-то кроме JavaScript.

Сравнение с песочницами и процесс настройки

В этом сегменте проводится сравнение между эфемерными Linux-контейнерами на базе Durable Objects и новыми динамическими воркерами. Если старые песочницы подходят для полноценных ОС с файловыми системами, то Dynamic Workers ориентированы на максимальную легкость и скорость. Автор демонстрирует процесс конфигурации через инструмент Wrangler, добавляя массив worker_loaders в файл настроек. Привязка, названная loader, становится ключевым механизмом для создания и управления дочерними воркерами прямо из основного кода. Это закладывает основу для создания динамической инфраструктуры внутри экосистемы Cloudflare.

Практическая реализация и управление состояниями

Спикер показывает пример кода для создания нового воркера, который очень похож на стандартную структуру функции fetch. Рассматривается важный аспект именования воркеров: если не задать имя, при каждом запросе будет создаваться абсолютно новая песочница. Однако, присвоив имя (например, worker-1), можно повторно обращаться к уже существующему воркеру и сохранять контекст выполнения. Демонстрируется работа через локальный curl-запрос, подтверждающий успешный ответ из изолированной среды. Этот механизм позволяет эффективно управлять жизненным циклом ресурсов в зависимости от бизнес-логики приложения.

Продвинутые возможности и интеграция с ИИ

Раздел посвящен сложным сценариям использования, включая кастомные привязки и использование протокола Cap'n Proto для связи между воркерами. Автор упоминает возможность бандлинга NPM-зависимостей, таких как фреймворк Hono, и перехват исходящих запросов для управления учетными данными. Особое внимание уделяется запуску ИИ-агентов, где динамические воркеры выступают безопасной средой для выполнения сгенерированного кода. Поскольку у них нет прямой файловой системы, предлагается использовать виртуальные оболочки или внешние хранилища типа Cloudflare R2. Это превращает воркеры в полноценную среду для работы современных LLM-приложений.

Пример с Claude Sonnet и генерация визуализаций

Здесь демонстрируется практический кейс интеграции с Anthropic SDK и моделью Claude Sonnet. ИИ-агент выполняет задачу по генерации SVG-визуализации, работая внутри динамического воркера, который поддерживает не только JS, но и Python. Полученный результат (SVG-код) передается обратно в родительский воркер и сохраняется в бакет R2 для последующего доступа через URL. Автор подтверждает работоспособность схемы, показывая сгенерированную страницу с данными от нейросети. Этот пример иллюстрирует, как динамические воркеры могут автоматизировать сложные цепочки обработки данных с визуальным выводом.

Тестирование масштабируемости и выводы

В финальной части автор проводит стресс-тест, мгновенно создавая сначала 50, а затем 10 000 воркеров в облачной инфраструктуре Cloudflare. Эксперимент подтверждает безумную скорость работы: тысячи независимых инстансов разворачиваются практически мгновенно, и к каждому можно обратиться по ID. Спикер отмечает, что технология уже используется в таких проектах, как Code Mode и Zite, для запуска пользовательского кода. Несмотря на текущую бесплатность, в будущем ожидается введение тарификации, поэтому пользователям советуют быть осторожными с масштабами. Видео завершается анонсом следующего выпуска о Vibe SDK для создания генераторов интерфейсов.

Community Posts

View all posts