Back

Руководство по Cloudflare Workers для начинающих

Руководство по Cloudflare Workers для начинающих

Если вы хотите создавать современные веб-приложения без управления серверами, Cloudflare Workers предлагает привлекательное решение, которое выходит далеко за рамки простых serverless-функций. В отличие от традиционных платформ, Workers теперь предоставляет всё необходимое для полноценных full-stack приложений: SQL-базы данных через D1, подключения к существующим PostgreSQL или MySQL через Hyperdrive, хостинг статических ресурсов и обширную совместимость с Node.js — всё это работает на edge, близко к вашим пользователям.

Это руководство по Cloudflare Workers охватывает основные концепции и инструменты, необходимые для начала работы, от понимания выполнения на edge до создания полноценных приложений с современными возможностями подключения к базам данных и управления ресурсами.

Ключевые выводы

  • Cloudflare Workers выполняют JavaScript, TypeScript и Python, а также могут запускать Rust, скомпилированный в WebAssembly, на edge-локациях в пределах 50 мс от пользователей по всему миру
  • D1 предоставляет serverless SQLite базы данных с автоматической репликацией на edge
  • Hyperdrive обеспечивает эффективные подключения к существующим базам данных PostgreSQL и MySQL
  • Workers поддерживают full-stack приложения с хостингом статических ресурсов и совместимостью с Node.js

Что такое Cloudflare Workers?

Объяснение выполнения на Edge

Cloudflare Workers — это функции на JavaScript, TypeScript, Python или Rust, которые выполняются в глобальной сети дата-центров Cloudflare. Вместо выполнения на одном сервере ваш код запускается в ближайшей к каждому пользователю edge-локации, обычно в пределах 50 миллисекунд от любого человека на Земле.

Эта модель на базе edge означает, что ваше приложение отвечает быстрее, потому что запросы не отправляются на центральный сервер. Платформа автоматически управляет масштабированием — независимо от того, есть у вас десять пользователей или десять миллионов, Workers адаптируется без настройки.

Основные концепции: привязки и окружение

Workers используют привязки (bindings) для подключения вашего кода к ресурсам. Это не традиционные переменные окружения, а прямые соединения с сервисами:

  • KV namespaces для хранилища ключ-значение
  • D1 databases для SQL-операций
  • R2 buckets для объектного хранилища
  • Service bindings к другим Workers
  • Hyperdrive connections к внешним базам данных

Каждая привязка появляется как свойство объекта env, передаваемого вашему Worker:

export default {
  async fetch(request, env, ctx) {
    // Access D1 database
    const result = await env.DB.prepare('SELECT * FROM users').all()
    return Response.json(result)
  }
}

Современные варианты баз данных с Cloudflare D1 Database

D1: готовый к production SQL на Edge

Cloudflare D1 database переносит SQLite на edge с автоматической репликацией и резервным копированием. В отличие от традиционных serverless-баз данных, D1 работает в тех же локациях, что и ваши Workers, устраняя сетевую задержку для запросов к базе данных.

Создание базы данных D1 выполняется просто:

npx wrangler d1 create my-database
npx wrangler d1 execute my-database --file=./schema.sql

Ваш Worker получает доступ к D1 через привязки, делая запросы локальными:

const user = await env.DB.prepare('SELECT * FROM users WHERE id = ?')
  .bind(userId)
  .first()

Подключение Hyperdrive к существующим базам данных

Hyperdrive connectivity решает распространённую проблему: подключение Workers к существующим базам данных PostgreSQL или MySQL, включая те, что находятся в частных сетях. Hyperdrive поддерживает пулы соединений на edge Cloudflare, снижая накладные расходы на соединения до 30 раз.

Настройка Hyperdrive требует минимальной конфигурации:

npx wrangler hyperdrive create my-postgres \
  --connection-string="postgresql://user:pass@host:5432/db"

Затем ваш Worker использует привычные библиотеки баз данных с подключением Hyperdrive:

import { Client } from 'pg'

export default {
  async fetch(request, env) {
    const client = new Client(env.HYPERDRIVE.connectionString)
    await client.connect()
    const result = await client.query('SELECT * FROM products')
    return Response.json(result.rows)
  }
}

Создание Full-Stack приложений

Статические ресурсы Workers и маршрутизация

Workers static assets устраняют необходимость в отдельном хостинге. Ваши HTML, CSS, JavaScript и изображения развёртываются вместе с кодом API. Платформа автоматически обслуживает статические файлы с правильными заголовками кэширования и сжатием.

Обработка статических ресурсов требует записи assets в wrangler.toml, указывающей на ваш публичный каталог.

Структура проекта для full-stack Worker:

my-app/
├── src/
│   └── index.js        # Worker code
├── public/
│   ├── index.html      # Static assets
│   ├── style.css
│   └── app.js
└── wrangler.toml       # Configuration

Маршрутизация обрабатывает как статические, так и динамические запросы:

export default {
  async fetch(request, env, ctx) {
    const url = new URL(request.url)
    
    if (url.pathname.startsWith('/api/')) {
      // Handle API routes
      return handleAPI(request, env)
    }
    
    // Serve static assets
    return env.ASSETS.fetch(request)
  }
}

Преимущества слоя совместимости с Node.js

Слой совместимости с Node.js позволяет тысячам npm-пакетов работать в Workers. В отличие от ранних версий, которые поддерживали только веб-стандартные API, Workers теперь поддерживает встроенные модули Node.js, такие как Buffer, crypto, stream и path.

Включите совместимость с Node.js в вашем wrangler.toml:

compatibility_flags = ["nodejs_compat"]

Эта совместимость означает, что существующий код Node.js часто работает с минимальными изменениями, что делает миграцию с традиционных серверов простой.

Рабочий процесс локальной разработки

Настройка окружения

Начните с Wrangler, инструмента CLI от Cloudflare:

npm create cloudflare@latest my-app
cd my-app
npm run dev

Wrangler обеспечивает разработку с горячей перезагрузкой и доступом ко всем привязкам локально. Ваши базы данных D1, KV namespaces и даже подключения Hyperdrive работают в режиме разработки.

Тестирование и развёртывание

Локальный сервер разработки имитирует поведение production:

# Test with local D1 database
npx wrangler d1 execute DB --local --file=./seed.sql

# Deploy to production
npm run deploy

Дополнительные возможности платформы

Хотя это руководство фокусируется на основных концепциях, Workers предлагает дополнительные возможности, достойные изучения:

  • Queues для обработки фоновых задач
  • R2 event notifications для триггеров объектного хранилища
  • Gradual Deployments для безопасного развёртывания
  • Workers Analytics и структурированное логирование для наблюдаемости

Эти функции легко интегрируются по мере роста вашего приложения.

Заключение

Cloudflare Workers эволюционировал от простых edge-функций до полноценной платформы для современных веб-приложений. С D1 для serverless SQL, Hyperdrive для подключения к существующим базам данных, встроенным хостингом статических ресурсов и полной совместимостью с Node.js вы можете создавать full-stack приложения, работающие глобально с минимальной конфигурацией.

Начните с простого Worker, добавьте базу данных D1 для сохранения данных и постепенно внедряйте такие функции, как Hyperdrive или R2, по мере необходимости. Платформа справляется со сложностью глобального распределения, позволяя вам сосредоточиться на создании приложения.

Часто задаваемые вопросы

Да, Workers могут обрабатывать большинство backend-задач, включая API-эндпоинты, операции с базами данных, аутентификацию и хранение файлов. С D1 для SQL, KV для кэширования, R2 для объектного хранилища и Hyperdrive для существующих баз данных Workers предоставляют полноценное backend-решение, которое масштабируется автоматически.

Workers взимает плату за запрос и время вычислений с щедрым бесплатным тарифом в 100 000 запросов ежедневно. В отличие от традиционного хостинга с фиксированными ежемесячными затратами, вы платите только за фактическое использование. Это делает Workers экономически эффективным как для небольших проектов, так и для высоконагруженных приложений.

Используйте Queues для фоновой обработки, Durable Objects для операций с состоянием или разбивайте задачи на более мелкие части. Для задач, превышающих лимиты, рассмотрите комбинирование Workers с внешними сервисами или использование запланированных Workers Cloudflare для пакетной обработки.

Workers предоставляет локальную разработку с wrangler dev для тестирования, логирование через console, видимое в логах реального времени, и интеграцию с Chrome DevTools. Основное отличие — понимание жизненного цикла на основе запросов и использование структурированного логирования для отладки в production.

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay