приглашенный автор

Это гостевой пост от Хэнка Джейкобса, ведущего инженера-программиста по платформенным сервисам и инструментам в Dollar Shave Club. Эта запись первоначально появилась в Блоге DSC Engineering.

В Dollar Shave Club мы постоянно ищем способы улучшить то, как мы создаем и поставляем код. Ключевым моментом является сокращение времени, необходимого инженерам для выпуска кода. Предоставление инженерам среды разработки, максимально приближенной к производственной, действительно помогает.

Ранее в этом году мы начали оценивать Cloudflare Workers как замену нашим устаревшим уровням граничной маршрутизации и кэширования. Cloudflare Workers привносит мощь Javascript в Cloudflare Edge. Разработчики могут писать и развертывать Javacript, который выполняется для каждого HTTP-запроса, проходящего через Cloudflare. Эта возможность нас порадовала, но отсутствовала важная вещь — способ локального запуска кода Worker. Мы не смогли найти подходящего решения, поэтому начали строить свое. К счастью, Workers использует открытый Service Workers API, поэтому у нас была документация для ознакомления. Через несколько недель родился Cloudworker.

Облачный работник

Cloudworker — это локальная среда выполнения Cloudflare Worker. С его помощью вы можете запускать сценарии Cloudflare Worker локально (или в любом месте, где вы можете запустить образ Docker). Наша основная цель с Cloudworker — быть максимально совместимым с Cloudflare Workers, имитируя функции там, где мы можем, и заглушая функции в противном случае.

Начиная

Чтобы использовать Cloudworker, установите его с помощью npm.

npm install -g @dollarshaveclub/cloudworker

Использовать его просто.

cloudworker <worker script>

См. readme для полного списка поддерживаемых флагов.

Веб-сборка

Cloudflare Workers поддерживает прямое выполнение WebAssembly, как и Cloudworker.

Чтобы начать использовать WebAssembly, запустите Cloudworker с флагом --wasm, чтобы привязать переменную Javascript к вашему файлу .wasm:

cloudworker --wasm Wasm=module.wasm worker.js

Из вашего рабочего скрипта теперь вы можете создать новый экземпляр WebAssembly со связанной переменной.

addEventListener('fetch', event => {
  const instance = new WebAssembly.Instance(Wasm)
  instance.exports.exported_func()
  event.respondWith(new Response('Success!'))
})See the WebAssembly section of the readme for more examples.

Рабочий КВ

Cloudworker также поддерживает встроенную в память бета-версию Workers KV функции Cloudflare Workers. Workers KV — это хранилище ключей и значений, к которому могут обращаться сценарии Worker.

Пары ключ-значение можно привязать к переменной с помощью флага --set.

cloudworker --set Store.hello=world worker.js

Затем эти пары ключ-значение можно использовать в рабочем скрипте.

addEventListener('fetch', async event => {  
  const value = await Store.get('hello')    
  event.respondWith(new Response(value)) // Responds with 'world'
})

Заключительные мысли

С момента своего первого выпуска Cloudworker стал неотъемлемой частью нашего рабочего процесса разработки Cloudflare Worker. Мы используем его для локальной разработки нашего пограничного маршрутизатора, а также используем его в наших средах контроля качества по запросу. Кроме того, мы использовали Cloudworker в качестве платформы для внутреннего прокси-сервера, используемого для уменьшения размера наших сред контроля качества. Мы действительно в восторге от Cloudworker и надеемся, что вы найдете его таким же полезным, как и мы!

Примечание редактора Cloudflare. Нам нравится видеть все проекты, созданные сообществом Cloudflare Workers! Хотя мы не можем публиковать в блоге обо всем, это помогает другим, когда вы делитесь своими разработками на community.cloudflare.com и в Twitter. Некоторые примеры других проектов сообщества:

Первоначально опубликовано на сайте blog.cloudflare.com 19 декабря 2018 г.