Cloudflare developer platform là gì, và vì sao khác Lambda

Cloudflare không còn chỉ là CDN. Workers, D1, R2, KV, Queues, DOs, Workers AI, Vectorize tạo thành nền tảng edge-native. Mental model đầu tiên, so sánh với Lambda.

· 9 phút đọc · Read in English
Tổng quan Cloudflare Developer Platform — Workers V8 isolate cùng 11 primitive (D1, R2, KV, Queues, Durable Objects, Workers AI, Vectorize, Stream, Images, Analytics Engine, Cron) nối qua binding wrangler

TL;DR

Cloudflare developer platform là nền tảng edge-native để build full-stack app trực tiếp trên mạng của Cloudflare. Phần tính toán chạy trong V8 isolate ở 300+ PoP, không phải container. Xung quanh Workers là 11 primitive khác (D1, R2, KV, Queues, Durable Objects, Workers AI, Vectorize, Stream, Images, Analytics Engine, Cron triggers) nối qua binding trong wrangler.jsonc.

Khác với Lambda một cách căn bản:

Isolate không phải container. Cold start đo bằng mili-giây, dấu chân bộ nhớ đo bằng megabyte, đơn vị mở rộng là request chứ không phải instance. Điều đó đổi cả cách bạn thiết kế app, không chỉ đổi nơi triển khai.

Bài này dựng mental model đầu tiên, so sánh với Lambda/Vercel/Deno Deploy, và chỉ 12 primitive bạn sẽ gặp xuyên suốt series. Part 2 đi sâu môi trường chạy; Parts 3-8 đi từng storage primitive; Parts 13-16 AI + Durable Objects.


Dành cho ai

  • Dev quen với Node.js/Lambda, muốn thử môi trường chạy edge mà không đọc hết docs Cloudflare.
  • Nhóm đang cân nhắc Cloudflare Workers cho một dịch vụ mới (API, CMS, worker chạy nền).
  • Ai đã dùng Cloudflare cho CDN/DNS nhưng chưa hiểu tại sao nền tảng lại đáng quan tâm thêm.

Bạn nên đã biết JavaScript/TypeScript ở mức cơ bản, đã từng triển khai một API REST, và hiểu luồng HTTP request/response.

Sau bài này bạn sẽ:

  • Biết Workers khác Lambda ở điểm nào (không chỉ “nhanh hơn”).
  • Nhớ 12 primitive của nền tảng và vai trò từng cái.
  • Quyết định được khi nào nên thử Cloudflare cho khối lượng công việc tiếp theo, khi nào không.

Bài này không nói về gì

  • Cloudflare One (Zero Trust, SASE), đã có series riêng 20 part.
  • Pages như đích triển khai Jamstack, chỉ nhắc qua ở Part 11.
  • Networking, DDoS, WAF, đó là mặt “CDN cổ điển” của Cloudflare, bài này tập trung build-on-CF.
  • Cấu hình zone, DNS record, SSL, coi như đã có.

Cloudflare đã khác

Cách đây 5 năm, Cloudflare là “CDN cộng với WAF cộng với DDoS”. Dùng Cloudflare nghĩa là đặt một lớp proxy trước origin đang chạy ở AWS/GCP/DigitalOcean.

Giờ khác.

Mọi thứ bạn cần cho một ứng dụng full-stack đều chạy được trực tiếp trên mạng Cloudflare:

  • Tính toán: Workers
  • Static assets: Workers Assets hoặc Pages
  • Database quan hệ: D1 (SQLite ở edge)
  • Object storage: R2 (tương thích S3, không phí egress)
  • Cache key-value: KV
  • Messaging: Queues + Durable Objects
  • Inference AI: Workers AI (hơn 50 model)
  • Vector DB: Vectorize
  • Media: Stream, Images
  • Analytics: Analytics Engine
  • Job định kỳ: Cron triggers

Tất cả chạy ở 300+ PoP trên thế giới. Code của bạn chạy gần người dùng, database cũng gần người dùng, inference AI cũng gần người dùng. Request không phải backhaul về một region trung tâm.

Blog bạn đang đọc chạy trên chính stack này: Workers phục vụ asset, D1 lưu subscriber + page view + AI cache, KV giữ credential OIDC tạm thời, Vectorize lưu embedding để tìm kiếm ngữ nghĩa, Workers AI sinh embedding, Analytics Engine nhận sự kiện, Cron chạy digest hàng tuần. Một Worker, một wrangler.jsonc, không tài khoản AWS, không container registry, không CI runner tự host.

Đó là vì sao Cloudflare không còn là “CDN thêm”. Đó là một nền tảng.


Primitive: 12 thứ xoay quanh Workers

Các primitive của Cloudflare developer platform xếp thành 3 lớp: Tính toán (Workers, Pages, Static Assets, Cron Triggers), Storage (D1, R2, KV, Cache API), và Messaging/AI (Queues, Durable Objects, Workers AI, Vectorize). Mỗi primitive là một binding trong wrangler.jsonc.

Mental model cần nhớ: Workers là phần tính toán, mọi primitive khác là binding.

Trong wrangler.jsonc bạn khai báo:

{
  "name": "my-app",
  "main": "src/index.ts",
  "d1_databases": [{ "binding": "DB", "database_name": "my-db", "database_id": "..." }],
  "r2_buckets": [{ "binding": "ASSETS_BUCKET", "bucket_name": "my-assets" }],
  "kv_namespaces": [{ "binding": "KV", "id": "..." }],
  "queues": { "producers": [{ "binding": "QUEUE", "queue": "my-queue" }] },
  "ai": { "binding": "AI" },
  "vectorize": [{ "binding": "VECTORIZE", "index_name": "my-index" }]
}

Trong Worker code:

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const row = await env.DB.prepare("SELECT * FROM posts WHERE slug = ?").bind(slug).first();
    const blob = await env.ASSETS_BUCKET.get("logo.png");
    const cached = await env.KV.get("feature-flags");
    await env.QUEUE.send({ type: "view", slug });
    const embedding = await env.AI.run("@cf/baai/bge-m3", { text: [query] });
    const matches = await env.VECTORIZE.query(embedding.data[0], { topK: 5 });
    return Response.json({ row, cached, matches });
  }
};

Đây là toàn bộ “bề mặt API” để nói chuyện với mọi primitive. Không SDK client. Không connection pool. Không tài khoản IAM. Binding là hợp đồng giữa Worker và nền tảng.

Từ Part 3 sẽ đi sâu mental model này. Từ Part 5-8 từng primitive storage. Từ Part 13-16 AI + Durable Objects.


Isolate không phải container

Đây là điểm thiết kế lớn nhất, và cũng là nguồn hiểu nhầm lớn nhất khi dev từ Node/Lambda sang Workers.

So sánh Cloudflare Workers (V8 isolate) và AWS Lambda (container microVM). Workers: cold start khoảng 5ms, bộ nhớ 128MB, một isolate phục vụ hàng nghìn request đồng thời, chạy ở edge. Lambda: cold start 100 đến 500ms, bộ nhớ 128MB đến 10GB, một container ghim một request tại một thời điểm, chạy ở region.

Mô hình Lambda: mỗi lần gọi cần một container (Firecracker microVM). Container khởi tạo bao gồm boot OS tối giản, mount filesystem, khởi động môi trường chạy (Node/Python/Go), nạp code, chạy init handler. Mất 100-500ms cho cold start. Container giữ trạng thái qua các lần gọi kế tiếp, nhưng ghim 1 request/1 container tại một thời điểm.

Mô hình Workers: mỗi Worker là một V8 isolate. Isolate là khái niệm của engine V8 (thằng chạy Chrome, Node, Deno): một sandbox giữa các đoạn JS trong cùng tiến trình. Google dùng isolate để chạy hàng trăm tab trình duyệt mà tab không lộ bộ nhớ sang tab khác. Cloudflare dùng isolate để chạy hàng nghìn Worker của nhiều tenant trên một tiến trình, mỗi Worker sandbox với nhau.

Hệ quả:

  • Cold start ~5ms: chỉ cần compile script JS vào V8, không khởi động OS.
  • Giới hạn bộ nhớ 128MB: đủ cho handler request, không phải cho cả app persistent.
  • Request đồng thời trong một isolate: không ghim request. 1 isolate có thể phục vụ hàng nghìn request song song (async/await tự nhiên).
  • Đơn vị mở rộng = request: không phải instance. Không có “số Worker đang chạy” theo nghĩa concurrent của Lambda. Cloudflare mở rộng bằng cách đẩy request vào isolate nào gần và rảnh.
  • 300+ PoP: isolate cùng code được triển khai khắp mạng edge. Request đi đến PoP gần người dùng nhất, không phải region xa.

Những thứ đổi theo

Không chỉ là “triển khai ở đâu khác”. Mental model code cũng đổi:

  • Không có filesystem lâu dài: không đọc/ghi /tmp như Lambda. Nếu cần trạng thái dài hạn, dùng D1/R2/KV.
  • Không có cache mức tiến trình giữa các request: không let cache = {} rồi kỳ vọng tồn tại qua request. Mỗi isolate có thể bị huỷ bất kỳ lúc nào. Dùng KV hoặc Cache API cho trạng thái giữa các request.
  • Không fs, không child_process: môi trường chạy giống trình duyệt + Workers API, không phải Node đầy đủ. Một số thư viện Node không chạy được, hoặc cần cờ nodejs_compat.
  • Giới hạn subrequest: mỗi request có giới hạn khoảng 50 subrequest (fetch ra ngoài). Với paid plan lên 1000. Không được mở kết nối tới hàng chục origin trong một handler.
  • Giới hạn CPU time: có ngân sách CPU time. Tính toán nặng phải chia nhỏ hoặc đẩy ra Workers AI/Queue.

Khi isolate không hợp

Không phải mọi khối lượng công việc đều hợp Workers:

  • Job chạy dài (training ML, encoding video 1h): Workers có giới hạn CPU time. Dùng dịch vụ khác hoặc đẩy qua Queue/Durable Object Workflows.
  • Tool nặng filesystem (imagemagick, ffmpeg binary): không chạy được. Dùng Images/Stream hoặc dịch vụ bên ngoài.
  • Thư viện chỉ chạy Node native với binary C++ (sharp, canvas, node-sass): khó hoặc không tương thích. Dùng WASM thay thế hoặc dịch vụ bên ngoài.
  • Độ trễ chặt với database bên ngoài (RDS trong VPC riêng, không có endpoint công khai): cần Tunnel hoặc Hyperdrive hoặc giữ dịch vụ ở AWS.

Workers sáng nhất cho API request/response ngắn, web app full-stack, phối hợp realtime qua Durable Objects, inference AI. Với xử lý batch 2h không phải khối lượng công việc của Workers.


Ai đã chạy thành công

Không liệt kê bằng marketing, nêu vài dẫn chứng có tài liệu công khai:

  • Shopify: migrate Oxygen (môi trường chạy storefront) sang Workers sau khi đo cold start.
  • Canva: dùng Workers cho chỉnh sửa cộng tác realtime qua Durable Objects.
  • Adobe: Marquee (pipeline sinh ảnh) chạy trên Workers AI.
  • Nhiều SaaS indie và agency: toàn stack trên Cloudflare, không AWS.

Ở quy mô nhỏ hơn, blog này đang chạy hoàn toàn trên một Worker: phục vụ 58 bài, subscriber + newsletter + tóm tắt AI + tìm kiếm ngữ nghĩa + webmention + analytics + admin JWT, không có backend khác. wrangler.jsonc có 7 binding, 1 cron trigger. Tổng secret ở .env cục bộ dưới 10 dòng (chủ yếu API key bên ngoài cho Resend, Bedrock).


So với Vercel và Deno Deploy

Đây là 3 môi trường chạy edge phổ biến nhất hiện tại, thường bị gộp chung. Khác biệt thực tế:

Khía cạnhCloudflare WorkersVercel Edge FunctionsDeno Deploy
Môi trường chạyV8 isolateV8 isolate (Cloudflare OEM)V8 isolate (Deno)
PoP300+40+ (chọn region)35+
Cold start~5ms~50ms~30ms
Storage primitiveD1, R2, KV, Queues, DO, AIKV, Blob (qua Vercel)Deno KV
Phối hợp statefulDurable ObjectsKhông có sẵnDeno KV (hạn chế)
Vendor lock-inCao (primitive Cloudflare)Cao (nền tảng Vercel)Thấp (Deno mã nguồn mở)
Mô hình giáRequest + duration + storageRequest + function durationRequest + egress

Vercel Edge Functions về môi trường chạy gần như là Workers đóng gói lại (Vercel mua từ Cloudflare một thời). Khác biệt chính là nền tảng xung quanh: Vercel thiên về triển khai web framework (Next.js), Cloudflare thiên về primitive full-stack.

Deno Deploy nhẹ hơn nhưng ít primitive, chủ yếu cho API đơn giản. Tốt cho prototype nhanh, kém cho production có nhiều primitive.

Nếu bạn cần D1 + R2 + KV + Queues + DO + AI + Vectorize trong một môi trường chạy, Cloudflare là lựa chọn duy nhất hiện tại.


Khi nào KHÔNG chọn Cloudflare

Bài viết hype Cloudflare thì nhiều. Trường hợp nên chọn khác:

  • Khối lượng công việc cần môi trường chạy Linux đầy đủ (Nginx custom module, daemon cổ điển, tool binary): dùng container ở AWS/GCP.
  • Database đã khổng lồ ở AWS, migration tốn hơn giá trị: chạy API ở Lambda gần DB, giữ chi phí data transfer thấp.
  • Nhóm đã có chuyên môn vận hành AWS, công ty đang audit SOC 2: chuyển nền tảng giữa chu kỳ audit là rủi ro không cần.
  • Cần inference GPU cho model tuỳ chỉnh: Workers AI có catalog 50+ model, nhưng không chạy được model tự train. Bedrock/SageMaker/Replicate phù hợp hơn.
  • Quy trình CI/CD đã gắn chặt AWS (ECR → ECS → CodeBuild): chi phí đổi toolchain lớn.

“Edge là tương lai” không phải lý do đủ. Chọn khi có vấn đề cụ thể mà edge giải quyết: độ trễ toàn cầu, chi phí egress S3, vendor lock tech stack.


Roadmap series

20 bài của series này chia 5 block:

Block 1, Foundation (Parts 1-4)

  • Part 1: Bài này.
  • Part 2: Workers runtime mental model.
  • Part 3: Mental model 3 primitive binding.
  • Part 4: Wrangler + Miniflare dev loop.

Block 2, Storage (Parts 5-8)

  • Part 5: KV deep-dive.
  • Part 6: D1 trong production.
  • Part 7: R2 object storage.
  • Part 8: Queues và Durable Objects.

Block 3, Framework và build (Parts 9-12)

  • Part 9: Router (Hono, Itty, vanilla).
  • Part 10: ORM trên D1 (Drizzle, Prisma).
  • Part 11: Astro, Remix, SvelteKit trên Workers.
  • Part 12: CI/CD với Wrangler + GitHub Actions.

Block 4, AI và nâng cao (Parts 13-16)

  • Part 13: Workers AI + AI Gateway.
  • Part 14: Vectorize + pattern RAG.
  • Part 15: Durable Objects cho realtime.
  • Part 16: Stream + Images.

Block 5, Production (Parts 17-20)

  • Part 17: Observability (Logs, Analytics, Tail Workers).
  • Part 18: Bảo mật (secrets, CSP, Bot Management).
  • Part 19: Mô hình chi phí thực tế.
  • Part 20: Migration từ AWS/Vercel.

Mỗi bài sẽ có code thật, gotcha gặp khi build blog này hoặc side project, checklist production. Không đọc lại docs.


Kết

Cloudflare không còn là CDN thêm. Đó là một nền tảng full-stack, edge-native, khác hẳn mô hình container của AWS Lambda. 12 primitive xung quanh Workers đủ để build blog, CMS, SaaS, chat app, RAG endpoint, newsletter, dashboard analytics trong một wrangler.jsonc.

Isolate đổi cả thiết kế code: bộ nhớ nhỏ, cold start nhanh, đơn vị mở rộng là request, không có filesystem lâu dài, không có cache tiến trình giữa các request. Chấp nhận mental model đó, mọi thứ còn lại rơi vào chỗ.

Part 2 tới đi sâu vào môi trường chạy: lifecycle request, handler fetch, subrequest, giới hạn CPU, waitUntil, context object, và cách viết handler không rò rỉ state.


Tham khảo