Edge Computing با Cloudflare Workers

اجرای کد JavaScript در سرورهای لبه کلودفلر - سریع، مقیاس‌پذیر و بدون سرور

0ms
Cold Start
300+
مرکز داده
10M+
درخواست/ثانیه
$5
شروع از
Cloudflare Workers

Workers چیست؟

تعریف ساده:

پلتفرمی برای اجرای کد JavaScript در سرورهای لبه کلودفلر، بدون نیاز به مدیریت سرور.

کاربرد:

ایجاد API، تغییر درخواست‌ها، پردازش داده و اجرای منطق تجاری در نزدیک‌ترین نقطه به کاربر.

مزیت:

سرعت بالا (0ms cold start)، مقیاس‌پذیری خودکار و هزینه کم.

مثال ساده Worker

# Hello World Worker
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
return new Response('Hello from Edge!')
}
این کد در ۳۰۰+ مرکز داده اجرا می‌شود
کاربردهای عملی

Workers برای چه کارهایی؟

مثال‌های واقعی از استفاده Workers در پروژه‌های مختلف

API Gateway

ایجاد API سریع برای اتصال Frontend به Backend، با قابلیت Authentication و Rate Limiting

مثال: /api/users → Backend + Cache

Geo Routing

هدایت کاربران به سرور مناسب بر اساس موقعیت جغرافیایی یا زبان

مثال: ایرانی‌ها → سرور ترکیه

Image Resizing

تغییر سایز تصاویر به صورت Real-time بر اساس دستگاه کاربر

مثال: /image.jpg?w=300&h=200

Authentication

بررسی JWT Token، OAuth و کنترل دسترسی قبل از رسیدن به سرور اصلی

مثال: JWT Validation + User Info

A/B Testing

تست نسخه‌های مختلف سایت روی درصدی از کاربران

مثال: 50% کاربران → نسخه جدید

Edge Caching

کش هوشمند داده‌ها در Edge با منطق سفارشی

مثال: Cache API responses for 5min

مثال واقعی: API Gateway

Worker Code

# API Gateway Worker
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const url = new URL(request.url)
// Authentication
const token = request.headers.get('Authorization')
if (!isValidToken(token)) {
return new Response('Unauthorized', {status: 401})
}
// Route to backend
const backendUrl = 'https://api.backend.com' + url.pathname
return fetch(backendUrl, request)
}

مزایای این پیاده‌سازی

سرعت بالا

Authentication در Edge انجام می‌شود، نه در Backend

امنیت بیشتر

درخواست‌های غیرمجاز قبل از رسیدن به Backend مسدود می‌شوند

کاهش بار Backend

فقط درخواست‌های معتبر به Backend ارسال می‌شوند

مقیاس‌پذیری

به طور خودکار در ۳۰۰+ مرکز داده اجرا می‌شود

Workers Runtime

محیط اجرای Workers و قابلیت‌های آن

V8 JavaScript Engine

Workers از همان موتور V8 استفاده می‌کند که در Chrome استفاده می‌شود، اما با محدودیت‌های امنیتی.

پشتیبانی شده

  • • ES6+ JavaScript
  • • Fetch API
  • • Web Streams
  • • WebAssembly
  • • Crypto API

پشتیبانی نشده

  • • Node.js APIs
  • • File System
  • • Network Sockets
  • • setTimeout/setInterval

عملکرد و محدودیت‌ها

CPU Time50ms (رایگان)
Memory128MB
Script Size1MB
Subrequests50 per request

نکته: محدودیت‌ها در طرح‌های پولی بیشتر است

API های در دسترس

Fetch API

درخواست HTTP به سرورهای خارجی

fetch('https://api.example.com')

Crypto API

رمزنگاری و Hash

crypto.subtle.digest()

KV Storage

ذخیره‌سازی Key-Value

KV.get('key')

Cache API

کش سفارشی

caches.default.put()

Analytics

آمار و لاگ

analytics.writeDataPoint()

WebSockets

اتصال Real-time

new WebSocket()

مثال‌های عملی

پیاده‌سازی کاربردهای واقعی با Workers

مثال ۱: کوتاه‌کننده URL

Worker Code

# URL Shortener
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const url = new URL(request.url)
const path = url.pathname.slice(1)
// Get original URL from KV
const originalUrl = await URLS.get(path)
if (originalUrl) {
return Response.redirect(originalUrl, 301)
} else {
return new Response('Not Found', {status: 404})
}
}

نحوه کارکرد

۱. دریافت درخواست

کاربر لینک کوتاه را کلیک می‌کند

short.ly/abc123
۲. جستجو در KV

Worker از KV Storage لینک اصلی را می‌یابد

abc123 → https://example.com/long-url
۳. Redirect

کاربر به لینک اصلی هدایت می‌شود

301 Redirect

مزیت: سرعت بالا (< 10ms) و مقیاس‌پذیری خودکار

مثال ۲: Image Proxy و Resize

Worker Code

# Image Proxy
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const url = new URL(request.url)
const width = url.searchParams.get('w') || 800
const height = url.searchParams.get('h') || 600
const imageUrl = url.searchParams.get('url')
// Fetch original image
const response = await fetch(imageUrl)
// Resize using Cloudflare Images
const resizedImage = await resizeImage(response, width, height)
return new Response(resizedImage, {
headers: { 'Content-Type': 'image/jpeg' }
})
}

کاربرد عملی

درخواست نمونه
/resize?url=image.jpg&w=300&h=200
موبایل
300x200 - کیفیت متوسط
تبلت
600x400 - کیفیت بالا
دسکتاپ
1200x800 - کیفیت فوق‌العاده

نتیجه: ۷۰٪ کاهش حجم تصاویر و ۳ برابر سرعت بیشتر

توسعه و استقرار

راهنمای کامل توسعه و Deploy کردن Workers

۱

نصب Wrangler CLI

Wrangler ابزار رسمی کلودفلر برای توسعه و Deploy کردن Workers است.

# نصب Wrangler
npm install -g wrangler
# ورود به حساب
wrangler login
۲

ایجاد پروژه جدید

پروژه Worker جدید ایجاد کنید و ساختار اولیه را تنظیم کنید.

# ایجاد پروژه
wrangler generate my-worker
cd my-worker
# ساختار پروژه
├── src/
│ └── index.js
├── wrangler.toml
└── package.json
۳

توسعه محلی

Worker را به صورت محلی تست کنید قبل از Deploy.

wrangler.toml

name = "my-worker"
main = "src/index.js"
compatibility_date = "2023-05-18"
# KV Bindings
[[kv_namespaces]]
binding = "MY_KV"
id = "your-kv-id"

دستورات مفید

wrangler dev
اجرای محلی
wrangler publish
Deploy به Production
wrangler tail
مشاهده Logs
۴

Deploy و مانیتورینگ

Worker را Deploy کرده و عملکرد آن را مانیتور کنید.

Deploy

# Deploy به Production
wrangler publish
✨ Success! Uploaded to Cloudflare
🌍 https://my-worker.username.workers.dev

مانیتورینگ

Requests/sec
Real-time metrics
Error Rate
< 0.1%
CPU Time
Average: 5ms

قیمت‌گذاری Workers

طرح‌های مختلف برای نیازهای متفاوت

رایگان

$0
برای شروع
  • 100,000 درخواست/روز
  • 10ms CPU time
  • workers.dev subdomain
محبوب

پولی

$5
در ماه
  • 10 میلیون درخواست
  • 50ms CPU time
  • Custom domains
  • Analytics & Logs

سازمانی

سفارشی
برای شرکت‌ها
  • درخواست نامحدود
  • CPU time نامحدود
  • SLA 99.9%
  • پشتیبانی اختصاصی

آماده شروع با Workers؟

حالا که Workers را یاد گرفتید، می‌توانید اولین Worker خود را بسازید یا با سایر خدمات آشنا شوید