Bắt đầu tìm hiểu AWS Lamba và Node.js

Trong bài này, chúng tôi sẽ thảo luận về serverless programming và làm thế nào để bắt đầu với AWS Lambda như một lập trình viên Node.js

Kể từ khi tung ra AWS Lambda vào năm 2014, Serverless (hoặc FaaS – function as a service) đã trở nên phổ biến hơn. Nó cho phép bạn tập trung vào chức năng của ứng dụng bằng cách không phải lo lắng về cơ sở hạ tầng của bạn.

Trong những năm gần đây, hầu hết các nhà cung cấp đám mây bắt đầu cung cấp phiên bản riêng của họ về Serverless: Microsoft ra mắt Azure Functions trong khi Google ra mắt Cloud Functions. IBM phát hành một phiên bản mã nguồn mở của serverless, được gọi là OpenWhisk.

Serverless Computing

Serverless là loại kiến ​​trúc hướng sự kiện (event-driven) – các chức năng phản ứng với các sự kiện kích hoạt cụ thể. Phát biểu của AWS, nó có thể là một sự kiện được S3, SNS hoặc API Gateway kích hoạt để chỉ một vài điểm.

Vòng đời events of AWS Lambda functions

AWS Lambda chức năng được thực hiện trong một môi trường cô lập, giống như container.

Môi trường này được cung cấp với các tài nguyên được chỉ định trong cấu hình các chức năng (như kích thước bộ nhớ).

AWS Lambda xử lý khác nhau những gì xảy ra khi bạn gọi một hàm Lambda lần đầu tiên, và kết quả các cuộc gọi đến cùng một hàm Lambda.

Gọi một Lambda function mới cho lần đầu tiên

Khi bạn triển khai chức năng Lambda của bạn (hoặc cập nhật một ứng dụng hiện có), một vùng chứa mới sẽ được tạo ra cho nó.

Code của bạn sẽ được di chuyển vào vùng chứa, và mã khởi tạo sẽ chạy trước khi yêu cầu đầu tiên đến chức năng xử lý tiếp xúc.

https://ap-southeast-2.console.aws.amazon.com/lambda/home?region=ap-southeast-2#/home

Chức năng Lambda có thể hoàn thành theo một trong các cách sau:

  • timeout – đã hết thời gian chờ do người dùng chỉ định (mặc định là 5 giây kể từ bây giờ),
  • controlled termination / kiểm soát chấm dứt – gọi lại của chức năng xử lý được gọi là,
  • default termination / chấm dứt mặc định – nếu tất cả các cuộc gọi lại hoàn tất thực hiện (thậm chí không có gọi lại của hàm điều khiển được gọi là),
  • crashing the process

Các cuộc gọi tiếp theo đến một hàm Lambda hiện có

Đối với các cuộc gọi tiếp theo, Lambda có thể quyết định tạo các container/thùng chứa mới để phục vụ các yêu cầu của bạn. Trong trường hợp này, quá trình tương tự sẽ xảy ra như mô tả ở trên, với khởi tạo.

Tuy nhiên, nếu bạn không thay đổi chức năng Lambda của bạn và chỉ một ít thời gian trôi qua kể từ cuộc gọi cuối cùng, Lambda có thể sử dụng lại thùng chứa/container. Bằng cách này, nó tiết kiệm được thời gian khởi tạo bắt buộc để quay lại kho chứa mới và mã của bạn bên trong nó.

Xây dựng function đầu tiên của bạn

Bây giờ khi chúng ta thảo luận về các sự kiện vòng đời của các hàm Lambda thì đã đến lúc hãy xem một số triển khai thực hiện Lambda thật sự!

Hàm AWS Lambda (trong Node.js)

/* Initialization part starts here */
const mysql = require(‘mysql’)
const connection = mysql.createConnection({
host : process.env.MYSQL_HOST,
user : process.env.MYSQL_USER,
password : process.env.MYSQL_PASSWORD,
database : process.env.MYSQL_DB
})
/* Initialization part ends here */

/* Handler function starts here */
exports.handler = (event, context, callback) => {
const sql = ‘SELECT * FROM users WHERE id = ‘ +       connection.escape(event.userId)
connection.query(sql, function (error, results, fields) {
if (error) {
return callback(error)
}
callback(null, results)
})
}
/* Handler function ends here */

Hãy xem xét những gì bạn có thể thấy trong ví dụ trên:

  • initialization  / khởi tạo – đây là một phần của đoạn mã sẽ chỉ chạy một lần cho mỗi lần tạo vùng chứa. Đây là một nơi tốt để tạo ra các kết nối cơ sở dữ liệu.
  • handler function / chức năng xử lý – chức năng này sẽ được gọi là mỗi lần Lambda chức năng của bạn được thực hiện.
    • event – biến này được Lambda sử dụng để truyền dữ liệu sự kiện cho trình xử lý (như yêu cầu HTTP).
    • context – biến ngữ cảnh được sử dụng để truyền thông tin thời gian chạy cho hàm Lambda, như khoảng thời gian còn lại trước khi hàm ngừng hoạt động.
    • callback – Bằng cách sử dụng nó, bạn có thể trả lại dữ liệu một cách rõ ràng cho người gọi (như một phản hồi HTTP)

Triển khai AWS functions

Như bây giờ chúng ta có một function Lambda chạy được, đó là thời gian để triển khai nó.

Theo mặc định, để làm cho AWS Lambda làm việc với HTTP ví dụ, bạn phải quản lý không chỉ để AWS Lambda chức năng, nhưng một API Gateway là tốt.

Triển khai thường có nghĩa là tải lên tệp ZIP, thay thế phiên bản cũ của chức năng AWS Lambda. Để tiết kiệm cho bạn tất cả các nhức đầu, hãy giới thiệu khung Serverless.

Enter the Serverless framework

Khuôn khổ Serverless là một giải pháp mã nguồn mở được cấp phép bởi MIT giúp tạo ra và quản lý các chức năng AWS Lambda dễ dàng hơn.

Serverless giúp bạn tạo và cấu hình tất cả các tài nguyên cần thiết để chạy các chức năng của Lambda liền mạch.

Bắt đầu với Serverless trên AWS Lambda chỉ là một vài lệnh đi:

command line

Các bước này sẽ tạo ra một serverless.yml trong dự án của bạn mà lưu các mô tả của dịch vụ (như lập bản đồ tuyến đường cho các chức năng) cũng như một thư mục .serverless chứa các tệp CloudFormation và các hiện vật ZIP được triển khai.

Nhược điểm của AWS Lambda

Kiểm soát control / khóa

Khi bạn bắt đầu sử dụng giải pháp không có máy chủ, bạn sẽ phải từ bỏ kiểm soát hệ thống của mình với nhà cung cấp đám mây. Trong trường hợp cúp điện, bạn sẽ bị ảnh hưởng nhiều nhất.

Ngoài ra, khi lựa chọn một trong hai giải pháp, sẽ có sự khác biệt về giao diện FaaS của họ như thế nào. Vì vậy, chuyển codebase của bạn từ một nhà cung cấp khác sẽ không thể mà không có thay đổi mã.

Multitenancy

Multitenancy đề cập đến tình hình, nơi mà nhiều khách hàng đang chạy trên cùng một máy chủ lưu trữ. Điều này có thể gây ra các vấn đề về bảo mật, tính mạnh mẽ và hiệu suất (như một khách hàng có tải trọng cao gây ra sự chậm trễ khác).

lợi ích AWS Lambda

Làm giảm chi phí hoạt động

Bạn có thể nghĩ về Máy tính Không Máy chủ như là một cơ sở hạ tầng bên ngoài mà ở đó về cơ bản bạn đang trả tiền cho ai đó để quản lý các máy chủ của bạn.

Vì bạn đang sử dụng một dịch vụ mà nhiều công ty khác đang sử dụng là tốt, chi phí đi xuống. Giảm chi phí biểu hiện ở hai khu vực khác nhau, cả cơ sở hạ tầng và chi phí của người vì bạn sẽ dành ít thời gian hơn để duy trì máy móc của mình.

Làm giảm chi phí nhân rộng

Nhân rộng quy mô chiều ngang tự động xảy ra, và bạn sẽ chỉ phải trả cho các nguồn lực mà bạn thực sự sử dụng, serverless có thể mang lại một cắt giảm chi phí rất lớn cho bạn.

Hãy tưởng tượng một kịch bản khi bạn gửi email tiếp thị / bán hàng trên cơ sở hàng tuần, lưu lượng truy cập cao điểm của trang web của bạn sẽ có mặt trong những giờ tiếp theo sau khi chúng được gửi đi.

Quản lý hoạt động dễ dàng hơn

Vì logic phân phối tự động của cơ sở hạ tầng của bạn được xử lý bởi nhà cung cấp, bạn thậm chí không phải nghĩ về việc điều chỉnh ứng dụng của bạn theo chiều ngang – bạn chỉ cần viết nó theo cách có thể được phóng to theo chiều ngang.

Đọc thêm:

Tham khảo và dịch: https://blog.risingstack.com/getting-started-with-aws-lambda-and-node-js/

Leave a Reply

Your email address will not be published. Required fields are marked *