آشنایی با Cloudflare Workers برای وباپها
خلاصهٔ کاملتر
این مطلب قسمت اول یه سری دوقسمتیه که آدام رَکیس دربارهٔ استفاده از Cloudflare Workers برای دیپلوی وباپ نوشته. به گفتهٔ نویسنده، Workers از بیرون شبیه همون کلود فانکشنهاییه که رو AWS Lambda اجرا میکنین: یه وبسرور کوچیک که با اومدن ترافیک بالا میاد، با زیاد شدنش تعدادش زیاد میشه و با تموم شدن ترافیک از بین میره — بدون اینکه خودتون درگیر لود بالانسر و اسکیل افقی بشین.
فرق مهم اینجاست که Worker روی V8 isolate اجرا میشه؛ V8 همون موتور جاوااسکریپت کرومه و isolate یه محیط اجرای سبک و سندباکسشده داخلشه. سبک بودن نکتهٔ اصلیه: Lambda برای بالا اومدن باید provision بشه و کد شما رو لود کنه، که معمولاً چند صد میلیثانیه طول میکشه، ولی Workerها معمولاً تو چند میلیثانیهٔ تکرقمی بالا میان.
نویسنده خودش هوای انصاف رو داره و میگه کولد استارت اونقدرها که فکر میکنین فاجعه نیست: Lambda بعد از سرویس دادن مدتی زنده میمونه و برای ریکوئستهای بعدی دوباره استفاده میشه، پس اپهایی با ترافیک پایدار خیلی کم کولد استارت میبینن. ولی ترافیک اسپایکی حتماً فانکشن جدید بالا میاره، و به گفتهٔ اون لِیتنسی پایین Cloudflare همچنان یه دلیل جدی برای انتخابشه.
سازشها هم هست. تاریخاً Workers چون روی isolate اجرا میشدن خیلی از APIهای Node رو نداشتن؛ این با فلگ node_compat عوض شده. سازش دوم سفتتره: هر ریکوئست باید کاملاً مستقل باشه و بعد از خودش تمیزکاری کنه — نمونهٔ آزاردهندهاش، مدیریت کانکشن دیتابیسه که نویسنده گذاشته برای قسمت دوم.
برای نمونه یه اپ تازهٔ TanStack Start رو اسکفولد میکنه، میفرسته رو گیتهاب و از داشبورد Cloudflare با Workers & Pages وصلش میکنه. ولی به گفتهٔ نویسنده، اپ واقعی به فایل wrangler.jsonc نیاز داره؛ بهجای دستساز نوشتنش، npx wrangler deploy رو اجرا میکنه و Cloudflare خودش فایل رو میسازه: مقدار main رو درست حدس میزنه، compatibility_flags رو با nodejs_compat پر میکنه، پکیجهای لازم مثل پلاگین Vite رو نصب میکنه و حتی کانفیگ Vite رو ویرایش میکنه. نویسنده این DX رو تحسین میکنه و فقط گله داره که کاش observability پیشفرض روشن بود.
آخرین بخش دربارهٔ سکرتهاست. سکرت پروداکشن رو با دستور wrangler secret put ست میکنین و مقدارهای لوکال از فایل .env خونده میشن، نه از سکرتهای پروداکشن. برای خوندنشون هم غیر از process.env یه راه تایپدار دارین: با wrangler types فایل worker-configuration.d.ts ساخته میشه و بعدش سکرتها روی آبجکت env تایپشده در دسترسن.
import { env } from "cloudflare:workers";قسمت دوم قراره سراغ چیزهای ظریفتر بره؛ مخصوصاً کانکشن دیتابیس و اون قانون «هر ریکوئست خودش رو تمیز کنه».
نکات کلیدی:
- Workers مثل Lambda خودکار اسکیل میشن، ولی روی V8 isolate اجرا میشن و تو چند میلیثانیه بالا میان.
- کولد استارت Lambda معمولاً چند صد میلیثانیهست و بیشتر تو ترافیک اسپایکی خودش رو نشون میده.
- فلگ node_compat بیشتر مشکل قدیمی نبودِ APIهای Node رو حل کرده.
- هر ریکوئست باید کاملاً مستقل باشه و بعد از خودش تمیزکاری کنه؛ نمونهٔ دردسرسازش کانکشن دیتابیسه.
- npx wrangler deploy فایل wrangler، اسکریپتها و کانفیگ Vite رو خودکار برای شما تنظیم میکنه و wrangler types سکرتها رو تایپدار میکنه.




