Alpha Web3 & AI
Trang chủ › Điện Toán Đám Mây

Serverless Computing là gì? Tại sao nên sử dụng AWS Lambda?

Ban biên tập Alpha Web3 & AI · · Cập nhật
Serverless Computing là gì? Tại sao nên sử dụng AWS Lambda?

Serverless computing là mô hình điện toán đám mây trong đó bạn chỉ viết và triển khai mã, còn việc cấp phát máy chủ, mở rộng và vá hệ điều hành do nhà cung cấp lo. "Serverless" không có nghĩa là không có máy chủ, mà là bạn không phải quản lý chúng. AWS Lambda là dịch vụ serverless phổ biến của AWS: mã của bạn chạy khi có sự kiện kích hoạt, tự mở rộng theo lưu lượng và chỉ tính phí cho thời gian thực sự chạy.

Từ máy chủ vật lý đến serverless: một hành trình trừu tượng hóa

Để thấy serverless khác gì, hãy nhìn lại các mô hình trước:

  • Máy chủ vật lý: bạn mua phần cứng, lắp đặt, cài hệ điều hành, lo điện và mạng.
  • Máy ảo trên cloud (IaaS) như EC2: không cần lo phần cứng, nhưng vẫn quản lý hệ điều hành, bản vá, số lượng máy.
  • Container: đóng gói ứng dụng nhất quán, nhưng vẫn cần cụm máy để chạy và điều phối.
  • Serverless (FaaS): bạn chỉ cung cấp một hàm. Nhà cung cấp quyết định chạy ở đâu, chạy bao nhiêu bản.

Mỗi bước lên, bạn trao thêm quyền kiểm soát cho nhà cung cấp để đổi lấy ít việc vận hành hơn.

AWS Lambda hoạt động như thế nào

Đơn vị cơ bản của Lambda là hàm (function): một đoạn mã với một hàm xử lý (handler) nhận sự kiện đầu vào và trả về kết quả. Lambda hỗ trợ chính thức nhiều ngôn ngữ như Node.js, Python, Java, .NET, Ruby, và cho phép chạy ngôn ngữ khác qua runtime tùy chỉnh hoặc image container.

Sự kiện kích hoạt

Hàm Lambda không chạy liên tục. Nó được gọi khi có sự kiện từ một nguồn, ví dụ:

  • Yêu cầu HTTP qua Amazon API Gateway hoặc Function URL.
  • File mới được tải lên Amazon S3.
  • Tin nhắn mới trong hàng đợi SQS hoặc luồng Kinesis.
  • Thay đổi dữ liệu trong bảng DynamoDB.
  • Lịch hẹn giờ qua Amazon EventBridge.

Vòng đời một lần gọi

Khi sự kiện đến, Lambda tìm một môi trường thực thi sẵn có. Nếu không có, nó tạo môi trường mới: tải mã, khởi động runtime, chạy phần khởi tạo. Quá trình này gọi là cold start và làm lần gọi đầu chậm hơn. Sau đó môi trường được giữ lại một thời gian để phục vụ các lần gọi tiếp theo nhanh hơn (warm start). Khi nhiều sự kiện đến cùng lúc, Lambda tạo thêm môi trường chạy song song.

Những lý do nên dùng AWS Lambda

1. Không phải quản lý máy chủ

Không có hệ điều hành để vá, không có máy để theo dõi dung lượng ổ đĩa. Đội nhỏ có thể tập trung toàn bộ thời gian vào logic nghiệp vụ.

2. Tự động mở rộng

Từ không yêu cầu nào đến hàng nghìn yêu cầu đồng thời, Lambda tự tăng số môi trường thực thi trong giới hạn đồng thời của tài khoản. Bạn không cần cấu hình Auto Scaling.

3. Trả tiền theo mức dùng

Lambda tính phí theo số lần gọi và thời gian chạy nhân với lượng bộ nhớ cấp phát. Khi không có lưu lượng, chi phí tính toán gần như bằng không. Điều này rất phù hợp với tác vụ thưa thớt hoặc lưu lượng biến động mạnh. AWS cũng có hạn mức miễn phí hằng tháng cho Lambda; xem trang giá chính thức để biết con số hiện hành.

4. Tích hợp sâu với hệ sinh thái AWS

Lambda kết nối sẵn với hàng chục dịch vụ AWS. Xử lý ảnh khi tải lên S3, gửi email khi có bản ghi mới, dọn dẹp dữ liệu theo lịch đều có thể làm với vài dòng cấu hình.

5. Tính sẵn sàng cao có sẵn

Lambda chạy hàm trên nhiều Availability Zone trong một region, nên bạn có khả năng chịu lỗi hạ tầng mà không phải tự thiết kế.

Ví dụ ứng dụng thực tế

Bài toánCách làm với Lambda
Tạo ảnh thu nhỏS3 kích hoạt hàm khi có ảnh mới, hàm tạo bản nhỏ và lưu vào thư mục khác
API cho ứng dụng di độngAPI Gateway nhận yêu cầu, Lambda xử lý, DynamoDB lưu dữ liệu
WebhookNhận thông báo từ dịch vụ thanh toán hoặc GitHub, xử lý và ghi nhận
Tác vụ định kỳEventBridge gọi hàm mỗi đêm để tạo báo cáo hoặc dọn dữ liệu cũ
Xử lý luồng dữ liệuĐọc bản ghi từ Kinesis, lọc và chuyển tiếp vào kho phân tích

Một ứng dụng thú vị khác là chatbot: hàm Lambda nhận tin nhắn, gọi API mô hình ngôn ngữ và trả lời. Bài xây dựng chatbot hỗ trợ khách hàng bằng Python có thể được triển khai theo đúng mô hình này.

Giới hạn cần biết trước khi chọn Lambda

  • Thời gian chạy tối đa: mỗi lần gọi bị giới hạn, hiện tối đa 15 phút. Tác vụ dài hơn cần chia nhỏ, dùng AWS Step Functions hoặc chuyển sang container.
  • Cold start: có thể gây độ trễ đáng chú ý với một số runtime và gói lớn. Có các cách giảm như Provisioned Concurrency hoặc SnapStart cho một số runtime, đổi lại chi phí hoặc ràng buộc.
  • Không giữ trạng thái: dữ liệu cần lưu lại phải đặt ở dịch vụ bên ngoài như DynamoDB, S3, ElastiCache.
  • Chi phí ở tải cao liên tục: với lưu lượng lớn và đều đặn suốt ngày đêm, máy ảo hoặc container có thể rẻ hơn.
  • Phụ thuộc nhà cung cấp: mã tích hợp sâu với sự kiện AWS sẽ tốn công nếu muốn chuyển sang nền tảng khác.

Lambda so với lựa chọn khác

Nếu ứng dụng của bạn là một web server chạy liên tục với lưu lượng ổn định, một instance EC2 có thể đơn giản và tiết kiệm hơn; xem hướng dẫn triển khai ứng dụng lên EC2 để so sánh. Nếu bạn đã có ứng dụng đóng gói container và muốn trải nghiệm gần serverless, các dịch vụ như AWS Fargate hay App Runner là điểm trung gian. Các nhà cung cấp khác cũng có dịch vụ tương đương Lambda, như Google Cloud Run functions và Azure Functions.

Bắt đầu với Lambda như thế nào

  1. Tạo một hàm đơn giản trên bảng điều khiển Lambda, chọn runtime quen thuộc, chạy thử với sự kiện mẫu.
  2. Gắn một Function URL hoặc API Gateway để gọi hàm qua HTTP.
  3. Xem log trong CloudWatch Logs để hiểu vòng đời của từng lần gọi.
  4. Chuyển sang quản lý bằng công cụ hạ tầng dưới dạng mã như AWS SAM, Serverless Framework hoặc AWS CDK thay vì sửa trên bảng điều khiển.
  5. Cấp cho hàm một IAM role với quyền tối thiểu cần thiết.

Khi đã quen với hàm đơn lẻ, bạn có thể tìm hiểu cách ghép nhiều hàm và dịch vụ quản lý thành một backend hoàn chỉnh trong bài kiến trúc backend serverless với AWS Lambda.

Câu hỏi thường gặp

Serverless có rẻ hơn máy chủ truyền thống không?

Với lưu lượng thấp hoặc biến động mạnh, serverless thường rẻ hơn vì không trả tiền cho thời gian nhàn rỗi. Với tải cao và đều đặn, máy ảo hoặc container có thể kinh tế hơn. Nên ước tính dựa trên lưu lượng thực tế của bạn bằng công cụ tính giá của nhà cung cấp.

Lambda có chạy được website hoàn chỉnh không?

Có thể, bằng cách kết hợp API Gateway hoặc Function URL cho phần xử lý và S3 cùng CloudFront cho file tĩnh. Một số framework web cũng có bộ chuyển đổi để chạy trên Lambda, nhưng cần lưu ý cold start và giới hạn kích thước phản hồi.

Cold start là gì và có nghiêm trọng không?

Cold start là độ trễ khi Lambda phải tạo môi trường thực thi mới cho hàm. Với tác vụ nền thì gần như không đáng kể; với API cần phản hồi nhanh, bạn có thể giảm bằng cách thu gọn gói mã, chọn runtime khởi động nhanh hoặc dùng Provisioned Concurrency.

Có cần biết DevOps để dùng Lambda không?

Bạn cần ít kiến thức vận hành hơn so với quản lý máy chủ, nhưng vẫn nên hiểu IAM, giám sát qua CloudWatch và triển khai bằng hạ tầng dưới dạng mã để hệ thống dễ bảo trì.

Bài liên quan