Tối ưu chi phí trên AWS

Hồ Tuấn Anh

Cloud computing là gì?


Điện toán đám mây (cloud computing) là mô hình điện toán sử dụng các công nghệ máy tính và phát triển dựa vào mạng Internet. Ở mô hình điện toán này, việc cung cấp các dịch vụ điện toán (computing) bao gồm tính toán(Compute), lưu trữ(Storage) và mạng(network) dưới dạng các dịch vụ và thông qua Internet. Điều này cho phép người sử dụng truy cập các dịch vụ từ một nhà cung cấp nào đó "trong đám mây" mà không cần phải có các kiến thức, kinh nghiệm về công nghệ đó, cũng như không cần quan tâm đến các cơ sở hạ tầng phục vụ công nghệ đó

Với những ưu điểm của mình như chi phí đầu tư ban đầu thấp, khả năng co dãn linh hoạt, thiết lập hạ tầng cho các ứng dụng với vài cú click chuột và sự bảo mật, Cloud Computing đang là xu thế mới trong thế giới công nghệ hiện đại

Dưới đây là bảng thống kê và dự đoán lợi nhuận của mảng Cloud Computing từ năm 2018 đến 2022 (theo Gartner)




… And the dark of the Cloud Computing
Khi sử dụng Cloud Computing, vấn đề được quan tâm nhiều nhất cũng như đau đầu nhất là chi phí sử dụng trên Cloud. Chính sự dễ dàng để tạo các tài nguyên trên Cloud Computing cùng với cách tính giá rất phức tạp của các Cloud Provider (với AWS trong bài viết này) đôi khi khiến chúng ta khóc thét mỗi khi phải thanh toán hoá đơn các dịch vụ Cloud Computing.

Để minh hoạ cho sự phức tạp trong các tính giá, tôi lấy ví dụ như sau: Tôi cần dựng một ứng dụng trên AWS với Static web lưu trên S3, API thì được host trên EC2 và cơ sở dữ liệu trên RDS. Nghe thì đơn giản, còn tính giá thì sao? Thử tính nhé:
Chi phí S3:
  • Dung lượng lưu trữ trên S3
  • Số lượng requests Put/Copy/List/POST
  • Số lượng requests Get/Select
  • Các Storage Class
  • Region đặt S3 Bucket
  • ...
Chi Phí EC2:
  • Chi phí cho server
  • Chi phí cho ổ cứng
  • Chi phí bản quyền OS nếu có
Tương tự, Chi phí cho RDS giống như chi phí cho EC2 bao gồm:
  • Chi phí cho server
  • Chi phí cho ổ cứng
  • Chi phí cho Database Engine nếu có
Hết rồi ư, chưa đâu… Chúng ta còn phải trả cho việc transfer dữ liệu:
  • Data transfer giữa các AZ
  • Data transfer giữa các Region
  • Data transfer ra Internet
Rất may, ít nhất chúng ta không phải trả tiền cho cho dữ liệu chuyển từ Internet vào AWS :)

Vậy để tối ưu chi phí trên AWS, chúng ta cần làm những gì?
Dưới đây là những điều có thể giúp bạn giảm chi phí tối đa trên AWS trong mùa dịch Corona này

Bạn cần hiểu và quản lý Billing trên tài khoản của bạn
Vì sao điều này lại được tôi đặt lên trên cùng? Vì đơn giản, để tối ưu được chi phí, đầu tiên bạn cần hiểu được bạn đang phải trả tiền cho các dịch vụ gì và trả cho chúng bao nhiêu.

Billing Dashboard giúp bạn có thể dễ dàng xem được mình đang phải trả tiền cho các dịch vụ nào trên tài khoản của bạn. Đương nhiên, bạn cần có đủ quyền để xem được, tuy nhiên, hãy dùng IAM chứ đừng dùng tài khoản Root nhé!



Bạn thấy đó, bạn hoàn toàn có thể xem mình đang tiêu những gì trên AWS phải không? Bạn còn có thể xem cụ thể hơn từng dịch vụ tốn của bạn bao nhiêu tiền. Ví dụ trong EC2 bạn tốn bao nhiêu cho phần EC2 Instance, bao nhiêu cho ổ cứng và bao nhiêu cho việc transfer dữ liệu giữa EC2 và các thành phần khác của hệ thống

Cost Explorer là một công cụ báo cáo về chi phí, giúp bạn dễ dàng xác định xu hướng Cost của bạn cũng như chi phí cho các dịch vụ trên một biểu đồ trực quan.



Một điều cực kỳ quan trọng khác: Hãy đặt cảnh báo cho Billing của bạn!!! Điều này giúp bạn biết được bạn có đang tiêu quá số tiền cho AWS hay không. Đã nhiều lần tôi quên xoá các tài nguyên trên AWS, và đây là thứ đã cứu tôi rất nhiều lần trước khi tôi phải mang tất cả lương của mình (vốn đã không nhiều lắm :( ) để thanh toán cho AWS.

Ngoài ra, bạn có thể sử dụng các công cụ khác bên thứ 3 để theo dõi chi phí hạ tầng của bạn:
Cloudyn / Cloudhealth: Là các công cụ SaaS giúp bạn có thể tối ưu hạ tầng của mình

Ice: Là một open source project được phát triển bởi Netflix


Trusted Advisor: Là một công cụ giúp bạn tối ưu hạ tầng cloud của mình một cách toàn diện, trong đó có tối ưu về mặt chi phí. Tuy nhiên, công cụ này chỉ có sẵn nếu bạn sử dụng gói Business or Enterprise Support.



Xóa các tài nguyên không cần thiết
Bạn không cần trả tiền cho những gì bạn không dùng.
Sau khi review một lượt Billing và các dịch vụ đang sử dụng, hãy xóa các tài nguyên mà bạn có thể đã “quên” trong lúc vội vàng nào đó.



Có thể bạn sẽ cần một bản danh sách các tài nguyên đang sử dụng trên AWS để quản lý, đối chiếu hiệu quả hơn đấy.

Tiếp theo, tôi sẽ hướng dẫn bạn tối ưu chi phí trên các dịch vụ cơ bản trên AWS
Tối ưu chi phí trên EC2
EC2 là một trong số các dịch vụ “Xương sống” AWS, áp dụng những điều sau, bạn có thể tiết kiệm được một khoản lên đến 10% - 20% chi phí của mình.
Lưu ý, bạn cũng có thể áp dụng những điều này với ECS, EKS và RDS.

EC2 Instance type Đầu tiên, bạn đã chọn đúng dòng EC2 mà bạn cần chưa? Trên AWS, có rất nhiều dòng EC2 phù hợp với các nhu cầu của bạn, dòng M cho các tác vụ thông thường, dòng C cho các tác vụ sử dụng nhiều CPU còn dòng R sẽ tối ưu cho Database với nhiều Ram hơn. Với các tác vụ không cần dùng nhiều CPU trong thời gian dài, dòng T là một lựa chọn sáng giá đấy!



Tiếp theo, hãy lựa chọn cấu hình theo nhu cầu sử dụng của bạn, đừng lãng phí tài nguyên vì trên AWS mọi thứ đều rất đắt. Kết hợp giữa lựa chọn cấu hình hợp lý cùng tính năng Auto scale là combo giúp bạn đảm bảo hiệu năng hệ thống cũng như tiết kiệm được rất nhiều chi phí.




Hãy luôn chọn những dòng máy mới nhất, vì nó cũng giúp bạn tiết kiệm một lượng chi phí đáng kể (lên đến 10%) cũng như hiệu năng tốt hơn những dòng máy cũ. Ví dụ: Hãy chọn M5 thay cho M4 đã cũ.

Saving planReserved Instances là những lựa chọn mà bạn có thể cân nhắc khi hệ thống đã chạy một cách ổn định, bạn có thể tiết kiệm lên đến 72% chi phí cho EC2 hoặc RDS so với dùng On-demand.

Như bạn thấy ở hình dưới đây, bạn có thể tiết kiệm lên đến 62% chi phí khi mua 1 server M5.large trong 3 năm và trả trước toàn bộ.


Một tùy chọn khác giúp tiết kiệm lên đến 80% chi phí khi sử dụng EC2 đó chính là Spot Instance. Tuy nhiên nó chỉ hữu ích với một số hệ thống nhất định khi mà EC2 Instance của bạn có thể bị thu hồi bất kỳ khi nào nhưng không ảnh hưởng đến sự vận hành của hệ thống.

Với các môi trường Dev, Stag, hãy tạo một vài script để tự động bật/tắt các tài nguyên. Điều này giúp bạn tiết kiệm chi phí khi các tài nguyên không được sử dụng như khi ngoài giờ làm việc chẳng hạn.
EBS
EBS cũng có rất nhiều loại để bạn có thể lựa chọn: GP2, IO1, ST1, SC1. Việc hiểu rõ về những loại ổ cứng này rất quan trọng để lựa chọn ổ cứng đáp ứng được nhu cầu hệ thống cũng như tiết kiệm chi phí tối đa có thể. Ví dụ với những tác vụ thông thường, ổ cứng GP2 là đủ. Với tác vụ đòi hỏi đọc ghi nhiều như cơ sở dữ liệu, hãy cân nhắc ổ cứng IO1 vì nó sẽ cung cấp cho bạn lượng IOPS rất lớn.



Dung lượng ổ cứng cũng rất quan trọng, bạn không cần tạo một ổ cứng 1TB khi chỉ dùng 100GB vì bạn có thể tăng khi thực sự cần để tránh lãng phí, ổ cứng cũng rất đắt trên AWS.

S3
S3 là một dịch vụ Object Storage với độ tin cậy rất cao và giá khá rẻ. Tuy nhiên, bạn vẫn có thể tiết kiệm được chi phí với những cách dưới đây:

Hiểu các Storage Class và sử dụng S3 lifecycle. S3 có nhiều loại Storage Class khác nhau với các đặc tính cũng như giá khác nhau, kết hợp với việc quản lý tốt các Object của mình trên S3 bằng S3 lifecycle, bạn có thể tiết kiệm một lượng chi phí đáng kể nhất là khi lưu trữ file dung lượng lớn và với thời gian dài.



Và cuối cùng là Network.
Khi làm việc dưới vật lý, bạn trả tiền cho hệ thống network như Router, Switch, dây mạng. Trên AWS, bạn không phải trả tiền cho những thứ đó. Tuyệt!!! Nhưng khoan, bạn phải trả tiền cho EIP, NAT và đặc biệt là Data transfer.



Data transfer có thể trở thành thứ tốn tiền của bạn nhất đặc biệt đối với các doanh nghiệp về lĩnh vực streaming và cung cấp các nội dung media. Nó có thể chiếm tới 80% chi phí trên AWS. Trong đó các chi phí chính bao gồm:
  • Transfer dữ liệu ra ngoài Internet
  • Transfer dữ liệu giữa các AZ
  • Transfer dữ liệu giữa các Region
  • ...
Hãy lưu ý tới lượng dữ liệu mà bạn di chuyển trong AWS và ra ngoài AWS. Nếu có thể, hãy dùng các dịch vụ Managed services như DynamoDB, RDS vì chi phí Data transfer đã được tính trong giá của dịch vụ.
Khuyến cáo, không nên dựng tất cả hạ tầng trong cùng 1 AZ, điều đó có thể giúp bạn tiết kiệm một lượng chi phí nhưng sẽ rất rủi ro do không đảm bảo tính sẵn sàng của hệ thống.

Một cách nữa có thể giúp tiết kiệm chi phí Data transfer nữa là hãy dùng Cloudfront bất kể khi nào có thể. Vì chi phí cho Data transfer từ Cloudfront rẻ hơn và từ EC2, S3 đến Cloudfront sẽ không bị tính phí. Hàng tháng, bạn có 50GB Data transfer free trên Cloudfront, với các website nhỏ, bạn có thể hoàn toàn không phải trả phí cho data transfer out.

Hy vọng bài viết này sẽ giúp ích được bạn trong việc tiết kiệm phần nào chi phí trên AWS trong mùa Covid này.

Hồ Tuấn Anh - Cloudfun expert
Solution architect & DevOps engineer at OSAM.IO
 
Sửa lần cuối bởi điều hành viên:

cloudFun

Cloudfun xin gửi lời cảm ơn đến anh đã đóng góp kiến thức xây dựng cộng đồng điện toán đám mây Việt Nam.
 
Top