Serverless là gì? Khi công nghệ ngày càng phát triển, các kiến trúc phần mềm mới đang nổi lên, đem lại những thay đổi đáng kể trong cách chúng ta phát triển và triển khai ứng dụng. Một trong những xu hướng quan trọng nhất hiện nay là “Serverless”. Trong bài viết dưới đây, chúng tôi sẽ giới thiệu chi tiết về Serverless. Hãy xem nhé!
Serverless là gì?
Serverless là một kiến trúc phần mềm mà ở đó, quản lý của hệ thống và các tài nguyên không còn phụ thuộc hoàn toàn vào các máy chủ cụ thể. Thay vào đó, các ứng dụng chạy trong môi trường được quản lý bởi các nhà cung cấp dịch vụ đám mây. Điều này có nghĩa là bạn không cần quản lý trực tiếp máy chủ, tài nguyên hạ tầng hay các khía cạnh về triển khai và quản lý hệ thống.
Trong kiến trúc Serverless, bạn chỉ trả tiền cho tài nguyên và thời gian tính toán thực sự sử dụng, không cần phải trả tiền cho các máy chủ ảo đang chạy liên tục. Các dịch vụ serverless thường có khả năng tự mở rộng linh hoạt, nghĩa là họ có thể tự động mở rộng hoặc thu hẹp tài nguyên để đáp ứng nhu cầu thay đổi của ứng dụng.
Một số dịch vụ Serverless phổ biến bao gồm AWS Lambda, Azure Functions, Google Cloud Functions và nhiều dịch vụ khác từ các nhà cung cấp đám mây. Các ứng dụng sử dụng kiến trúc Serverless thường linh hoạt, chi phí hiệu quả và dễ quản lý so với việc tự quản lý hạ tầng máy chủ truyền thống.
Đặc điểm của Serverless
Để biết đặc điểm của Serverless là gì, hãy xem phần dưới đây:
Các đơn vị mã nhỏ, rời rạc: Thường những dịch vụ được viết bằng kiến trúc serverless bao gồm một hàm duy nhất.
Thực thi dựa trên sự kiện: Cơ sở hạ tầng cần thiết để chạy một hàm không tồn tại cho đến khi hàm đó được kích hoạt. Một khi nhận được sự kiện, một môi trường tính toán tạm thời được tạo ra để thực thi yêu cầu đó. Môi trường có thể bị hủy ngay lập tức hoặc phổ biến hơn là duy trì hoạt động trong một khoảng thời gian ngắn, thường là 5 phút.
Quy mô về không: Khi một hàm ngừng nhận yêu cầu, cơ sở hạ tầng sẽ bị gỡ xuống và ngừng hoạt động hoàn toàn. Điều này giúp tiết kiệm chi phí vì cơ sở hạ tầng chỉ chạy khi có nhu cầu sử dụng. Nếu không có nhu cầu sử dụng, môi trường sẽ giảm về không.
Quy mô về vô cùng: Tìm hiểu về Serverless là gì, ta biết thêm về lý thuyết, Functions as a Service (FaaS) chịu trách nhiệm theo dõi tải và tạo các phiên bản bổ sung khi cần thiết, lên đến vô cùng. Điều này gần như loại bỏ nhu cầu cho nhà phát triển phải nghĩ về việc mở rộng khi họ thiết kế ứng dụng. Một hàm đã triển khai có thể xử lý một yêu cầu hoặc một tỷ yêu cầu mà không cần thay đổi mã nguồn.
Sử dụng các dịch vụ được quản lý: Thông thường, kiến trúc serverless sử dụng các dịch vụ do đám mây cung cấp cho các phần của ứng dụng của chúng nhằm cung cấp các công việc nặng không phân biệt như lưu trữ dữ liệu, cơ sở dữ liệu, hàng đợi…. Ví dụ, Firebase của Google phổ biến trong cộng đồng serverless là một dịch vụ quản lý trạng thái và cơ sở dữ liệu kết nối với các dịch vụ khác của Google như Cloud Functions.
Ưu nhược điểm của Serverless là gì?
Ưu điểm
- Quản lý máy chủ: Không cần lo lắng về việc duy trì máy chủ, giúp tiết kiệm thời gian và công sức. Các vấn đề liên quan đến nâng cấp, cài đặt và quản trị máy chủ trở thành điều không quá quan trọng.
- Thay đổi quy mô linh hoạt hơn: Việc điều chỉnh dung lượng thông qua đơn vị sử dụng trở nên đơn giản hơn nhiều so với việc quản lý máy chủ độc lập, cho phép thay đổi quy mô một cách linh hoạt.
- Độ sẵn sàng cao: Serverless được đánh giá cao về tích hợp và độ chính xác. Bạn không cần phải xây dựng kiến trúc cho những chức năng này, vì các dịch vụ ứng dụng đã tích hợp sẵn theo kiểu mặc định. Đồng thời, bạn có thể triển khai sản phẩm một cách dễ dàng ở nhiều trung tâm dữ liệu khác nhau.
- Tiết kiệm chi phí: Sử dụng Serverless giúp tiết kiệm chi phí đáng kể, từ việc cấu hình đến cài đặt và bảo trì máy chủ.
Nhược điểm
Xem phần sau để biết nhược điểm của Serverless là gì:
- Độ trễ: Serverless có thể đối mặt với vấn đề về hiệu suất, tạo ra độ trễ lớn trong việc phản hồi ứng dụng. Nếu yêu cầu hiệu suất cao, việc sử dụng máy chủ ảo có thể là lựa chọn ưu việt.
- Gỡ lỗi: Quá trình giám sát và gỡ lỗi của Serverless gặp khó khăn do không sử dụng tài nguyên máy chủ đồng nhất, gây nên nhiều khó khăn trong quá trình hoạt động.
- Giới hạn bộ nhớ và thời gian: Các nhà cung cấp thường giới hạn bộ nhớ và thời gian thực thi. Ví dụ, thời gian thực thi tối đa có thể là 5 phút, sau đó quá trình thực thi bị ngắt. Bộ nhớ cũng được giới hạn ở nhiều mức khác nhau tùy thuộc vào nhà cung cấp.
- Phụ thuộc nhà cung cấp: Bạn không có khả năng tự do chạy các phiên bản phần mềm theo mong muốn mà phải phụ thuộc vào nhà cung cấp. Ví dụ, nếu bạn cần Nodejs 10.x nhưng nhà cung cấp chỉ hỗ trợ đến bản 8.x, bạn sẽ không thể sử dụng phiên bản mong muốn.
- Chi phí ẩn: Chi phí này phụ thuộc vào chính sách của nhà cung cấp, có thể bao gồm lưu trữ mã nguồn, lưu trữ dữ liệu và băng thông. Nếu không được tối ưu hóa đúng cách, chi phí ẩn có thể cao hơn chi phí của Serverless.
Nên sử dụng Serverless khi nào?
Tìm hiểu về Serverless là gì, ta nhận ra kiến trúc Serverless là lựa chọn lý tưởng cho ứng dụng bất đồng bộ, không trạng thái có thể được khởi động ngay lập tức. Tương tự, Serverless cũng phù hợp cho các trường hợp sử dụng có nhu cầu tăng đột biến không thường xuyên và không thể đoán trước.
Hãy nghĩ về một nhiệm vụ như xử lý hàng loạt các tệp hình ảnh đến, có thể chạy không thường xuyên nhưng cũng phải sẵn sàng khi một lượng lớn hình ảnh đến cùng một lúc. Hoặc một nhiệm vụ như theo dõi sự thay đổi đến từ cơ sở dữ liệu và sau đó áp dụng một loạt các chức năng, như kiểm tra các thay đổi so với các tiêu chuẩn chất lượng hoặc tự động dịch chúng.
Ứng dụng serverless cũng phù hợp với các trường hợp sử dụng liên quan đến dòng dữ liệu đến, chatbot, các nhiệm vụ được lên lịch hoặc logic kinh doanh.
Một số trường hợp sử dụng serverless phổ biến khác bao gồm các API và ứng dụng web ở phía sau, tự động hóa quy trình kinh doanh, các trang web không có máy chủ và được tích hợp trên nhiều hệ thống.
Ứng dụng của Serverless là gì?
Websites và APIs: Bạn có thể tạo ra một trang web (có thể là động hoặc tĩnh) hoặc API. Thông thường, người ta thường xây dựng Restful API bằng cách sử dụng Serverless hoặc triển khai Graphql.
Xử lý đa phương tiện: Thực hiện các thao tác xử lý hình ảnh và video như nén, cắt, tạo ảnh thumbnail, định dạng kích thước ảnh hoặc chuyển đổi định dạng video để tương thích với những thiết bị khác nhau.
Xử lý sự kiện: Serverless có thể đảm nhiệm vai trò như một cầu giao để thực hiện một loạt các hành động khác tùy thuộc vào sự kiện được kích hoạt.
Xử lý dữ liệu: Có thể áp dụng trong các ứng dụng như chatbot, IoT,… Serverless là lựa chọn phù hợp vì trong trường hợp chatbot hoặc IoT, chúng ta không biết khi nào dữ liệu sẽ đến và khi nào cần phải xử lý. Do đó, không cần phải duy trì máy chủ luôn hoạt động và tránh lãng phí thời gian chờ.
Sự phát triển của Serverless là gì?
Các khái niệm về kiến trúc serverless và FaaS đã phát triển đồng bộ với sự phổ biến của containers và các dịch vụ đám mây theo yêu cầu. Một báo cáo của 451 Research, được thực hiện phối hợp với Redhat, đã theo dõi sự tiến triển của serverless qua 3 giai đoạn.
Giai đoạn “1.0” của serverless đi kèm với những hạn chế làm cho nó không phải là lựa chọn lý tưởng cho tính toán thông thường. Serverless 1.0 có một số đặc trưng như:
- Chỉ hỗ trợ HTTP và một số nguồn khác
- Chỉ hỗ trợ các hàm
- Thời gian thực thi giới hạn (5-10 phút)
- Không có sự phối hợp
- Kinh nghiệm phát triển cục bộ giới hạn
Khi tìm hiểu về Serverless là gì, bạn sẽ thấy sự xuất hiện của Kubernetes đã mở ra kỷ nguyên “Serverless 1.5” nơi nhiều frameworks serverless bắt đầu tự động mở rộng các container. Serverless 1.5 có một số đặc trưng như:
- Knative
- Tự động mở rộng dựa trên Kubernetes
- Microservices và các hàm
- Dễ dàng kiểm tra và gỡ lỗi cục bộ
- Hỗ trợ đa ngôn ngữ và có thể chuyển đổi
Hiện nay, kỷ nguyên “Serverless 2.0” đang nổi lên với sự bổ sung các tính năng tích hợp và trạng thái. Các nhà cung cấp đã bắt đầu thêm các thành phần còn thiếu để làm cho serverless phù hợp cho các tải công việc doanh nghiệp tổng quát. Serverless 2.0 có một số đặc trưng như:
- Xử lý trạng thái cơ bản
- Sử dụng các mô hình tích hợp doanh nghiệp
- Khả năng nhắn tin nâng cao
- Kết hợp với PaaS của doanh nghiệp
- Nguồn sự kiện sẵn sàng cho doanh nghiệp
- Trạng thái và tích hợp