· 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án | Số tiền |
|---|---|---|
| Subscription | Cố định | $5.00 |
| Requests | 90M vượt gói × $0.30/M | $27.00 |
| CPU time | 670M 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án | Số tiền |
|---|---|---|
| Requests | 100M × $0.20/M | $20.00 |
| Duration | 100M × 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án | Số tiền |
|---|---|---|
| Storage | 100,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án | Số tiền |
|---|---|---|
| Storage | 100,000 GB × $0.023 | $2,300 |
| GET requests | 1B × $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 R2 | AWS 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áng | Workers | Lambda | Lợ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áng | Cloudflare R2 | AWS S3 | Tiết kiệm R2 |
|---|---|---|---|
| 1 TB | $0 | ~$92 | 100% |
| 10 TB | $0 | ~$894 | 100% |
| 100 TB | $0 | ~$8,704 | 100% |
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
| Workload | D1 | RDS t3.micro | Nên dùng |
|---|---|---|---|
| Nhẹ (1B reads, 10M writes, 2 GB) | $0 thêm | $14.71/tháng | D1 |
| Vừa (50B reads, 500M writes, 25 GB) | $490/tháng | ~$105/tháng | RDS |
| Bất kỳ workload nào trên 10 GB | Khô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.