· cloudflare / aws / cost

Cloudflare vs AWS: phân tích hóa đơn thực tế khi scale

Cloudflare thắng phần lớn workload vừa; AWS thắng database lớn. Workers vs Lambda, R2 vs S3, D1 vs RDS — con số thực tế ở 15M, 100M và 1 tỷ requests.

Bởi Ethan

2.574 từ · 13 phút đọc

Với phần lớn dự án mới, bộ sản phẩm Cloudflare — Workers, R2, D1 — rẻ hơn so với AWS. Đôi khi rẻ hơn đáng kể. Sự chênh lệch này có tính cơ cấu: R2 không tính phí egress trong khi S3 tính $0.09/GB, còn Workers chỉ tính CPU time trong khi Lambda tính cả thời gian chờ network. Khi vượt qua ngưỡng trung bình — database trên 10 GB, nhu cầu memory trên 128 MB mỗi function, job chạy lâu hơn năm phút — AWS lại chiếm ưu thế.

Bài này dành cho ai

Developer đang chọn infrastructure cho dự án mới. Cũng đáng đọc nếu bạn đang dùng AWS và muốn có con số cụ thể để xem việc chuyển sang có thực sự tiết kiệm không.


Tại sao hóa đơn lại khác nhau như vậy

Hai quyết định thiết kế giải thích phần lớn sự chênh lệch chi phí giữa Cloudflare và AWS.

Egress. AWS tính $0.09/GB khi dữ liệu rời khỏi S3 ra internet. Cloudflare R2 tính $0. Với ứng dụng đẩy 10 TB/tháng ra ngoài, đó là $900/tháng bạn không phải trả nếu dùng R2. Chi phí này của AWS có lý do thực tế — bandwidth rất tốn kém ở quy mô S3 — nhưng điều quan trọng với bạn là con số trên hóa đơn.

Đơn vị tính phí compute. Lambda tính phí cho mỗi millisecond function còn đang chạy, kể cả thời gian chờ database hay API bên ngoài. Một function chạy tổng 200ms nhưng chỉ xử lý 7ms CPU thực sẽ bị tính cho toàn bộ 200ms. Workers chỉ tính CPU time. 193ms chờ network đó là miễn phí.

Cloudflare chuyển Workers sang tính phí theo CPU time từ ngày 1 tháng 3 năm 2024. Áp dụng cho tất cả Workers deployment hiện tại, không phải tier đặc biệt nào.


Kịch bản 1: API backend

Thiết lập: 100M requests/tháng, REST API thông thường — đọc database, trả JSON. CPU time mỗi request: 7ms. Thời gian thực tế: ~200ms (phần còn lại là chờ I/O).

Cloudflare Workers (Workers Paid plan, $5/tháng base):

Khoản phíTính toánSố tiền
SubscriptionCố định$5.00
Requests90M vượt gói × $0.30/M$27.00
CPU time670M ms vượt gói × $0.02/M CPU-ms$13.40
Tổng$45.40/tháng

AWS Lambda (128 MB, 200ms duration, x86):

Khoản phíTính toánSố tiền
Requests100M × $0.20/M$20.00
Duration100M × 0.125 GB × 0.200s × $0.0000166667$41.67
Tổng$61.67/tháng

Workers rẻ hơn 26% ở đây. Khoảng cách này đến từ việc Lambda tính phí 193ms chờ I/O nhàn rỗi mỗi lần gọi.

Giờ xét trường hợp nặng I/O hơn: cũng 100M requests, nhưng function chờ một LLM bên ngoài hoặc dịch vụ chậm — 5ms CPU, 1,000ms thời gian thực tế.

Cloudflare Workers (cùng plan):

  • CPU: 500M ms − 30M được bao gồm = 470M × $0.02/M = $9.40
  • Requests: $27.00
  • Tổng: ~$41.40/tháng

AWS Lambda (128 MB, 1,000ms):

  • Duration: 100M × 0.125 GB × 1.0s × $0.0000166667 = $208.33
  • Requests: $20.00
  • Tổng: ~$228.33/tháng

Workers rẻ hơn 82% với workload nặng I/O. Lambda tính phí mỗi millisecond function của bạn chờ; Workers thì không. Với các endpoint AI inference, gọi API bên thứ ba, hay bất kỳ tác vụ nào có nhiều network round-trip, khoản chênh lệch này tích lũy rất nhanh.

Để so sánh chi tiết hơn về runtime và cold-start giữa Workers và Lambda, xem Cloudflare Workers vs AWS Lambda.


Kịch bản 2: Object storage và egress

Thiết lập: Site lưu trữ media — 100 TB dữ liệu, 50 TB egress mỗi tháng, 1 tỷ GET requests.

Cloudflare R2:

Khoản phíTính toánSố tiền
Storage100,000 GB × $0.015$1,500
Class B reads (GET)1B × $0.36/M$360
Egress$0$0
Tổng$1,860/tháng

AWS S3 (Standard, us-east-1, egress trực tiếp ra internet):

Khoản phíTính toánSố tiền
Storage100,000 GB × $0.023$2,300
GET requests1B × $0.40/M$400
Egress (10 TB đầu)10,240 GB × $0.09$921.60
Egress (40 TB tiếp theo)40,960 GB × $0.085$3,481.60
Tổng~$7,103/tháng

R2 rẻ hơn 74%. Toàn bộ khoản tiết kiệm đến từ việc không tính phí egress — $4,403 trong tổng chênh lệch $5,243 là phí bandwidth.

Ở quy mô nhỏ, khoảng cách tỷ lệ nhỏ hơn nhưng vẫn có:

10 GB lưu trữ, 100 GB egress, 100M GET requests:

Cloudflare R2AWS S3
Storage$0 (free tier)$0.23
GET requests$36.00$40.00
Egress$0$9.00
Tổng$36/tháng$49.23/tháng

Free tier của R2 bao gồm 10 GB storage và 10M lần đọc Class B mỗi tháng. Ứng dụng nhỏ có thể không tốn đồng nào.

Những giới hạn của R2 so với S3 cần biết:

  • Không có tier lưu trữ dạng Glacier (Infrequent Access có; deep archive thì không)
  • Chưa hỗ trợ server-side encryption với khóa của khách hàng (SSE-C) tính đến tháng 5/2026
  • S3 Event Notifications tích hợp chặt với Lambda; hệ thống event của R2 đơn giản hơn
  • S3 có hơn 13 storage class; R2 chỉ có hai

Với workload cần tuân thủ nghiêm ngặt hoặc lưu trữ dài hạn, S3 vẫn có lợi thế thực sự về tính năng ngoài chuyện giá.


Kịch bản 3: Database

Cloudflare D1 là SQLite qua HTTP với cách tính phí scale-to-zero dựa trên số hàng đọc và ghi — không theo giờ chạy instance. Mô hình này rất phù hợp cho workload nhẹ và tốn kém với workload nặng.

Backend nhẹ — 1 tỷ lần đọc/tháng, 10M lần ghi/tháng, 2 GB dữ liệu:

Cloudflare D1 (trên Workers Paid):

  • Rows read: 1B so với 25B được bao gồm → $0
  • Rows written: 10M so với 50M được bao gồm → $0
  • Storage: 2 GB so với 5 GB được bao gồm → $0
  • Tổng: $0 thêm (nằm trong gói $5/tháng Workers Paid)

AWS RDS MySQL (db.t3.micro, single-AZ):

  • Instance: ~$12.41/tháng
  • Storage (tối thiểu 20 GB, gp2): $2.30
  • Tổng: ~$14.71/tháng

AWS Aurora Serverless v2 (tương thích MySQL):

  • Tối thiểu: 0.5 ACU × $0.12/ACU-hr × 730 giờ = $43.80/tháng, kể cả khi không có traffic
  • Tổng: ~$47+/tháng tối thiểu

D1 thắng ở quy mô nhẹ. Aurora Serverless tính phí tối thiểu dù ứng dụng có traffic hay không, khiến nó kém hơn cả RDS với workload ít traffic.

Backend vừa — 50 tỷ lần đọc/tháng, 500M lần ghi/tháng, 25 GB dữ liệu:

Cloudflare D1:

  • Rows read: (50B − 25B) × $0.001/M = $25
  • Rows written: (500M − 50M) × $1.00/M = $450
  • Storage: (25 GB − 5 GB) × $0.75/GB = $15
  • Tổng: $490/tháng (cộng thêm $5 base)

AWS RDS MySQL (db.t3.medium, Multi-AZ):

  • Instance: ~$49.64 × 2 = $99.28
  • Storage (50 GB gp2): $5.75
  • Tổng: ~$105/tháng

RDS thắng với khoảng cách 4.5 lần. Chi phí ghi của D1 ($1/triệu hàng) tích lũy nhanh khi writes tăng lên. Workload nặng ghi chính xác là nơi mô hình tính phí theo hàng thất bại.

Giới hạn cứng của D1 cần lưu ý bất kể giá:

  • Kích thước database tối đa: 10 GB (không phải giới hạn mềm — DB sẽ không ghi thêm được nữa)
  • Chạy đơn luồng (một query tại một thời điểm)
  • Chỉ hỗ trợ SQLite dialect — không có stored procedure, trigger, hay full-text search
  • Kích thước hàng hoặc BLOB tối đa: 2 MB
  • Query timeout: 30 giây

Dùng D1 cho feature flag, cài đặt người dùng, bảng catalog nhỏ, và workload đọc nhiều. Đừng dùng cho bất cứ thứ gì sẽ vượt 10 GB hoặc cần ghi đồng thời nhiều.

Nếu bạn đang cân nhắc các tùy chọn serverless tương thích PostgreSQL thay thế cho D1 hoặc RDS, xem Neon vs Supabase để so sánh trực tiếp hai nền tảng đó.


Bảng tổng hợp

Tất cả giá lấy từ trang chính thức của nhà cung cấp tính đến ngày 2026-05-20.

Workers vs Lambda — 7ms CPU, 200ms thực tế, 128 MB

Requests/thángWorkersLambdaLợi thế Workers
15M$8.00$9.25−13%
100M$45.40$61.67−26%
1B$231.40$481.67−52%

Với workload nặng I/O (5ms CPU, 1,000ms thực tế), Lambda ở mức 1 tỷ requests tốn ~$2,083/tháng so với Workers chỉ ~$215/tháng. Lợi thế của Workers tăng lên theo thời gian chờ I/O.

R2 vs S3 — chỉ tính egress, Standard class

Egress/thángCloudflare R2AWS S3Tiết kiệm R2
1 TB$0~$92100%
10 TB$0~$894100%
100 TB$0~$8,704100%

Egress của R2 là $0 ở mọi quy mô. Giá lưu trữ ($0.015/GB) cũng thấp hơn S3 Standard ($0.023/GB).

D1 vs RDS — tổng hợp

WorkloadD1RDS t3.microNên dùng
Nhẹ (1B reads, 10M writes, 2 GB)$0 thêm$14.71/thángD1
Vừa (50B reads, 500M writes, 25 GB)$490/tháng~$105/thángRDS
Bất kỳ workload nào trên 10 GBKhông khả dụng$105–$400+RDS

Khi nên chọn Cloudflare

Ứng dụng nặng egress. Ảnh, thumbnail video, tải file, API trả về payload lớn. Egress $0 của R2 là lợi thế lớn nhất trong bài so sánh này. Nếu bandwidth xuất hiện trong bảng chi phí của bạn, R2 thắng ở mọi quy mô.

Compute nặng I/O. REST API, xử lý webhook, dịch vụ xác thực — code dành phần lớn thời gian chờ network. Cách tính phí CPU time của Workers có nghĩa là thời gian I/O nhàn rỗi không tốn tiền bạn.

Nhạy cảm với cold-start. Cloudflare dùng V8 isolate. Thời gian cold-start dưới một millisecond. Lambda cold-start dao động từ 100ms đến hơn 1,000ms tùy runtime, memory, và trạng thái container. Với latency mà người dùng cảm nhận được, khoảng cách này là đáng kể.

Database nhỏ. Mô hình scale-to-zero của D1 và lượng bao gồm trong Workers Paid plan khiến nó gần như miễn phí với workload ít traffic. Không cần instance chạy liên tục khi lượng truy cập xuống zero.

Dự án bắt đầu mới không phụ thuộc AWS. Mô hình định giá tích hợp — Workers + R2 + D1 trong một mức base $5/tháng — đơn giản hơn nhiều so với việc ghép Lambda + S3 + RDS + CloudFront với hóa đơn riêng cho từng dịch vụ.


Khi nên chọn AWS

Database sẽ vượt quá 10 GB. Giới hạn 10 GB của D1 là cứng. Lên kế hoạch từ đầu — chuyển từ D1 sang RDS sau này là một dự án thực sự. RDS MySQL/PostgreSQL scale được đến 64 TB.

Workload ghi nhiều. Khi đạt đến hàng trăm triệu lần ghi mỗi tháng, chi phí ghi $1/triệu hàng của D1 vượt qua chi phí cố định của một instance RDS. Khối lượng ghi càng lớn, D1 càng thua.

Compute cần nhiều memory. Workers bị giới hạn cứng ở 128 MB. Lambda scale được đến 10,240 MB. Machine learning inference, xử lý dữ liệu lớn trong bộ nhớ, và xử lý ảnh nặng cần Lambda hoặc Cloudflare Containers (có sẵn trên Workers Paid plan, xem Cloudflare Containers docs).

Job chạy lâu. Lambda cho phép đến 15 phút mỗi lần gọi. Workers cho phép 5 phút CPU time. Batch job, xuất dữ liệu, và mã hóa video thường cần Lambda hoặc Containers.

Tích hợp sâu vào hệ sinh thái AWS. Step Functions, EventBridge, SQS, SNS, RDS Proxy, Redshift — nếu các dịch vụ này đã là trụ cột trong kiến trúc của bạn, ở lại AWS giúp tránh khối lượng công việc tích hợp đáng kể.

Yêu cầu lưu trú dữ liệu. AWS có hơn 30 region được đặt tên với ranh giới dữ liệu lưu trữ được tài liệu hóa. Các PoP của Cloudflare là edge location, không tương đương với availability zone của AWS. Workload được quản lý chặt với yêu cầu lưu trú dữ liệu cụ thể thường phù hợp hơn với một cloud region cụ thể.


Việt Nam và Đông Nam Á

Cloudflare vận hành PoP tại Hà Nội, Thành phố Hồ Chí Minh và Đà Nẵng. Một Workers function được gọi bởi người dùng Việt Nam sẽ chạy tại PoP gần nhất — thường là 5–15ms latency từ thiết bị người dùng.

AWS không có region tại Việt Nam. Gần nhất là ap-southeast-1 ở Singapore, thêm vào 30–60ms baseline cho người dùng Việt Nam trước khi code của bạn bắt đầu chạy. Jakarta (ap-southeast-3) và Malaysia (ap-southeast-5) gần một số người dùng hơn nhưng không phải với Việt Nam cụ thể.

Với workload nhạy cảm với độ trễ — real-time API, luồng xác thực, bất kỳ thứ gì có mục tiêu p99 — đây là lợi thế cơ cấu của Cloudflare không xuất hiện trong bảng giá. Nó cộng thêm lợi thế hiệu suất vào lợi thế chi phí.

Nếu bạn đang xây dựng cho khán giả Việt Nam mà chưa có infrastructure sẵn, triển khai trên Cloudflare Pages với Workers xử lý cả latency lẫn chi phí trong một stack duy nhất. Xem cách deploy Astro site lên Cloudflare Pages để có hướng dẫn thiết lập cụ thể.


Kết luận

Chọn Cloudflare nếu bạn đang xây dựng API mới, ứng dụng lưu trữ nhiều, hoặc site phục vụ qua edge mà không có phụ thuộc AWS trước đó — đặc biệt nếu khán giả của bạn ở Việt Nam hoặc Đông Nam Á. R2 + Workers trên Paid plan $5/tháng xử lý được hầu hết workload nhỏ đến vừa với chi phí thấp hơn stack AWS tương đương.

Chọn AWS nếu database của bạn sẽ vượt 10 GB, cần hơn 128 MB memory mỗi function, chạy batch job lâu, hoặc đã đầu tư vào các dịch vụ AWS khó thay thế trên Cloudflare.

Con đường di chuyển theo hướng nào cũng không miễn phí, vì vậy hãy chọn dựa trên nơi bạn dự kiến sẽ ở sau 18 tháng, không phải nơi bạn đang đứng hôm nay.

Để bắt đầu: Cloudflare Workers Paid là $5/tháng và bao gồm đủ compute và storage cho hầu hết dự án nhỏ. Cloudflare R2 bắt đầu theo mô hình pay-as-you-go với free tier cho 10 GB đầu tiên.


Tham khảo