Rust, Cloudflare Workers и Workers KV

Введение

В этой статье мы создадим средство сокращения URL-адресов с помощью CloudFlare Workers и KV. Это поможет нам понять инструменты, предлагаемые CF, и вдохновит нас на примеры использования в реальном мире.

Cloudflare предлагает отличный набор инструментов для разработки целых приложений без необходимости предоставления разработчику отдельного сервера.

Отказ от ответственности: меня не спонсируют и не связывают с CloudFlare. Мне нравится то, что они делают в бессерверном пространстве.

Эта статья требует, чтобы вы были знакомы с Rust Language и Web Assembly.

Предпосылки

  1. Ржавчина (издание 2021 г.)
  2. Вранглер CLI
  3. Учетная запись Cloudflare (доступен бесплатный уровень)

Рабочие CloudFlare

Рабочие CloudFlare — это служба, которая выполняет пакеты WASM без необходимости настраивать или развертывать серверы.

Одним из ключевых отличий от других сервисов FaaS, таких как AWS Lambda, Azure Functions или облачная функция GCP, является то, что Workers по умолчанию не требует настройки для запуска в определенном регионе. Вместо этого код, который вы развертываете, выполняется на сервере, ближайшем к источнику запроса, на котором есть экземпляр среды выполнения Workers.

Среда выполнения Workers использует движок V8 (движок A js и WebAssembly) за кулисами для выполнения нашего кода. Как вы, возможно, знаете, V8 — это тот же движок, который используется в Chromium (Chrome, Edge, Opera и т. д.) и node.js.

Каждый раз, когда выполняется код, в среде выполнения Wrangler создается изолят V8. Изолят V8 — это легкая песочница, в которой можно безопасно выполнять наш код.

Многие изоляты V8 можно запускать в одной среде выполнения обработчика. Это ключевое отличие от других платформ FaaS, таких как AWS Lambda, которая имеет холодный запуск, связанный с каждым вызовом.

Обратите внимание, что при запуске Rust с опцией AWS Lambda.al2 время холодного запуска довольно быстрое в зависимости от вашего кода.

Создание изолята V8 считается намного более быстрым при меньшем потреблении памяти.

Workers станет вычислительной платформой для нашего сокращателя URL.

CloudFlare Рабочие КВ

Workers KV — это глобальное хранилище ключей и значений. По сути, данные, которые мы записываем с помощью KV, хранятся в избранном небольшом количестве централизованных мест в данных CloudFlare.

Эти данные кэшируются в других центрах обработки данных CloudFlare после доступа. Это гарантирует, что KV может поддерживать огромное количество операций чтения по сравнению с записью.

Для нашего сокращателя URL рабочая нагрузка заключается в однократной записи и многократном чтении, поэтому Workers KV идеально подходит.

Подход

У нас будет 2 функции:

  1. Сгенерируйте короткую ссылку, сохраните ее и сохраните в Worker KV
  2. Перенаправление на исходный URL-адрес при запросе на короткий URL-адрес

Вход в Wrangler

Для wrangler-cli выполните следующую команду

wrangler login

Затем войдите в свою учетную запись CloudFlare. Затем запустите

wrangler whoami

Если вы успешно вошли в систему, вы должны увидеть что-то похожее на

1-й рабочий проект — Генератор коротких ссылок

Для начала создайте рабочий проект шаблона. Выполните следующую команду:

npm init cloudflare url_generator worker-rust

Теперь, когда у нас есть загруженный шаблон. Давайте рассмотрим его, чтобы понять базовую настройку рабочего процесса Rust.

Но перед этим мы должны внести небольшие изменения в проект, чтобы проект rust-workers работал успешно. На момент написания в шаблоне были некоторые устаревшие ссылки на версии, которые вызовут следующую ошибку при запуске проекта:

✘ [ОШИБКА] Uncaught TypeError: невозможно прочитать свойства undefined (чтение «выборки»)

const ret = wasm.fetch (addHeapObject (req), addHeapObject (env), addHeapObject (ctx));

при извлечении (/Users/shyamsundarb/Library/rustwrk/project_name/build/worker/shim.mjs:181:19)

Чтобы избавиться от этой ошибки, обратитесь к выпуску Github ссылка. Теперь давайте продолжим.

Первый файл, который мы собираемся проверить, является ли он чем-то новым для использования, — это файл wrangler.toml. Давайте сначала посмотрим.

Wrangler.toml

Файл wrangler.toml содержит следующее.

name — Имя вашего воркера.

main — точка входа нашего воркера, которая будет выполнена, когда воркер будет запущен.

compatibility_date — дата, определяющая версию рабочей среды выполнения, которая будет использоваться.

vars — рабочая версия Rust CF

build — Команда сборки, которую wrangler будет использовать для компиляции нашего кода на ржавчине.

Пакет.json

Wrangler cli при выполнении ищет этот файл и сопоставляет команду, которую нужно выполнить.

Файл выполняет только команды обработчика для развертывания пакета или запуска локальной версии. Обратите внимание, что разработчик wrangler фактически запускает локальный экземпляр miniflare.

Miniflare — симулятор разработки и тестирования Cloudflare WorkersОткрыть внешнюю ссылку. Он написан на TypeScript и запускает ваш код в песочнице, реализующей API среды выполнения Workers.

Груз.томл

Ключевые моменты, на которые следует обратить внимание, — это тип ящика и зависимость рабочего ящика. Он помечен как cdylib и rlib. Объяснение cdylib можно найти в этом ответе на переполнение стека и в официальной документации.

lib.rs

Макрос события оборачивает наши функции проводкой, необходимой рабочей среде выполнения для взаимодействия с нашей функцией.

Маршрутизатор, как следует из названия, используется для определения нашего маршрута. Помимо маршрутов по умолчанию из шаблона, мы добавили два маршрута.

«/gshrturl»: получает URL-адрес, генерирует случайный короткий код и сохраняет его в Workers KV.

«/:shrtlink»: когда короткий URL-адрес перенаправляется, мы получаем фактический URL-адрес и направляемся туда.

Прежде чем мы сможем реализовать, нам нужно создать пространство имен KV для хранения коротких ссылок. Мы назовем это пространство имен «SHORTLINKS».

/гштурл:

Реализовано /ghrturl:

Мы генерируем случайную строку длиной 7 и сохраняем ее как ключ для URL-адреса, который мы получаем, и отвечаем коротким URL-адресом.

/”короткая ссылка:

Реализована короткая ссылка:

Берем код с пути и ищем КВ. Если мы получаем URL-адрес от KV, то мы перенаправляем, иначе мы выбрасываем ошибку.

Локальное тестирование

Теперь, когда у нас все готово, мы можем протестировать его локально, запустив

npx wrangler dev

Если все прошло хорошо, вы должны увидеть

Вы можете использовать URL, чтобы проверить это.

Развернуть в CloudFlare

Если вы проверили, что все в порядке локально, теперь вы можете легко выполнить развертывание в CloudFlare, используя

npx wranger deploy

Если все прошло хорошо, вы должны увидеть

Пробовать это

Отправьте почтовый запрос на вашу конечную точку:

Теперь скопируйте этот URL-адрес ответа, вставьте его на вкладку браузера и вперед. Вы должны быть перенаправлены на ту страницу, на которую изначально планировали.

Мы можем видеть наши записи KV в консоли CloudFlare.

Заключение

Цель этой статьи — изучить бессерверную платформу, предлагаемую CloudFlare. Я должен сказать, что они проделывают фантастическую работу, упрощая все, предоставляя мощный набор инструментов для разработчиков.

Я думаю, что эта платформа может быть полезна для людей, которые хотят быстро создавать вещи, не беспокоясь о стоимости или масштабе.

Область, где это может немного улучшиться, — это инструменты разработчика. Например, ошибка, с которой я столкнулся изначально в шаблоне рабочего процесса, какое-то время не имела задокументированного исправления.