I. Lời mở đầu
Trước khi hiểu được FaaS
là gì, chúng ta cần hiểu một thuật ngữ khác rất quan trọng đó chính là serverless computing
. Serverless computing
là một mô hình nhằm mục đích quản lý abstract server
và cơ sở hạ tầng cấp thấp. Trong mô hình này, việc phân bổ tài nguyên được quản lý bởi nhà cung cấp dịch vụ cloud thay vì các lập trình viên, điều này có thể mang lại một số lợi ích rất lơn. Nói cách khác, mô hình serverless nhằm mục đích giúp các lập trình viên tập trung vào lập trình ứng dụng của mình, những gì liên quan đến server sẽ được bên cung cấp dịch vụ cloud lo hết.
II. Faas
FaaS là viết tắt của Function as a service
- một khái niệm tương đối mới và hiện được triển khai trong các dịch vụ như AWS Lambda, Google Cloud Function, IBM OpenWhisk và Microsoft Azure Function. Nó cung cấp phương tiện để đạt được giấc mơ serverless
cho phép các lập trình viên viết code đáp ứng được việc khi có 1 sự kiện gì đó xảy ra thì 1 hàm mà ta cũng có thể xem là 1 service được gọi mà không cần xây dựng hoặc duy trì cơ sở hạ tầng phức tạp. Điều này có nghĩa là chúng ta chỉ có thể deploy các module function
lên cloud và thực thi các function đó 1 cách độc lập.
Code mà các lập trình viên viết sẽ là những function được deploy lên cloud. Sau đây là 1 function đơn giản dùng HTTP Request
để hiển thị Hello World
hoặc Hello
tiếp theo là tên ai đó nếu có param name
/**
* HTTP Cloud Function.
*
* @param {Object} req Cloud Function request context.
* @param {Object} res Cloud Function response context.
*/
exports.helloHttp = function helloHttp (req, res) {
res.send(`Hello ${req.body.name || 'World'}!`);
Sau đây là 1 function khác có thể phản hồi được sự thay đổi của Google Cloud Storage bucket
(ví dụ như khi upload file, khi xóa file, khi meta data
bị thay đổi, ..)
/**
* Background Cloud Function to be triggered by Cloud Storage.
*
* @param {object} event The Cloud Functions event.
* @param {function} callback The callback function.
*/
exports.helloGCS = function (event, callback) {
const file = event.data;
if (file.resourceState === 'not_exists') {
console.log(`File ${file.name} deleted.`);
} else if (file.metageneration === '1') {
// metageneration attribute is updated on metadata changes.
// on create value is 1
console.log(`File ${file.name} uploaded.`);
} else {
console.log(`File ${file.name} metadata updated.`);
}
callback();
};
III. Thuận lợi của Faas
- Lập trình viên có thể tập trung vào việc phát triển ứng dụng, những thứ liên quan đến hạ tầng sẽ được bên cung cấp dụng vụ cloud lo.
- Nếu như không có request nào xử dụng đến function đã được deploy thì lập trình viên sẽ không cần phải trả tiền.
- Logic được tách thành những module nhỏ mà cụ thể là các function làm tăng tính tái sử dụng, khả năng linh hoạt, mở rộng cũng như bảo trì cả hệ thống.
IV. Khó khăn của Faas
- Làm giảm tính tường minh của cả hệ thống, có thể gây khó khăn trong việc hiểu được cả hệ thống đang làm gì.
- Do các function là độc lập với nhau nên nhìn chung là khó debug.
- Hiện vẫn chưa có giải pháp giải quyết nhu cầu
caching resource
giữa cácstateless requests
V. Tình huống sử dụng Faas
Faas thường được sử dụng để giải quyết các vấn đề liên quan đến Web apps, Backends, Data/stream processing, Chatbots, Scheduled tasks, IT Automation
V. Kết luận
Faas có nhiều điểm mạnh bên cạnh đó cũng có nhiều điểm yếu, do vậy hiện tại nó không phải là 1 giải pháp toàn vẹn mà thường chỉ là 1 phần nhỏ trong 1 giải pháp lớn hơn. Điều này có nghĩa là ta sẽ dùng faas trong 1 số tình huống cố định và kết hợp với các giải pháp khác để giải quyết các tình huống còn lại. Do vậy việc xác định đúng khi nào sử dụng Faas rất quan trọng.
Ví như phát triển 1 hệ thống web, sau khi xảy ra sự kiện có người upload file lên Google Cloud bucket ta có thể dùng faas để thông báo đến các user đóng vai trò là admin của trang web đó. Hoặc tình huống sau khi xảy ra sự kiện 1 người nào đó đăng kí thành công tài khoản mới, thì ta có thể dùng faas để thực hiện chức năng gửi email chúc mừng đã đăng kí thành công, ...