AWS Lambda vs. Microsoft Azure
Trong bài này chúng ta so sánh giữa AWS Lambda và Microsoft Azure Functions. Chúng ta sẽ tìm hiểu về lịch sử cũng như so sánh khác biệt về mặt tính năng giữa hai nền tảng FaaS (Function as a Service) này. Một câu hỏi đặt ra là: Tại sao chúng ta làm việc với nhiều nhà cung cấp FaaS?
Điều quan trọng với bất kỳ ứng dụng đó là sự ổn định, vì vậy luôn phải đặt ra tình huống khi hệ thống tại một nhà cung cấp dịch vụ gặp sự cố. Giả sử khi bạn không thể truy cập được dịch vụ của AWS, hay khi hạ tầng của Google Cloud gặp sự cố, ứng dụng của bạn sẽ bị ảnh hưởng như thế nào? Xem xét những vấn đề này thì mô hình kết hợp sử dụng đồng thời nhiều nhà cung cấp khác nhau nhằm đảm bảo tính ổn định. Khi triển khai ứng dụng FaaS, sự lựa chọn ở thời điểm hiện tại là không nhiều, những nhà cung cấp dịch vụ lớn và tin cậy có thể kể đến như AWS, GCP, hay Azure. Trong giới hạn bài này chúng ta sẽ tập trung vào AWS, và Azure.
AWS Lambda
AWS Lambda được giới thiệu tại Re:Invent 2014. Được xây dựng dựa trên nền tảng Container, sử dụng kiến trúc AWS Machine để giảm thiểu quy mô của môi trường, cho phép tăng hoặc giảm functions trong ứng dụng theo yêu cầu. Các hàm chạy trên các instances, là các đối tượng web server được thiết lập khi có API request. Bằng cách tận dùng nhiều dịch vụ và tính năng trên AWS, bạn có thể xây dựng ứng dụng “server-less” một cách hoàn toàn.
Microsoft Azure
Microsoft mới gia nhập cuộc chơi về “Server-less”, nền tảng về Platform-as-a-Service thực tế đã được cung cấp một vài năm trở lại đây, và Microsoft Azure Functions thì mới bắt đầu từ 2016. Điểm mạnh nổi trội của Auzure Function đó là khả năng chạy code trong môi trường thực thi tạm thời.
Nền tảng và Ngôn ngữ hỗ trợ
Một trong tiêu chí quan trọng để đánh giá đó là ngôn ngữ hỗ trợ. Cả AWS Lambda và Azure Function đều hỗ trợ Node.js, Python, và C#. Tuy nhiên Lambda hỗ trợ tốt hơn với Python, và Java, trong khi Azure Function hỗ trợ F# và PHP. Thêm nữa, cả hai đều chạy trên nền tảng thực thi khác nhau – AWS Lambda được xây dựng dựa trên AMI, chạy Linux, trong khi Azure Functions chạy trên môi trường Windows.
Ngôn ngữ lựa chọn là một vấn đề quan tâm của Development team, có thể với đại đa số Node.js, Python, và C# đáp ứng được yêu cầu. Tuy nhiên, cần lưu ý rằng cả Amazon và Microsoft đang liên tục mở rộng các ngôn ngữ lập trình sẽ hỗ trợ trên nền tảng của họ, đây có vẻ là cuộc đua dài kỳ giữa các nhà cung cấp dịch vụ. Lời khuyên ở thời điểm hiện tại đó là nên chọn ngôn ngữ được hỗ trợ rộng rãi nhất, như vậy bạn sẽ giảm thiểu được công việc chuyển đổi code khi bạn có ý định chuyển đổi nhà cung cấp dịch vụ.
Hỗ trợ Function Triggers
Cả AWS Lambda và Azure Functions đều cung cấp trigger động và tùy chỉnh để gọi các hàm. Ví dụ với AWS, các triggers được gửi từ các dịch vụ AWS – bạn có thể cấu hình API trigger khi sử dụng API Gateway, hay dynamic trigger khi thao tác DynamoDB, và các thao tác về files trên Amazon S3. Trên Azure Function cũng tương tự như vậy. Bạn có thể cho phép truy cập qua Web API, cũng như gọi các functions theo lịch. Microsoft cũng cung cấp triggers từ các dịch khác như Azure Storage, Event Hubs, hay thậm chí là SMS – trigger kích hoạt sử dụng Twilio.
Khó có thể nói ai mạnh hơn ai ở điểm này, điều quan trọng đó là bạn có những lựa chọn nào, càng quan trọng hơn khi đảm bảo được “sự tương đồng” nhất có thể giữa hai nền tảng khác nhau. Có thể đây là điều cần quan tâm khi bạn thiết kế kiến trúc ứng dụng của mình ngay từ ban đầu.
Điểm khác biệt
Nếu chỉ đơn thuần là so sánh AWS Lambda và Azure Functions sẽ không có nhiều sự khác biệt. Điểm khác biệt nằm ở tính sẵn sàng của các functions. AWS Lambda bật một instance mới nếu một function đã không được kích hoạt trong một khoảng thời gian nhất định (thông thường là 10 phút). Trong khi với Windows, instance sẽ được tận dung lại nếu có thể, với hàm gọi đầu tiên sau một quãng thời gian đủ dài không được kích hoạt sẽ dẫn đến độ trễ đáng kể khi AWS phải bật thêm continer với cấu hình phù hợp để thực thi hàm gọi. Với Azure Functions, được built trên Azure Web Jobs, cũng gặp phải vấn đề tương tự, tuy nhiên hạ tầng bên dưới với việc phân chia trạng thái hot/cold có vẻ khó nhận thấy hơn trong môi trường Microsoft.
Một điểm khác biệt về mặt hệ thống. Các hàm Lamda được xây dựng là các thành phần độc lập, có nghĩa là các hàm sẽ có chương trình độc lập. Azure Functions, được nhóm trong một ứng dụng cho phép các functions chia sẻ các biến môi trường, với Lambda thì biến môi trường được khai báo độc lập bên ngoài và có thể được sử dụng chung giữa các functions. Lamda cấp phát bộ nhớ theo function, trong khi Microsoft Azure cấp theo ứng dụng, có thể tùy theo nhu cầu hoặc yêu cầu của ứng dụng, bạn có thể lựa chọn cách tiếp cận phù hợp.
Kết luận
Ứng dụng Serverless có thể giúp doanh nghiệp tiết kiệm được nhiều chi phí so với ứng dụng client-server truyền thống. Bạn có lựa chọn trong việc thiết kế, xây dựng ứng dụng, điều quan trọng là phải nắm rõ nền tảng sử dụng có thể là Linux-based như AWS Lambda hoặc Windows-based như Azure Functions. Điểm quan trọng nữa là lựa chọn Platform và ngôn ngữ phát triển phù hợp giúp việc chuyển đổi nền tảng hay môi trường tốn ít công sức và thời gian nhất. Ví dụ, Node.js được hỗ trợ tốt trên cả AWS và Azure. Tuy nhiên, nếu ứng dụng của bạn phụ thuộc vào một nhà cung cấp cụ thể, có thể gắn kết sâu hơn vào hệ sinh thái của họ bằng cách tận dụng triggers của nhiều dịch vụ khác.
Source: dzone.com