Làm sao để giảm chi phí Amazon Cloudfront?
1. Mục tiêu của bài viết
Tôi đã có một thời gian 3 năm sử dụng CloudFlare, trong thời gian đó tôi cũng đã tìm hiểu về nhiều dịch vụ CDN khác trên thế giới cho tới khi tôi nhận thấy Amazon CloudFront là một trong những sự lựa chọn tuyệt vời. Trên các diễn đàn mọi người cũng nói rất nhiều về nó và không còn nghi ngờ gì về chất lượng mà nó đem lại, tuy nhiên một điều tồi tệ là chi phí của nó rất đắt, có một vài người đã nhận được một hoá đơn vài trăm đô la mỗi tháng cho dịch vụ này, một con số khủng khiếp nếu so với CloudFlare.
Trong bài viết này tôi sẽ nói về các giải pháp giảm chi phí truyền dữ liệu từ Cloudfront (Amazon S3) ra ngoài Internet giúp bạn có thể yên tâm sử dụng dịch vụ này mà không phải lo lắng về sự tăng vọt của hoá đơn.
Trước hết hãy đọc bài viết dưới đây của tôi về Amazon Cloudfront và mối liên hệ của nó với Amazon S3:
Và bài viết so sánh sự khác biệt giữa Cloudfront và Cloudflare:
- Cloudfront vs Cloudflare
2. Amazon Cloudfront đắt như thế nào?
Khi sử dụng gói Pro của Cloudflare bạn phải trả 20 đô la cho mỗi website, trong khi đó Amazon Cloudfront không quan tâm bạn sử dụng bao nhiêu website nó chỉ quan tâm tới bao nhiêu dữ liệu được phân phối ra ngoài Internet, và đây chính là cách họ lấy tiền từ túi của bạn.
Trước khi đưa ra giải pháp để giảm chi phí sử dụng dịch vụ Cloudfront chúng ta cần phân tích xem Cloudfront đắt như thế nào, ở đây tôi chỉ đề cập tới chi phí truyền tải dữ liệu ra ngoài Internet từ khu vực có mức giá rẻ nhất là Mỹ hoặc Châu Âu.
Về cơ bản khi sử dụng Cloudfront mỗi tháng bạn được miễn phí 1GB đầu tiên, sau đó bạn phải trả khoảng $0.085/1GB, nghĩa là bạn phải trả 1 đô la chỉ để truyền tải 11.7GB dữ liệu ra ngoài Internet.
Một trang sẽ bao gồm HTML và các dữ liệu tĩnh khác như Image, Css, Javascript,... có dung lượng trung bình khoảng 2MB, đôi khi là 5MB nếu website của bạn chứa nhiều hình ảnh. Giả sử rằng mỗi trang là 2MB và mỗi người dùng xem 1 trang của bạn thì 11.7GB chỉ đủ để truyền tải dữ liệu cho 5990 người (Và bạn phải thanh toán 1 đô la cho Amazon).
Nếu website của bạn mỗi ngày có 20.000 lượt xem (page view) bạn sẽ mất 3.3 đô la, và mỗi tháng bạn sẽ phải thanh toán 100 đô la. Với các website có lượng truy cập lớn có thể nhận được một hoá đơn 500 đô la hoặc hơn là điều bình thường.
Hãy so sánh nó với việc thuê một VPS:
- Thuê một VPS với giá $5/Month bạn có 25GB dung lượng lưu trữ và được miễn phí truyền tải 1000GB dữ liệu.
- Thuê một VPS với giá $20/Month bạn có 80GB dung lượng lưu trữ và được miễn phí truyền tải 4TB dữ liệu.
Quả thật sử dụng dịch vụ Amazon Cloudfront rất đắt, bạn có thể tham khảo chi tiết giá cả theo liên kết dưới đây.
3. Làm sao để giảm chi phí?
Vào giữa năm 2020 tôi chuyển sang sử dụng dịch vụ VPS của DigitalOcean và phát hiện ra rằng họ có một dịch vụ lưu trữ tuyệt vời đó là DigitalOcean Spaces. Dịch vụ này có kiến trúc khá giống với Amazon S3, và tương thích hoàn toàn với Amazon S3 Rest API.
DigitalOcean cho phép bạn tạo ra các Spaces. Mỗi Spaces giống như một S3 Bucket của Amazon S3, nhưng điều quan trọng hơn đó là Spaces đã hỗ trợ sẵn CDN.
Chi phí sử dụng dịch vụ DigitalOcean Spaces rất rẻ. Với 5 đô la một tháng bạn được cung cấp 250GB ổ cứng, được phép tạo không giới hạn các Spaces và miễn phí 1TB truyền tải dữ liệu ra ngoài Internet, nếu vượt qua hạn ngạch này bạn phải trả thêm phí bổ xung là $0.02/1GB.
Như bạn biết một trang của website bao gồm một nội dung HTML và các nội dung khác như Css, Javascript, Image,.. Tôi giả sử rằng tổng kích thước của tất cả là 2MB. Trong khi đó nội dung HTML có kích thước rất nhỏ, chỉ khoảng 10KB đến 100KB. Nếu bạn chỉ đặt dữ liệu HTML trên Amazon S3 còn các dữ liệu tĩnh khác đặt trên DigitalOcean Spaces số tiền trên hoá đơn của bạn sẽ giảm đi ít nhất 20 lần.
Nếu bạn chưa từng sử dụng DigitalOcean hãy nhấn vào liên kết dưới đây và đăng ký một tài khoản mới, bạn sẽ nhận được $100 tín dụng có hiệu lực trong vòng 2 tháng.
Gzip?
Amazon Cloudfront hỗ trợ Gzip để nén các file tĩnh, khi bật tính năng này các file HTML có thể giảm kích thước 5 lần. Khi một yêu cầu (request) được gửi đến Cloudfront nó sẽ trả về cho trình duyệt một file Gzip, trình duyệt sẽ giải nén file này để có được nội dung HTML gốc.
Giả sử các file HTML có kích thước khoảng 100KB sẽ được nén lại thành 20KB, và website của bạn một ngày có 20.000 lượt xem (page view) thì Cloudfront sẽ truyền tải 390MB ra ngoài Internet. Một tháng Cloudfront sẽ truyền tải 11.5GB ra ngoài Internet, tương đương với 1 đô la (Một con số đáng kinh ngạc).
Chú ý: Thực tế cách tính chi phí của Amazon Cloudfront phức tạp hơn một chút, nó phụ thuộc vào vị trí địa lý của máy chủ phục vụ người dùng. Tuy nhiên với giải pháp ở trên hoá đơn bạn nhận được từ Amazon sẽ giảm đi rất nhiều.
- Amazon Gzip S3
Các hướng dẫn Amazon Web Services
- Giới thiệu về Amazon Web Services (AWS)
- Giới thiệu về Amazon S3
- Giới thiệu về Amazon Cloudfront và kiến trúc của nó
- Làm sao để giảm chi phí Amazon Cloudfront?
- Vô hiệu hoá bộ nhớ đệm CloudFront
- Giới thiệu về DigitalOcean Spaces
- Hướng dẫn tạo DigitalOcean Spaces Bucket
- Giới thiệu về Amazon ACM
- Java Awssdk S3 Tải tệp lên S3 Bucket với S3Client
- Tạo AWS accessKeyId/secretAccessKey
- Java Awssdk S3 Liệt kê các đối tượng trong S3 Bucket
- Lưu trữ (host) một Website tĩnh trên Amazon S3
- Vô hiệu hoá bộ nhớ đệm của CloudFront với Java
- Tạo DigitalOcean Spaces Access Key
- Java Awssdk Các Credentials Provider thông dụng
- Java Awssdk Tạo và sử dụng ProfileCredentialsProvider
- Java Awssdk Tạo và sử dụng EnvironmentVariableCredentialsProvider
- Java Awssdk Tạo và sử dụng SystemPropertyCredentialsProvider
- Java Awssdk S3 Tải object lên với S3TransferManager
- Java Awssdk S3 Tải object xuống với S3TransferManager
- Java thao tác với DigitalOcean Spaces sử dụng S3TransferManager
- Java tạo, liệt kê và xoá S3 Bucket
- Aws Console Tạo tài khoản người dùng IAM
- Tạo một vùng chứa Amazon S3 (S3 Bucket)
- Các quy tắc chuyển hướng cho S3 Static Website
- Cấu hình tên miền tuỳ chỉnh cho website tĩnh Amazon S3
- Tạo bản phân phối CloudFront cho S3 Bucket
- Cấu hình các trang phản hồi lỗi cho CloudFront
- Tạo các chính sách S3 Bucket
- Công cụ tạo các chính sách cho AWS - policygen
- So sánh Amazon S3 Rest API Endpoint và S3 Web Endpoint
- Chuyển hướng trong S3 Website với x-amz-website-redirect-location
- Di chuyển (migrate) dịch vụ DNS tới Amazon Route 53
- Chuyển (transfer) đăng ký tên miền tới Amazon Route 53
- Yêu cầu chứng chỉ SSL từ Amazon ACM
Show More