· cloudflare / aws / serverless

Cloudflare Workers vs AWS Lambda: So Sánh Serverless 2026

Workers thắng cho API I/O-bound phục vụ toàn cầu. Lambda giữ thế mạnh với CPU-nặng, timeout dài và hệ sinh thái AWS. Phân tích chi tiết từng giới hạn.

Bởi Ethan

2.624 từ · 14 phút đọc

Dùng Cloudflare Workers nếu bạn đang xây dựng một API phục vụ toàn cầu mà cold start latency ảnh hưởng tới p99. Dùng AWS Lambda nếu bạn cần hơn 128 MB memory, timeout vượt quá 30 giây CPU time, hoặc hệ thống đã gắn chặt với các dịch vụ AWS như RDS, SQS, hay Step Functions.

Khoảng cách cold-start vào năm 2026 đã đủ lớn để không còn là một trade-off thực sự nữa — đó là một ràng buộc cứng. Điều bạn thực sự cần quyết định là liệu hệ sinh thái của Cloudflare có đáp ứng được nhu cầu của bạn hay không.

Bài này dành cho ai

Các kỹ sư đang chọn serverless runtime cho API mới, hoặc đang cân nhắc chuyển khỏi Lambda. Nếu bạn đang dùng Workers và hài lòng, bài này sẽ không thay đổi quan điểm của bạn. Nếu bạn Lambda-first và tự hỏi Workers có bị thổi phồng quá không, hãy đọc tiếp.

Dữ liệu chúng tôi dùng

Số liệu trong bài đến từ case study production của Rebal AI (tháng 3 năm 2026) — một API annotation ảnh chạy Node.js 20, đạt đỉnh 2.3M requests/tháng — và từ Lambda cold-start benchmark tracker do Maxime David duy trì, cập nhật hàng ngày. Phép tính chi phí dùng số liệu chính thức từ trang pricing của CloudflareAWS Lambda pricing tính đến tháng 5 năm 2026. Mỗi con số cụ thể đều có link dẫn nguồn ngay trong câu.

Sự khác biệt cốt lõi: isolates vs containers

Lambda chạy code trong Firecracker MicroVM hoặc container. Mỗi cold start gồm hai giai đoạn bị tính tiền (kể từ ngày 1 tháng 8 năm 2025, INIT bị tính theo cùng mức GB-seconds như INVOKE): INIT — tải code, khởi động runtime, chạy static initializer — rồi đến INVOKE. Riêng giai đoạn INIT với Node.js 20 đã tốn 200–350 ms ở p50. Java 21 không có SnapStart: 1–3 giây ở p50.

Workers dùng V8 isolates — cùng engine với Chrome, nhưng không có process boundary. Mỗi Worker là một JavaScript context được sandbox hóa, chia sẻ một OS process duy nhất với hàng nghìn isolate khác. Không có VM boot, không có container pull, không có OS init. Isolate tải trong vòng dưới 5 ms từ cold.

Có một cơ chế khiến con số cold start gần như không còn ý nghĩa trong thực tế: khi client mở HTTPS và gửi ClientHello (có chứa hostname qua SNI), Cloudflare dùng khoảnh khắc đó để pre-load Worker. Đến khi TLS handshake hoàn tất — hai round-trip từ client đến Cloudflare edge — Worker đã warm rồi. Vì Workers tải trong vòng dưới 5 ms và RTT thực tế từ client đến Cloudflare luôn dài hơn, cold start mà request gặp phải là zero. Bài viết của Cloudflare về cơ chế này giải thích đầy đủ hơn.

Lưu ý: tối ưu hóa này chỉ áp dụng ở root hostname. Path-based routing cho sub-path Workers không được hưởng lợi.

Cold start: thực tế năm 2026

Trước tháng 8 năm 2025, Lambda cold start là vấn đề latency. Từ ngày 1 tháng 8 năm 2025, đó còn là vấn đề chi phí — AWS bắt đầu tính tiền giai đoạn INIT theo cùng mức GB-seconds như INVOKE. Một cold start kéo dài 1 giây trên function Node.js 256 MB tốn khoảng 0.256 × 1 × $0.0000166667 = $0.0000043 mỗi lần. Đơn lẻ thì không đáng kể, nhưng ở scale lớn thì tích lũy — và người dùng vẫn phải gánh chịu: một spike 400 ms, và bạn trả tiền cho điều đó.

Lambda cold-start p50 theo runtime, dựa trên dữ liệu benchmark hiện tại:

Runtimep50 cold startp99 cold start
Node.js 20200–350 ms1.2–2.8 s
Python 3.12200–400 ms2.1–3.5 s
Java 21 (không SnapStart)1–3 s4–7 s
Java 21 (SnapStart)90–140 ms~780 ms
Go50–100 ms<200 ms
Rust (provided.al2023, arm64)12–22 ms<50 ms

Provisioned Concurrency loại bỏ cold start nhưng bạn trả tiền cho capacity nhàn rỗi: $0.0000041667 per GB-second uptime, bất kể lượng traffic. Một function 256 MB giữ warm suốt ngày đêm tốn khoảng $27/tháng mỗi concurrent instance, chưa tính request charges. 10 instance: ~$270/tháng thêm vào chi phí Lambda bình thường — chỉ để giữ instance warm.

Workers cold start: overhead 2–5 ms khi cơ chế TLS không pre-load được, bằng zero khi pre-load thành công. Không có khái niệm Provisioned Concurrency, không có chi phí nhàn rỗi.

Latency tại edge: 300 PoP vs một region

Mọi deployment trên Workers đều đến 300+ thành phố cùng lúc. Không có bước “chọn region”. Trong case study của Rebal AI, p99 cold-start overhead từ một warm Worker là 2–5 ms toàn cầu — về cơ bản là mức sàn, vì Cloudflare pre-load isolate trong quá trình TLS handshake tại PoP gần nhất.

Lambda nằm trong một region duy nhất. Người dùng ở Đông Nam Á gọi function ở us-east-1 sẽ chịu toàn bộ round-trip xuyên lục địa cộng với thời gian thực thi function. Lambda@Edge chạy tại các PoP của CloudFront nhưng với giới hạn thấp hơn nhiều: timeout 5 giây cho viewer-facing function, gói deployment 1 MB, 128 MB memory. Các kỹ sư tại Rebal AI ghi nhận cold start 400–600 ms trên Lambda@Edge tiêu chuẩn tại các PoP Đông Nam Á — không có Provisioned Concurrency. Khi bật Provisioned Concurrency cho các function nhạy cảm nhất, p99 dịch vụ tổng thể của họ giảm xuống ~18 ms — nhưng con số tổng hợp này bị kéo bởi lượng user chính tại Mỹ. Vấn đề địa lý vẫn còn nguyên: các instance provisioned nằm ở us-east-1, không ở edge PoP, nên request từ Đông Nam Á vẫn phải vượt đường dài.

Lambda đặt trong region gần user kết hợp Provisioned Concurrency thực sự nhanh. Bài toán chỉ hợp lý nếu user của bạn tập trung ở một region và bạn chịu được hóa đơn Provisioned Concurrency.

Chi phí thực tế

Sự khác biệt then chốt: Workers chỉ tính tiền CPU time. Lambda tính tiền wall-clock time, bao gồm cả thời gian chờ I/O.

Một function I/O-bound dành 95 ms chờ database và 5 ms chạy code sẽ bị Lambda tính 100 ms × memory allocation × rate. Workers chỉ tính 5 ms. Ở volume cao, đây mới là câu chuyện thực sự.

So sánh chi phí với workload tương đương 256 MB, Node.js, 100 ms wall-clock, 5 ms CPU time:

Lượng/thángAWS LambdaCloudflare WorkersThắng
10M request~$1.80~$5.40Lambda
100M request~$55.80~$41.40Workers
1B request~$626~$401Workers

Lambda thắng ở volume thấp nhờ 1M request miễn phí và 400,000 GB-seconds duration miễn phí. Phí nền $5/tháng của Workers bất lợi ở mức 10M request.

Điểm giao cắt vào khoảng 50–60M requests/tháng với một API I/O-bound điển hình. Dưới mức đó, Lambda rẻ hơn. Trên mức đó, Workers vượt lên — và khoảng cách càng lớn khi CPU time chiếm tỷ lệ nhỏ hơn trong wall-clock time.

Đảo chiều sang workload CPU-nặng (xử lý ảnh, SSR, ML inference — 50 ms CPU thực tế trên mỗi 100 ms request): CPU overage của Workers ở 100M request nhảy thêm ~$97, đẩy tổng chi phí lên ~$132/tháng. Lambda vẫn ở ~$55.80 vì wall-clock ≈ CPU time và billing rate tương đương. Lambda thắng khi tỷ lệ CPU/wall-clock cao.

Egress cũng đáng tính: R2 (object storage của Cloudflare) không tính phí egress khi phục vụ qua Workers. S3 + CloudFront thì có. Nếu bạn phục vụ nhiều file lớn qua function, khoảng cách này không nhỏ.

Trải nghiệm lập trình: Wrangler vs SAM/CDK

Wrangler là một CLI duy nhất cho init, dev, deploy, tail logs và type generation. wrangler dev chạy Miniflare local — emulator offline đầy đủ cho KV, Durable Objects, R2 và Queues. Không cần Docker, không cần AWS credentials cho local dev. TypeScript hoạt động ngay từ đầu; wrangler types tạo type definition chính xác theo runtime, khớp với compatibility date của bạn.

Lambda có ba lựa chọn tooling đáng dùng:

  • AWS SAM: YAML-based, tích hợp chặt với AWS. sam local invoke chạy Lambda trong Docker container. Chính xác nhưng chậm hơn và phụ thuộc Docker.
  • CDK (TypeScript, Python, Java): Diễn đạt infrastructure phức tạp bằng code. Đường cong học tập dốc hơn ban đầu. Cần SAM CLI để emulate Lambda local.
  • Serverless Framework v4: Lựa chọn trưởng thành nhất, 1,000+ plugin từ cộng đồng, thiết kế cloud-agnostic. Version 4 đưa vào tier trả phí cho team; tương lai open-source đang mờ dần.

Cái giá IAM thực sự với Lambda: mỗi function cần một execution role với quyền truy cập rõ ràng vào S3, DynamoDB, RDS Proxy, CloudWatch, v.v. Workers không có lớp IAM này. Đó là gánh nặng nhận thức khác hẳn với team nhỏ.

Hệ sinh thái: R2/D1/Durable Objects vs S3/DynamoDB/Step Functions

Hệ sinh thái storage của Cloudflare đã lớn lên đáng kể, nhưng vẫn còn trẻ:

Dịch vụ WorkersChức năngMức độ lock-in
KVEdge key-value, eventual consistencyTrung bình
R2Object storage tương thích S3, không tính egressThấp
D1SQLite qua HTTPCao — chỉ trên Cloudflare
Durable ObjectsStateful actor duy nhất toàn cầuCao — proprietary
QueuesXử lý message bất đồng bộTrung bình
HyperdriveHTTP proxy đến PostgreSQL/MySQL bên ngoàiThấp

Điểm cần chú ý với D1: Workers không thể mở TCP connection. Không có pg driver, không có PostgreSQL thô. Bạn phải dùng D1 (SQLite qua HTTP), Hyperdrive (HTTP proxy đến connection pooler), hoặc một ORM qua HTTP. Nếu team đang chạy PostgreSQL và muốn TCP thực sự, Lambda + RDS Proxy là con đường ít đau hơn. Nếu database vẫn là câu hỏi mở, Postgres vs MySQL so sánh hai engine SQL phổ biến nhất.

Durable Objects là một primitive thực sự mới — actor duy nhất toàn cầu với state nhất quán, không có tương đương trên Lambda. Công cụ cộng tác realtime, rate limiter phân tán, game state: nếu đó là workload của bạn, Workers là lựa chọn đúng; Lambda không có primitive tương đương.

Hệ sinh thái AWS của Lambda rộng hơn: Step Functions để orchestrate workflow, EventBridge để route event, SQS và SNS cho pub/sub, RDS Proxy cho TCP thực đến database. Nếu bạn đã ở trong AWS và các dịch vụ xung quanh quan trọng, chuyển sang Workers đồng nghĩa với việc tự mình tái tạo các tích hợp đó hoặc bỏ chúng đi. Nếu bạn đang cân nhắc backend-as-a-service thay vì quản lý AWS riêng, Supabase vs Firebase là so sánh liên quan nhất.

VPC cold start trên Lambda — đáng ghi chú: AWS đưa Hyperplane ENI vào năm 2019 để loại bỏ độ trễ gắn ENI cho từng function. VPC cold start 10 giây ngày xưa đã qua. Overhead hiện tại thấp hơn đáng kể — vẫn cần đo lường với cấu hình VPC cụ thể của bạn, nhưng không còn là dealbreaker nữa.

Những giới hạn sẽ gây khó dễ

Giới hạn Workers mà Lambda veteran hay bị bất ngờ:

  1. 128 MB memory, cố định. Lambda scale lên 10 GB; Workers không thể cấp phát thêm. Xử lý ảnh, render PDF, ML inference ở scale — nếu function cần hơn 128 MB, Workers không phải lựa chọn phù hợp, không có ngoại lệ.

  2. Không có Node.js stdlib mặc định. Workers dùng V8 runtime, không phải Node.js. Bạn cần nodejs_compat trong wrangler.toml để có hầu hết các core module. Vẫn thiếu: net.createServer() (không có TCP server), fs.watch(), glob API. Nếu bạn đang tìm runtime có module compatibility tốt hơn, Bun vs Node.js phân tích hai lựa chọn phổ biến nhất.

  3. Không có persistent connection. Mô hình isolate nghĩa là không có TCP connection pool giữa các request. pg.Pool của PostgreSQL không hoạt động. Mỗi request hoàn toàn stateless về mặt kết nối.

  4. Giới hạn CPU 30 giây (Workers plan Paid Unbound). Free plan: 10 ms. Nếu function cần hơn 30 giây CPU time — không phải wall-clock, mà CPU — bạn cần Lambda.

  5. Giới hạn bundle 10 MB sau gzip trên plan Paid. Lambda cho phép 250 MB unzipped. Dependency vendor lớn có thể đẩy bạn vượt ngưỡng.

Giới hạn Lambda mà Workers veteran hay bị bất ngờ:

  1. Cold start là vấn đề vận hành thực sự — đặc biệt với Java/.NET và function gắn vào VPC. Kể từ tháng 8 năm 2025 khi INIT bắt đầu bị tính tiền, mỗi cold start là cả sự kiện về performance lẫn chi phí.

  2. Lambda@Edge ≠ Lambda ở cấp độ API. Giới hạn khác hẳn (timeout 5 s, 128 MB memory, gói 1 MB). Nhầm lẫn ở đây sẽ hiện ra thành lỗi khu vực kỳ lạ trong production.

  3. IAM không phải tùy chọn. Mỗi cross-service call cần một IAM policy rõ ràng. Với developer solo hoặc team nhỏ, đây là chi phí thường xuyên không thể tránh.

  4. Giới hạn payload: 6 MB cho synchronous response. Nếu bạn proxy file lớn qua Lambda, bạn sẽ đụng trần này.

Kết luận: Cloudflare Workers vs AWS Lambda

Chọn Cloudflare Workers nếu:

  • User của bạn phân tán toàn cầu và p99 latency quan trọng
  • Workload I/O-bound (đọc database, gọi API ngoài, tổng hợp nội dung)
  • Volume vượt 50–60M requests/tháng
  • Bạn muốn stateful coordination qua Durable Objects
  • Bạn muốn zero cold start mà không phải trả Provisioned Concurrency

Chọn AWS Lambda nếu:

  • Function cần hơn 128 MB memory
  • Job chạy hơn 30 giây CPU time
  • Bạn đang dùng các tích hợp AWS-native (RDS, SQS, Step Functions)
  • Volume dưới 50M requests/tháng và muốn tận dụng free tier
  • Team quen với AWS và chấp nhận được gánh nặng IAM

Để monitor cả hai platform, SentryDatadog đều có tích hợp tốt — Sentry hoạt động tốt cho Workers (Cloudflare SDK của họ xử lý đúng môi trường non-Node.js), còn Datadog Lambda layer là lựa chọn tiêu chuẩn cho Lambda APM.

Lưu ý

Phép tính chi phí giả định function I/O-bound với 5 ms CPU trên mỗi 100 ms wall-clock. Workload CPU-nặng sẽ lật ngược kết quả so sánh Lambda vs. Workers. Dữ liệu benchmark cho Workers đến từ một case study production (Rebal AI, tháng 3 năm 2026); dữ liệu cold-start của Workers từ engineering blog của Cloudflare. Dữ liệu Lambda từ tracker lambda-perf công khai và methodology của Maxime David.

Affiliate disclosure áp dụng cho link Sentry và Datadog ở trên; họ không tham gia vào việc so sánh này.

Tài liệu tham khảo

  1. Workers hoạt động thế nào — Cloudflare docs
  2. Loại bỏ cold start với Cloudflare Workers — Cloudflare blog
  3. Cloudflare Workers pricing (chính thức)
  4. Cloudflare Workers limits (chính thức)
  5. Node.js compatibility trong Workers — tổng kết 2025
  6. AWS Lambda pricing (chính thức)
  7. AWS Lambda quotas (chính thức)
  8. AWS Lambda execution environment lifecycle
  9. Lambda cold-start benchmark tracker (maxday.github.io)
  10. Cloudflare Workers vs AWS Lambda: sáu tháng thực tế production — Rebal AI, tháng 3 năm 2026
  11. Cloudflare Workers vs AWS Lambda cost — Vantage
  12. Serverless performance: Workers, Lambda và Lambda@Edge — Cloudflare blog