Đầu tiên để bàn luận về giải pháp này, điều kiện tiên quyết là hệ thống của bạn phải triển khai trên Container đã nhé.
Ngoài việc chúng ta hay so sánh Lambda service với EC2 (Lambda trong năm 2020 cũng đã có triển khai theo container rồi), thì chúng ta còn 1 service nữa cũng là giải pháp đưa ra so sánh với EC2 là AWS Fargate. Đây đều là các giải pháp để có thể triển khai container.
- EC2 (Deploy và quản lý cluster EC2 instances bởi chính bạn để chạy các containers)
- AWS Fargate (chạy trực tiếp containers, không launch với bất kỳ EC2 Instance)
Cả 2 giải pháp trên đều hoàn toàn ok khi (operate) triển khai các containers đảm bảo scalable và reliable. Việc lựa chọn giải pháp nào phụ thuộc việc tối ưu liên quan đến hệ thống của bạn. Sau đây mình sẽ đưa ra các so sánh:
Pricing
Với EC2 launch type, billing được base theo cost của EC2 Instance. Và bạn có thể optimize cost dựa các giải pháp lợi thế như sử dụng spot instance (loại instance đấu giá, giảm tới 90%), reserve instance (mua kiểu hợp đồng dài hạn giảm 20-75%), hoặc có thể kết hợp cả 2. Tuy nhiên trách nhiệm của bạn chắc chắn container
Tuy nhiên, bạn có trách nhiệm đảm bảo rằng các container của bạn được đóng gói tối ưu, nếu không bạn sẽ lãng phí tiền bạc.
Với billing của type AWS Fargate, nó sẽ base theo số lượng CPU cores, Gb của memory liên quan đến task run container của bạn, tính tiền per second. Bạn chỉ phải trả những gì khi bạn sử dụng, không phải trả khi EC2 capacity không sử dụng.
Use Cases
Large workload, optimized price (khối lượng công việc lớn, tối ưu giá)
Nếu workload nhu cầu về nhiều CPU cores và nhiều Gb của memory, và bạn muốn optimize về giá, bạn nên cân nhắc running cluster với reserved EC2 instances, hoặc spot instances. Bạn sẽ chịu trách nhiệm về maintain cluster này và optimize nó, nhưng bạn có khả năng tận những lợi thế áp dụng các chiến lược tiết kiệm của EC2 instance ví dụ Spot instances hoặc reserved instances.
Large workload, optimized for low overhead (Khối lượng công việc lớn, ưu tiên chi phí thấp hàng đầu)
Khi quản lý 1 large cluster của EC2 instance có thể có 1 số khó khăn. Bạn cần chắc chắn đảm về tất cả các vấn đề như patched, secure và update latest version của Docker và ECS agent. Nếu bạn không muốn quan tâm gì thì lựa chọn hàng đầu là AWS Fargate.
Ví dụ khi bạn running container trên EC2 phải đảm bảo các patched đã upgraded, update version docker nếu không bạn phải tự làm, trong khi đó running AWS Fargate sẽ được tự động resolved các kịch bạn này bởi AWS engineer.
Small workload, with occasional bursts (khối lượng công việc nhỏ, thỉnh thoản tăng đột ngột)
Nếu khối lượng công việc của bạn là nhỏ, và thỉnh thoảng tăng đột ngột, ví dụ website đơn giản, có traffic hàng ngày, nhưng vào tối là low traffic, khi đó AWS Fargate là lựa chọn tuyệt vời. Bạn có thể scale down thành 1 tiny container vào buổi tối, giá thành rất là nhỏ, nhưng vẫn scale up được trong suốt cả ngày, trong khi chỉ phải trả tiền theo CPU core, và Gb của memory khi task container của bạn yêu cầu.
Tiny workload
Với môi trường test, AWS Fargate là lựa chọn tuyệt vời, fit đẹp luôn. Nó giải quyết vấn đề gây lãng phí ở môi trường test khi chạy EC2 instance bởi vì EC2 thì quá tốn nhiều thời gian không sử dụng tới, và bạn sẽ có tối ưu được số %CPU utilization. .
Batch workloads
Nếu khối lượng công việc bao gồm là các task theo giai đoạn, ví dụ như cron job kiểu chạy 1 lần 1 giờ, hoặc thỉnh thoảng nhận job từ 1 queue, thì AWS Fargate là lựa chon tuyệt vời. Thay vì phải trả tiền cho EC2 cho cả tháng, đôi khi phải tối ưu xử lý start và stop ec2 khi sử dụng. Bạn có thể sử dụng AWS Fargate run container khi cần và dừng việc trả tiền khi container stop.
Lưu ý với các Batch Job chạy long running hay chạy 24/24 tốn tài nguyên thì EC2 là lựa chọn tốt hơn vì lúc này Fargate không còn nhận được ưu điểm là khi nào cần mới request tài nguyên nữa. Và bạn nên nhớ giá của Fargate mặc dù tính theo CPU và Memory nhưng so sánh với EC2 thì giá theo giờ là đắt.