So sánh chi phí của AWS Lambda, Fargate và EC2 cho khối lượng công việc của bạn

Nov 28 2022
Chọn nền tảng điện toán AWS cho khối lượng công việc của bạn xét về mặt chi phí không phải là một nhiệm vụ dễ dàng. Tôi đã tính toán cho một trong những dự án mà tôi đang thực hiện và quyết định chia sẻ những phát hiện của mình.
Ảnh của Chủ đề NordWood trên Bapt

Chọn nền tảng điện toán AWS cho khối lượng công việc của bạn xét về mặt chi phí không phải là một nhiệm vụ dễ dàng. Tôi đã tính toán cho một trong những dự án mà tôi đang thực hiện và quyết định chia sẻ những phát hiện của mình. Trong bài viết này, tôi sẽ thực hiện một phép so sánh cấp cao và đơn giản hóa để phác thảo một cách so sánh.

Không phải là chuyên gia trong việc sử dụng tất cả các tùy chọn điện toán, tôi khuyến khích bạn sử dụng phần nhận xét để sửa các giả định sai của tôi hoặc đề xuất các cải tiến và ý tưởng nên được đưa vào nỗ lực so sánh.

Thiết lập cấu hình

Bằng cách sử dụng AWS Pricing Calculator , chúng tôi có thể so sánh chi phí dịch vụ hàng tháng của các thiết lập gần như tương đương về sức mạnh tính toán. Tôi đã thấy đây là một nhiệm vụ khó thực hiện. Mỗi dịch vụ có loại cấu hình riêng để lựa chọn, có các thông số kỹ thuật khác nhau không chỉ cho vCPU và bộ nhớ, mà còn có giới hạn đối với băng thông mạng, có giới hạn sử dụng khối lượng GPU hoặc EBS, v.v.

Để đơn giản hóa mọi thứ, chúng ta hãy so sánh các dịch vụ với các yêu cầu chỉ để có sẵn 1 vCPU và khoảng 2 GB bộ nhớ. Đối với Lambda, vCPU chia tỷ lệ cùng với kích thước bộ nhớ có thể định cấu hình. Lambda nhận được 1 vCPU trên mỗi 1,769 GB bộ nhớ , vì vậy đây sẽ là lựa chọn của chúng tôi cho Lambda. Fargate có thể định cấu hình cả số lượng vCPU và kích thước bộ nhớ, vì vậy chúng tôi có thể chọn chính xác 1 vCPU và 2 GB bộ nhớ khả dụng. Đối với EC2, với giá trị thấp của vCPU và bộ nhớ trong thế hệ hiện tại của các loại phiên bản EC2, lựa chọn duy nhất của chúng tôi là sử dụng dòng T có hiệu suất vượt trội. Điều này mang đến một mức độ phức tạp khác vì phiên bản được định giá dựa trên mức sử dụng thấp hơn hoặc bằng với hiệu suất CPU cơ bản và các khoản phí bổ sung sẽ xảy ra khi mức tiêu thụ vượt quá mức cơ bản. Tuy nhiên, trong các loại phiên bản thế hệ trước , loại phiên bản m1.small khá phù hợp với yêu cầu với 1 vCPU và 1,7 GB bộ nhớ nên chúng tôi sẽ sử dụng loại phiên bản này thay vì loại phiên bản dòng T. Ngoài ra, các tùy chọn sau không được xem xét so sánh vì mục đích đơn giản:

  • CPU kiến ​​trúc ARM
  • Hệ điều hành không phải Linux
  • Phát hiện phiên bản và phát hiện nhiệm vụ Fargate
  • Truyền dữ liệu và lưu trữ
  • Phiên bản dự trữ và tính toán kế hoạch tiết kiệm

Theo trực giác, EC2 sẽ là dịch vụ ít tốn kém nhất, tiếp theo là Fargate và Lambda. Lý do là mỗi dịch vụ tiếp theo yêu cầu quản trị cơ sở hạ tầng ít hơn dịch vụ trước đó, giao nhiệm vụ quản lý cơ sở hạ tầng cho AWS. Biểu đồ sau đây cho thấy giá hàng tháng của từng dịch vụ dựa trên phần trăm thời gian sử dụng.

Giá EC2 thực sự là mức thấp nhất, theo sau là Fargate, trong khi giá Lambda cao gấp đôi Fargate. Giá EC2 có thể được hạ thấp hơn nữa bằng cách sử dụng loại phiên bản có thể bùng nổ dòng T, tùy thuộc vào nhu cầu thực tế về khối lượng công việc của bạn.

Thanh toán và các yếu tố khởi động

Như chúng ta đã thấy ở trên, chi phí chạy Lambda khá cao so với Fargate và EC2. Bây giờ chúng ta hãy xem xét các yếu tố có thể ảnh hưởng đến lý do tại sao chúng ta vẫn có thể chọn Lambda cho máy tính mặc dù giá của nó cao hơn.

Điều đầu tiên cần xem xét là khoảng thời gian thanh toán của các dịch vụ. EC2 được tính phí theo giây, với thời lượng tối thiểu là 60 giây. Thanh toán bắt đầu khi phiên bản được khởi chạy và dừng khi phiên bản kết thúc hoặc dừng. Fargate được tính phí theo giây, cũng như thời lượng tối thiểu là 60 giây. Thanh toán bắt đầu khi hình ảnh được kéo và dừng khi tác vụ kết thúc. Mặt khác, Lambda được tính phí theo mili giây mà không có ngưỡng tối thiểu. Thanh toán bắt đầu khi mã khởi tạo hoặc mã xử lý của bạn bắt đầu chạy và dừng khi mã của bạn quay trở lại hoặc kết thúc.

Đây là một trong những lý do tại sao Lambda là một lựa chọn tốt cho các khối lượng công việc được thực thi không thường xuyên và chỉ tồn tại trong thời gian ngắn.

Thứ hai, quá trình khởi động phiên bản EC2 mới mất khoảng một phút trở lên, tương tự như quá trình khởi động tác vụ Fargate mới. Để so sánh, việc tạo một phiên bản Lambda mới thường mất vài trăm mili giây cho thời gian chạy với ngôn ngữ thông dịch và tối đa vài giây cho thời gian chạy với ngôn ngữ được biên dịch.

Tùy thuộc vào khối lượng công việc của bạn, có thể xảy ra trường hợp bạn không thể đợi một phút để bắt đầu một phiên bản EC2 hoặc tác vụ Fargate, và do đó, cần phải tiếp tục chạy phiên bản hoặc tác vụ đó. Đây không phải là trường hợp của Lambda, vì bạn thường đợi vài giây để bắt đầu một phiên bản mới. Bạn cũng có thể giữ ấm phiên bản Lambda với mức giá thấp bằng cách ping phiên bản đó vài phút một lần thông qua sự kiện CloudWatch.

Để nhấn mạnh hai yếu tố được mô tả ở trên, giờ đây chúng tôi có thể so sánh việc lập hóa đơn dịch vụ cho loại máy tính xử lý API web, nơi chúng tôi muốn không có độ trễ khởi động và sẵn sàng phục vụ lưu lượng truy cập bất kỳ lúc nào.

Cả phiên bản EC2 và tác vụ Fargate đều cần được sử dụng 100 % thời gian để không gặp sự cố khởi động. Mặt khác, thanh toán Lambda phụ thuộc vào thời gian thực tế khi mã trình xử lý của bạn đang chạy để phân phối lưu lượng truy cập đến API web. Do đó, nên sử dụng Lambda cho đến khi Lambda được sử dụng khoảng 40 đến 50 % thời gian, mặc dù giá của nó cao hơn cho cùng sức mạnh tính toán. Điều này giúp Lambda phù hợp với các tác vụ xử lý nhanh, chẳng hạn như các tác vụ IO chẳng hạn như đọc dữ liệu từ DynamoDB, v.v.

Ví dụ thế giới thực

Chúng tôi sử dụng chức năng Lambda trên một trong các dự án của mình để xử lý các yêu cầu API. Nó có cấu hình bộ nhớ 2 GB chủ yếu để giảm thiểu độ trễ khi khởi động nguội, nếu không, nó có thể có cấu hình thấp hơn. Nó sử dụng thư viện .NET có hơn 4 MB, do đó, sự khác biệt ban đầu giữa bộ nhớ 512 MB và 2 GB là đáng chú ý.

Lưu lượng truy cập vào Lambda đã tăng đều đặn trong những tháng qua và chúng tôi muốn tìm hiểu xem đã đến lúc cân nhắc chuyển sang một dịch vụ khác hay chưa.

Theo số liệu sử dụng hàng ngày, chức năng này được gọi trung bình khoảng 250 nghìn lần mỗi ngày, tức là 2,89 yêu cầu mỗi giây. Thời lượng thực hiện trung bình là khoảng 250 mili giây. 2,89 nhân 250 xấp xỉ 723. Điều này có nghĩa là hàm này được sử dụng khoảng 70 % thời gian.

Các số liệu chi tiết hơn về khoảng thời gian một phút cho thấy rằng các mẫu lệnh gọi là đột biến, tuy nhiên, nhìn chung, tải được xử lý bởi ít hơn 10 phiên bản đồng thời của hàm.

Các chỉ số đã thu thập báo hiệu rằng chúng tôi đã vượt qua ngưỡng mà phương thức thanh toán Lambda là tối ưu. Có khả năng, để xử lý lưu lượng với cùng sức mạnh tính toán và có chỗ để phát triển, chúng tôi có thể sử dụng, chẳng hạn như 2 tác vụ Fargate nhiều vùng sẵn sàng, mỗi tác vụ có 0,5 vCPU và 1 GB bộ nhớ. Dựa trên các biểu đồ ở trên, điều này sẽ giảm chi phí thanh toán hàng tháng từ $53,5 xuống còn $36,04. Chúng tôi có thể cố gắng giảm chi phí xuống thấp hơn nữa bằng cách sử dụng các phiên bản EC2 có thể bùng nổ có kích thước phù hợp và lưu trữ vùng chứa hoặc ứng dụng ở đó. Tất nhiên, đây chỉ là một ý tưởng lý thuyết sơ bộ cần được xác minh trên ứng dụng thực tế.

Như một lưu ý cuối cùng, tôi muốn đề cập rằng chi phí thanh toán thô nên được mở rộng bằng cách xem xét mức độ phức tạp và chi phí quản lý cơ sở hạ tầng. Đối với các tình huống cụ thể, điều đó có thể có nghĩa là mặc dù chẳng hạn như chi phí thanh toán EC2 có thể thấp hơn vài phần trăm so với Fargate hoặc Lambda, nhưng sự khác biệt vẫn chưa bù đắp được cho độ phức tạp gia tăng của giải pháp.

Chúng tôi là ACTUM Digital và tác phẩm này được viết bởi Milan Gatyas , .NET Tech Leader của Apollo Division. Cảm thấy tự do để liên lạc.