AWS Lambda và Amazon EC2: Nên chọn giải pháp nào?
Amazon là một trong những nhà cung cấp hàng đầu về các dịch vụ đám mây đa dạng, với hàng chục dịch vụ và con số này vẫn đang tiếp tục tăng lên. Amazon EC2 là một trong những dịch vụ phổ biến nhất của Amazon, đồng thời là thành phần chính của nền tảng điện toán đám mây Amazon được ra mắt vào năm 2006. Amazon EC2 hiện đang được sử dụng rộng rãi, nhưng mức độ phổ biến của một dịch vụ khác của Amazon có tên là Lambda (ra mắt năm 2014) cũng đang ngày càng tăng. Bài viết trên blog hôm nay so sánh các nền tảng AWS Lambda và EC2 để giúp bạn đưa ra lựa chọn phù hợp nhất cho môi trường của mình.
< span data-sheets-value="{" 1 ":2," 2 ":"
"}” data-sheets-userformat=”{" 2 ":17089," 3 ":{" 1 ":0}," 9 ":1," 10 ":1," 12 ":0," 17 ":1}”>
AWS EC2 là gì?
AWS EC2 (Amazon Web Services Elastic Compute Cloud) là một dịch vụ cho phép sử dụng các máy ảo được gọi là các phiên bản EC2 trên đám mây và cung cấp khả năng mở rộng. Bạn có thể thay đổi dung lượng đĩa, hiệu suất CPU, bộ nhớ, v.v. bất cứ khi nào cần. Bạn có thể chọn hình ảnh cơ sở với hệ điều hành (OS) cần thiết đã được cài đặt sẵn như Linux hoặc Windows, sau đó cấu hình hầu hết các thiết lập hệ điều hành cũng như cài đặt các ứng dụng tùy chỉnh. Bạn có quyền truy cập root cho các Amazon EC2 instances của mình và có thể tạo thêm người dùng. Quản lý mọi thứ bạn cần và kiểm soát hoàn toàn các EC2 instances của mình, bao gồm khởi động lại và tắt instance. Dịch vụ web AWS EC2 thuộc danh mục Infrastructure as a Service (IaaS). AWS EC2 có thể được sử dụng cho dịch vụ lưu trữ đám mây – bạn có thể triển khai máy chủ dưới dạng máy ảo (instance) trên đám mây.
AWS Lambda là gì?
AWS Lambda là nền tảng tính toán cho phép bạn chạy một đoạn mã được viết bằng một trong các ngôn ngữ lập trình được hỗ trợ – Java, JavaScript hoặc Python – khi một sự kiện kích hoạt được kích hoạt. Bạn không cần phải cấu hình máy chủ ảo và môi trường để chạy ứng dụng mà bạn đã viết. Chỉ cần chèn mã chương trình của bạn (được gọi là hàm Lambda trong trường hợp này) vào giao diện AWS Lambda, liên kết hàm Lambda với sự kiện và chạy ứng dụng trên đám mây khi cần thiết, mà không cần lo lắng về quản lý máy chủ và cấu hình môi trường. Nhờ vậy, bạn có thể tập trung vào ứng dụng của mình, chứ không phải quản lý máy chủ – đó là lý do tại sao AWS Lambda được gọi là không cần máy chủ.
Một sự kiện sau đó ứng dụng của bạn được thực thi có thể là tải lên tệp vào thùng Amazon S3, thực hiện thay đổi trong các bảng DynamoDB, nhận yêu cầu HTTP đến dịch vụ API Gateway, v.v. Sau khi cấu hình một hàm để chạy khi sự kiện xảy ra, ứng dụng của bạn sẽ được thực thi tự động sau mỗi sự kiện mới.
Về phân loại, Lambda là một triển khai của Function as a Service (FaaS) do Amazon cung cấp. Trong bảng dưới đây, bạn có thể xem mức độ quản lý cho từng loại dịch vụ, bắt đầu từ việc sử dụng máy chủ vật lý và so sánh chúng. Các mức thấp nhất (yêu cầu người dùng quản lý) được đánh dấu bằng màu xanh lá cây và các mức cao hơn (do nhà cung cấp quản lý) được đánh dấu bằng màu xanh dương. Do đó, khi sử dụng máy chủ vật lý, bạn có thể quản lý phần cứng và tất cả các mức cao hơn. Khi sử dụng Dịch vụ Cơ sở hạ tầng (IaaS) như AWS EC2, bạn có thể quản lý hệ điều hành trên các máy ảo được cung cấp (các phiên bản EC2). Ở cấp độ Nền tảng như một dịch vụ (PaaS), bạn có thể chạy ứng dụng của mình mà ứng dụng này phải được biên dịch trước khi chạy. Khi sử dụng Chức năng như một dịch vụ (FaaS) như AWS Lambda, bạn không cần biên dịch ứng dụng của mình – chỉ cần chèn mã của bạn vào giao diện được cung cấp bởi MSP (nhà cung cấp dịch vụ quản lý). SaaS (Phần mềm như một dịch vụ), được đề cập để so sánh trong bảng, chỉ cho phép bạn sử dụng các ứng dụng sẵn có (do nhà cung cấp phát triển) trên đám mây thông qua client nhẹ hoặc trình duyệt web.
So sánh AWS EC2 và Lambda: Các trường hợp sử dụng
AWS EC2 có phạm vi ứng dụng rộng rãi vì hầu hết mọi thứ đều có thể được cấu hình khi sử dụng dịch vụ này. Các trường hợp sử dụng phổ biến nhất của AWS EC2 là:
- Lưu trữ trang web
- Phát triển và thử nghiệm ứng dụng hoặc môi trường phức tạp
- Tính toán hiệu suất cao
- Phục hồi sau thảm họa
Các trường hợp sử dụng chung của AWS Lambda:
- Tự động hóa tác vụ
- Xử lý các đối tượng được tải lên Amazon S3
- Phân tích nhật ký thời gian thực
- Lọc và chuyển đổi dữ liệu thời gian thực
Hãy xem xét một ví dụ cụ thể. Hãy tưởng tượng trang web của bạn sử dụng một bucket Amazon S3 để lưu trữ nội dung trang web bao gồm hình ảnh, video, tệp âm thanh, v.v. Khi một tệp hình ảnh hoặc video mới được tải lên, bạn cần tạo một hình ảnh xem trước cho trang web của mình, được sử dụng làm liên kết đến tệp hình ảnh hoặc video kích thước đầy đủ. Việc tạo hình ảnh xem trước thủ công có thể là một công việc nhàm chán và tốn thời gian. Trong trường hợp này, bạn có thể tạo một hàm Lambda có thể tự động thay đổi kích thước hình ảnh dựa trên hình ảnh được tải lên, đổi tên hình ảnh đó và lưu trữ hình ảnh đích vào thư mục phù hợp. Bạn có thể cấu hình hàm Lambda để được thực thi ngay sau sự kiện tải lên tệp hình ảnh gốc lên thùng Amazon S3 được trang web của bạn sử dụng.
AWS EC2 vs Lambda: Nguyên lý hoạt động
EC2 . Như bạn có thể nhớ, khi sử dụng AWS EC2, bạn sẽ làm việc với các máy ảo (VM) được gọi là các phiên bản EC2. Bạn có thể thêm phần cứng ảo (đĩa ảo, giao diện mạng, bộ xử lý, bộ nhớ) vào một phiên bản EC2, cũng như khởi động, dừng và khởi động lại một phiên bản VM. Các phiên bản EC2 có thể hoạt động với hai loại lưu trữ – Elastic Block Storage (EBS) và các thùng S3. Bạn có thể sử dụng một hình ảnh đã được cấu hình sẵn với hệ điều hành đã cài đặt và tạo hình ảnh máy Amazon (AMI) tùy chỉnh của riêng mình. Dịch vụ đám mây EC2 cung cấp tính năng mở rộng quy mô tự động và cân bằng tải. Các phiên bản EC2 có thể hoạt động kết hợp với hầu hết các dịch vụ web khác của Amazon, chẳng hạn như S3, ECS, Route53, Cloudwatch, v.v. .
Lambda . Khi sử dụng AWS Lambda, ứng dụng của bạn (hàm Lambda) sẽ chạy trong một container mà bạn không cần phải can thiệp. Container chứa mã nguồn và thư viện. Tài nguyên được Amazon cung cấp theo nhu cầu của ứng dụng, và việc mở rộng quy mô diễn ra tự động và mượt mà. Bạn không thể kiểm soát container đang chạy ứng dụng của mình cũng như instance EC2 mà container đó đang chạy (bạn không biết gì về chúng vì hạ tầng cơ sở không khả dụng cho người dùng Amazon Lambda). Tham khảo bảng trên.
AWS Lambda có thể được xem như một khung làm việc của Dịch vụ Container EC2 (ECS) sử dụng container để chạy một đoạn mã đại diện cho ứng dụng của bạn. Chu kỳ sống của mỗi container rất ngắn. Hàm Lambda đang chạy không lưu trạng thái của nó. Nếu bạn muốn lưu trữ kết quả, chúng nên được lưu trữ trong một kho dữ liệu, ví dụ như trong một thùng Amazon S3. Có thể cấu hình mạng ảo cho một hàm Lambda, ví dụ như để kết nối với Amazon RDS (Amazon Relational Database Service). Lambda bao gồm nhiều thành phần: các lớp, môi trường hàm và trình xử lý. Các trình kích hoạt là các yếu tố kích hoạt Lambda. Lambda là một hàm được thực thi bởi các yêu cầu từ các trình kích hoạt.
Danh sách đầy đủ các trigger có sẵn:
- API Gateway
- AWS IoT
- Alexa Skills Kit
- Alexa Smart Home
- Application Load Balancer
- CloudFront
- CloudWatch Events
- CloudWatch Logs
- CodeCommit
- Cognito Sync Trigger
- DynamoDB
- Kinesis
- S3
- SNS
- SQS
API Gateway là một dịch vụ đặc biệt cho phép nhà phát triển kết nối các ứng dụng không thuộc AWS với các ứng dụng AWS và các tài nguyên khác.
AWS EC2 so với Lambda: Phiên bản/Bản sao lưu
EC2 . Một hệ thống phức tạp của ảnh chụp nhanh có sẵn cho các khối lượng EBS (Elastic Block Storage) của các phiên bản AWS EC2. Bạn có thể tạo các bản sao lưu tăng dần và khôi phục về trạng thái cần thiết của một phiên bản EC2. Các bản sao lưu đa khối lượng có thể được sử dụng cho các tác vụ quan trọng, ví dụ như cơ sở dữ liệu sử dụng nhiều khối lượng EBS.
Lambda . Hệ thống quản lý phiên bản tiện lợi được hỗ trợ để quản lý các hàm Lambda hiệu quả hơn. Bạn có thể gán một số phiên bản cho mỗi bản sao mã được tải lên, sau đó thêm các tên gọi khác (alias) trỏ đến phiên bản mã tương ứng. Mỗi số phiên bản bắt đầu từ 1 và tăng dần theo thứ tự. Bạn có thể phân loại các hàm Lambda thành các giai đoạn như alpha, beta và sản xuất, chẳng hạn. Tên Tài nguyên Amazon (Amazon Resource Name) được gán cho mỗi phiên bản hàm Lambda khi xuất bản và không thể thay đổi sau này.
AWS EC2 vs Lambda: Bảo mật
EC2 . Bạn nên quản lý các instance EC2 và tất cả các thành phần bên trong các instance đó. Bạn có thể cấu hình tường lửa cho instance EC2 của mình – Amazon cung cấp Tường lửa VPC (Virtual Private Cloud) để kiểm soát lưu lượng và đảm bảo an ninh cho các instance EC2 trên đám mây. Bạn có thể thiết lập và cấu hình phần mềm chống vi-rút thủ công cho các instance EC2 của mình, tạo các vai trò IAM, chỉ định quyền, tạo các nhóm bảo mật, v.v. AWS Systems Manager Patch Manager cho phép bạn cài đặt các bản cập nhật hệ điều hành và bản vá bảo mật tự động. Bạn có thể cấu hình AWS để tạo bản sao lưu trước khi cài đặt bản vá hoặc bản cập nhật để ngăn ngừa các sự cố có thể xảy ra. Tạo các cặp khóa để truy cập các instance EC2 nếu cần. Bạn nên chú ý hơn đến bảo mật khi sử dụng AWS EC2 so với khi sử dụng AWS Lambda.
Lambda . Có các quyền truy cập vào các dịch vụ AWS mà Lambda có quyền truy cập theo mặc định. Vai trò IAM được sử dụng để xác định các dịch vụ phải có sẵn cho một hàm Lambda. Đối với mỗi hàm Lambda, bạn nên cấu hình vai trò IAM mà thông qua đó hàm Lambda sẽ được khởi chạy. Điều này có nghĩa là sau khi cấu hình vai trò IAM, bạn có thể kết nối hàm Lambda với các dịch vụ Amazon đã định nghĩa mà không cần sử dụng khóa hoặc các thông số ủy quyền khác.
Bạn có thể cấu hình mã hóa giữa hàm Lambda và S3 cũng như giữa API Gateway và Lambda bằng khóa KMS. Khi tạo hàm Lambda, một khóa mã hóa mặc định sẽ được tạo. Tuy nhiên, khuyến nghị là bạn nên tạo khóa KMS của riêng mình.
So với các instance EC2, các hàm Lambda không yêu cầu cập nhật bảo mật và bản vá. Các container và hệ điều hành cơ bản được Amazon cập nhật tự động. Đây là lợi thế của việc sử dụng các hàm Lambda về mặt bảo mật.
AWS EC2 so với Lambda: Hiệu suất và Tính sẵn sàng
EC2 . Sau khi bật một instance EC2, instance đó sẽ chạy cho đến khi bạn dừng nó thủ công hoặc lên lịch tác vụ tắt máy. Khi một instance EC2 đang hoạt động, ứng dụng sẽ được thực thi gần như ngay lập tức trên instance đó. Bạn có thể chạy đồng thời bao nhiêu ứng dụng tùy ý, miễn là hiệu suất của instance EC2 cho phép. Chạy ứng dụng trên các instance EC2 là giải pháp tốt khi ứng dụng cần được chạy đều đặn suốt cả ngày.
Lambda . Một hàm Lambda luôn sẵn sàng nhưng không chạy liên tục. Theo mặc định, hàm Lambda ở trạng thái không hoạt động. Khi một trigger liên kết với sự kiện được kích hoạt, ứng dụng của bạn (hàm Lambda) sẽ được khởi chạy. Thời gian tối đa để chạy hàm Lambda (thời gian chờ) bị giới hạn ở 900 giây (15 phút). Do đó, việc chạy các ứng dụng có thời gian thực thi dài trên AWS Lambda không phải là một ý tưởng hay. Nếu bạn cần chạy các ứng dụng yêu cầu hơn 900 giây để hoàn thành thành công hoặc các ứng dụng có thời gian thực thi biến đổi, hãy xem xét sử dụng AWS EC2. Một giới hạn khác đối với hàm Lambda đang chạy là dung lượng bộ nhớ tối đa, tương đương 3008 MB.
Tùy thuộc vào khu vực, có thể thực thi đồng thời từ 1000 đến 3000 bản sao Lambda. Liên hệ với bộ phận hỗ trợ AWS nếu bạn muốn chạy nhiều phiên bản cùng lúc.
Thời gian trễ giữa việc gửi yêu cầu và thực thi ứng dụng lên đến 100 mili giây đối với AWS Lambda, khác với các ứng dụng chạy trên các phiên bản EC2 không có độ trễ như vậy. 100ms không phải là thời gian dài, nhưng đối với một số loại ứng dụng, khoảng thời gian này có thể là yếu tố quyết định. Nếu ứng dụng của bạn phải tải xuống dữ liệu từ một thùng Amazon S3, có thể cần thêm 1 đến 3 giây trước khi ứng dụng được thực thi. Hãy lưu ý khoảng thời gian trễ này khi lập kế hoạch sử dụng AWS Lambda để chạy ứng dụng.
Thời gian khởi động lạnh là nhược điểm của các hàm Lambda. Độ trễ xảy ra khi một hàm không được thực thi trong một khoảng thời gian dài, và cần thời gian để khởi động container và chạy hàm trên Amazon Cloud. Sử dụng AWS Lambda để chạy ứng dụng có thể là giải pháp tốt khi bạn có khối lượng công việc không đều, và các ứng dụng phải được chạy vào các khung giờ khác nhau trong ngày với khoảng thời gian ngừng hoạt động dài giữa các lần thực thi.
AWS Lambda so với EC2: Mô hình định giá
Cả dịch vụ đám mây EC2 và Lambda đều áp dụng nguyên tắc thanh toán theo mức sử dụng. Tuy nhiên, hãy xem xét chi tiết và sự khác biệt.
EC2 . Bạn phải trả tiền cho thời gian mà phiên bản AWS EC2 của bạn đang chạy, bất kể chức năng/ứng dụng có được thực thi hay không. Giá mỗi giờ phụ thuộc vào hiệu năng CPU, dung lượng bộ nhớ, hiệu năng card đồ họa và dung lượng lưu trữ mà phiên bản EC2 sử dụng. Khi bạn cần chức năng/ứng dụng của mình luôn sẵn sàng do số lượng yêu cầu thường xuyên cao, việc sử dụng các phiên bản AWS EC2 có thể hợp lý hơn về mặt tài chính.
Lambda . Bạn thanh toán cho số lần thực thi ứng dụng và thời gian cần thiết để hoàn tất thực thi. Giá cho mỗi giây chạy ứng dụng phụ thuộc vào dung lượng bộ nhớ được cấp phát cho ứng dụng và là $0.00001667 cho mỗi Gigabyte-giây. Thời gian thực thi ứng dụng được tính từ khi ứng dụng bắt đầu cho đến khi trả về kết quả hoặc dừng lại sau khi hết thời gian chờ. Thời gian được làm tròn lên đến số gần nhất là bội số của 100ms. Khi bạn cần tính sẵn sàng theo yêu cầu, giá sử dụng AWS Lambda để chạy các hàm/ứng dụng có thể tốt hơn.
Kết luận
AWS EC2 là dịch vụ đại diện cho cơ sở hạ tầng đám mây truyền thống (IaaS) và cho phép bạn chạy các phiên bản EC2 dưới dạng máy ảo (VM), cấu hình môi trường và chạy các ứng dụng tùy chỉnh.
AWS Lambda là giải pháp Function as a Service (FaaS) của Amazon, cho phép bạn chạy ứng dụng mà không cần lo lắng về hạ tầng cơ sở. AWS Lambda cung cấp kiến trúc không máy chủ (serverless) và cho phép bạn chạy một đoạn mã trên đám mây sau khi sự kiện kích hoạt được kích hoạt. Khi sử dụng AWS Lambda, bạn có một hàm có khả năng mở rộng, nhỏ gọn, chi phí thấp và hỗ trợ kiểm soát phiên bản. Bạn có thể tập trung vào việc viết mã, không phải cấu hình hạ tầng.
Nếu bạn tính toán thấy ứng dụng của mình có nhiều thời gian nhàn rỗi trên một instance EC2 luôn chạy, hãy cân nhắc sử dụng AWS Lambda, với dịch vụ này bạn không cần phải trả tiền cho thời gian nhàn rỗi nếu không có yêu cầu chạy ứng dụng. Nếu có số lượng yêu cầu chạy ứng dụng thường xuyên cao, việc triển khai ứng dụng trên một instance EC2 luôn chạy có thể là lựa chọn tốt hơn.
Sử dụng AWS EC2 là lựa chọn tốt để chạy các ứng dụng hiệu suất cao, ứng dụng chạy lâu dài và các ứng dụng không được phép có độ trễ khi khởi động. Nếu bạn sử dụng các instance AWS EC2, đừng quên sao lưu chúng để tránh mất dữ liệu. NAKIVO Backup & Replication là giải pháp bảo vệ dữ liệu toàn diện có thể bảo vệ các instance EC2 cũng như các máy ảo VMware vSphere, máy ảo Hyper-V và máy chủ vật lý.
