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

  1. 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.
  2. 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.
  3. 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

  1. 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ì.
  2. Do các function là độc lập với nhau nên nhìn chung là khó debug.
  3. Hiện vẫn chưa có giải pháp giải quyết nhu cầu caching resource giữa các stateless 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, ...

VI. Nguồn tham khảo

https://medium.com/@BoweiHan/an-introduction-to-serverless-and-faas-functions-as-a-service-fb5cec0417b2