приглашенный автор
Это гостевой пост от Хэнка Джейкобса, ведущего инженера-программиста по платформенным сервисам и инструментам в 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. Некоторые примеры других проектов сообщества:
- Cloudflare Worker Local (еще один подход к локальному тестированию Worker)
- Обозреватель пользовательского интерфейса Cloudflare Workers KV
Первоначально опубликовано на сайте blog.cloudflare.com 19 декабря 2018 г.