blog.dopana

Back

Cloudflare Workers chạy code ở 330+ datacenter trên toàn cầu — gần user nhất, không cold start, giá rẻ.

Workers vs Lambda#

Cloudflare WorkersAWS Lambda
RuntimeV8 IsolatesContainer
Cold start~0ms (luôn warm)~100-500ms
Regions330+Tự chọn region
Price$0.30/million req$0.20/million req + duration
Duration30s CPU, 5min (fetch)15 phút
Memory128MB (free)128MB-10GB

Hello World#

export default {
  async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
    return new Response('Hello from the edge!', {
      headers: {
        'Content-Type': 'text/plain',
        'x-edge-location': request.cf?.colo || 'unknown',
      },
    });
  },
};
typescript

Routing#

Storage — KV, R2, D1#

KV — Key-Value Store#

// wrangler.jsonc
{
  "kv_namespaces": [
    { "binding": "CACHE", "id": "abc123" }
  ]
}
typescript
// Read
const cached = await env.CACHE.get('user:123', 'json');
if (cached) return Response.json(cached);

// Write
const user = await fetchUser(123);
await env.CACHE.put('user:123', JSON.stringify(user), {
  expirationTtl: 3600, // 1 giờ
});

// List
const list = await env.CACHE.list({ prefix: 'user:', limit: 100 });
typescript

R2 — Object Storage (S3-compatible)#

const object = await env.BUCKET.get('images/avatar.jpg');
if (!object) return new Response('Not found', { status: 404 });

return new Response(object.body, {
  headers: {
    'Content-Type': object.httpMetadata?.contentType || 'image/jpeg',
    'Cache-Control': 'public, max-age=31536000',
  },
});

// Upload
await env.BUCKET.put('uploads/file.pdf', request.body, {
  httpMetadata: { contentType: 'application/pdf' },
});
typescript

D1 — SQLite Database#

Env — Environment Variables#

Cron Triggers#

export default {
  async scheduled(event: ScheduledEvent, env: Env, ctx: ExecutionContext) {
    switch (event.cron) {
      case '*/5 * * * *':
        await syncData(env);
        break;
      case '0 0 * * *':
        await cleanupOldRecords(env);
        break;
    }
  },
};
typescript
{
  "triggers": {
    "crons": ["*/5 * * * *", "0 0 * * *"]
  }
}
json

Workers AI#

Built-in AI inference at the edge:

Wrangler — CLI#

WebSocket#

Deploy từ GitHub#

Middleware Pattern#

Best Practices#

Kết Luận#

Cloudflare Workers là nền tảng serverless edge tốt nhất hiện tại: không cold start, 330+ locations, giá rẻ. Kết hợp KV (cache), R2 (file), D1 (SQLite), AI (inference) — bạn có thể xây dựng toàn bộ ứng dụng mà không cần server truyền thống.

Tài liệu tham khảo#