Courses
Azure Functions là một phần của dịch vụ tính toán không máy chủ của Microsoft. Nó cho phép bạn chạy những đoạn mã nhỏ để phản hồi các sự kiện mà không phải tự quản lý máy chủ.
Ví dụ, một function có thể chạy khi có yêu cầu HTTP đến, khi một tệp được tải lên bộ nhớ, hoặc khi đến thời điểm đã được lên lịch.
“Không máy chủ” không có nghĩa là không có máy chủ. Nó có nghĩa là Azure quản lý hạ tầng cho bạn. Azure lo việc cấp phát, mở rộng và bảo trì ở phía sau.
Trong hướng dẫn này, tôi sẽ giới thiệu các khối xây dựng: triggers, bindings, các tùy chọn lưu trữ (hosting), và một ví dụ thực hành để bạn bắt đầu.
Azure Functions là gì?
Một Azure Function đơn giản là một đoạn mã nhỏ chạy khi được kích hoạt bởi sự kiện bạn chọn. Về cơ bản bạn viết phần logic, còn Azure lo phần còn lại.
Mô hình này dựa trên ba ý tưởng:
- Thực thi hướng sự kiện cho phép mã chỉ chạy khi có việc xảy ra, không phải mọi lúc.
- Tự động mở rộng cho phép Azure thêm hoặc bớt tài nguyên tính toán dựa trên nhu cầu.
- Định giá theo mức tiêu thụ cho phép bạn, trong một số gói lưu trữ, chỉ trả tiền cho thời gian mã thực sự chạy.
Một function đơn lẻ lý tưởng làm một việc nhỏ, độc lập, như thay đổi kích thước ảnh hoặc xử lý một thông điệp. Function App là vùng chứa giữ một hoặc nhiều functions. Nó quản lý các thiết lập dùng chung, như cấu hình và triển khai, cho tất cả functions bên trong.
Cách Azure Functions hoạt động
Vòng đời của một function tuân theo một chu trình đơn giản như sau:
- Một sự kiện xảy ra, như tải lên tệp hoặc gọi HTTP.
- Một trigger phát hiện sự kiện và khởi động function ngay lập tức.
- Function chạy phần mã của nó.
- Bindings kết nối function với các dịch vụ khác để đọc dữ liệu đầu vào hoặc gửi dữ liệu đầu ra cần thiết.
- Azure quản lý tài nguyên tính toán phía sau quy trình này, tất nhiên dựa trên gói lưu trữ bạn chọn.
Luồng này nhìn chung giống hệt nhau bất kể ngôn ngữ hay tùy chọn lưu trữ (cho hầu hết các bước như đã nói). Chỉ có trigger, mã và bindings là thay đổi.
Triggers trong Azure Functions
Mỗi function có đúng một trigger. Trigger xác định chính xác cách function được khởi chạy. Dưới đây là những loại phổ biến bạn nên biết:
- HTTP Trigger: Chạy function khi nhận được yêu cầu HTTP. Thường dùng để xây dựng API.
- Timer Trigger: Chạy function theo lịch, ví dụ mỗi giờ hoặc mỗi ngày một lần.
- Blob Storage Trigger: Chạy function khi một tệp được thêm hoặc thay đổi trong Azure Blob Storage.
- Queue Trigger: Đơn giản là chạy function khi có thông điệp mới đến trong hàng đợi.
- Event Hub Trigger: Chạy function để phản hồi một luồng sự kiện. Rất hữu ích cho khối lượng dữ liệu lớn.
Bindings trong Azure Functions
Tôi nghĩ triggers và bindings thường bị nhầm lẫn, nhưng dù trông giống nhau, chúng làm những việc hoàn toàn khác. Trigger khởi chạy function, còn binding kết nối function với dữ liệu bằng cách đọc hoặc gửi dữ liệu.
Input bindings
Ở đây, bạn cung cấp dữ liệu cho function mà không cần viết mã tích hợp tùy chỉnh. Ví dụ, một function có thể tự động đọc một bản ghi từ cơ sở dữ liệu chỉ bằng cách khai báo binding.
Output bindings
Điều này cho phép bạn gửi kết quả của function đến nơi khác. Chẳng hạn, bạn có thể dùng output binding để ghi một thông điệp đã xử lý vào hàng đợi.
Ví dụ sau để bạn dễ hình dung: Một Blob Storage trigger khởi chạy function khi một ảnh được tải lên. Một output binding sau đó lưu ảnh đã thay đổi kích thước vào một container lưu trữ khác. Làm theo cách này, bạn không cần viết mã client cho lưu trữ thủ công.
Cách tạo Azure Function đầu tiên của bạn
Đây là ví dụ đơn giản về một function kích hoạt bởi HTTP trả về lời chào. Quy trình như sau:
- Tạo một Function App. Đây là vùng chứa cho function của bạn trên Azure.
- Chọn runtime và ngôn ngữ bạn muốn viết mã.
- Tạo function để bạn có thể thêm một function mới trong Function App của mình.
- Chọn HTTP trigger để function phản hồi các yêu cầu web.
- Thêm chức năng đơn giản như đọc tên từ yêu cầu và trả về “Xin chào, [name].”
- Chạy và kiểm thử function bằng công cụ tích hợp sẵn hoặc chỉ cần gửi yêu cầu từ trình duyệt.
- Triển khai lên Azure để nó hoạt động và có thể truy cập.
Tôi cố tình làm ví dụ này thật nhỏ gọn để bạn thấy được khuôn mẫu, còn lại để sự sáng tạo của bạn phát huy.
Các ngôn ngữ được Azure Functions hỗ trợ
Azure Functions hỗ trợ nhiều ngôn ngữ như:
- C#
- JavaScript/TypeScript
- Python
- Java
- PowerShell
Mức độ hỗ trợ và mô hình phát triển có thể khác nhau theo ngôn ngữ và phiên bản. Do đó, tôi khuyên bạn kiểm tra tài liệu Azure hiện hành trước khi bắt đầu dự án mới vì các chi tiết này thường xuyên thay đổi.
Các tùy chọn lưu trữ Azure Functions
Không phải mọi Azure Function đều chạy giống nhau. Vì thế, Azure cung cấp các gói lưu trữ khác nhau, mỗi gói đánh đổi theo những khía cạnh khác nhau để bạn chọn tùy trường hợp. Những đánh đổi này gồm:
- Mở rộng: Một số gói mở rộng tự động và tức thì, trong khi số khác cần kiểm soát thủ công hơn.
- Hành vi khởi động: Một số gói giữ function “ấm”, nghĩa là sẵn sàng chạy ngay, trong khi số khác khởi động theo nhu cầu.
- Mạng: Một số gói hỗ trợ tính năng mạng nâng cao như kết nối vào mạng ảo riêng, số khác thì không.
- Chi phí: Mô hình định giá rất khác nhau, từ trả tiền theo mỗi lần thực thi đến chi phí cố định hàng tháng.
Mở rộng và Cold Start trong Azure Functions
Có hai khái niệm nữa quan trọng khi function chạy trong môi trường sản xuất. Đó là:
Tự động mở rộng
Ở đây, Azure theo dõi tải trên function của bạn, khi nhu cầu tăng, nó thêm nhiều phiên bản tính toán, khi nhu cầu giảm, nó loại bớt. Bạn không cần quản lý thủ công.
Cold start
Nếu một function không chạy gần đây, nó có thể cần một chút thời gian để khởi động trước khi xử lý yêu cầu mới. Độ trễ này gọi là cold start. Một số gói lưu trữ giảm hoặc tránh điều này bằng cách giữ phiên bản ở trạng thái ấm, như đã đề cập.
Các trường hợp sử dụng phổ biến của Azure Functions
Mô hình hướng sự kiện phù hợp với nhiều bài toán thường gặp. Đáng chú ý:
API và webhook
Xử lý các yêu cầu HTTP đến mà không cần vận hành một máy chủ web đầy đủ 24/7.
Xử lý tệp và hình ảnh
Kích hoạt function bất cứ khi nào có tệp vào bộ nhớ, sau đó thay đổi kích thước, chuyển đổi, hoặc chỉ quét tệp.
Công việc theo lịch
Chạy tác vụ dọn dẹp, báo cáo, hoặc nhắc nhở theo timer mà không cần máy chủ chạy thường trực.
Chuỗi xử lý dữ liệu
Xử lý thông điệp hoặc sự kiện ngay khi chúng đến, từng bước một.
IoT và xử lý sự kiện
Xử lý khối lượng lớn dữ liệu cảm biến hoặc thiết bị khi chúng được truyền về.
Tác vụ nền
Chuyển tải công việc chậm hoặc thỉnh thoảng, như gửi email, để không chặn ứng dụng chính của bạn.
Giám sát và khắc phục sự cố Azure Functions
Khi function đã chạy thực tế, bạn cần khả năng quan sát hiệu năng của nó.
Bạn có thể xem log ghi lại những gì đã xảy ra ở mỗi lần chạy, rất hữu ích để gỡ lỗi. Bạn cũng có thể kiểm tra Application Insights trong các công cụ Azure, về cơ bản theo dõi hiệu năng, yêu cầu và lỗi ở một nơi tập trung.
Bạn cũng nên theo dõi các lần gọi thất bại để biết khi nào và vì sao function không hoàn tất. Giám sát hiệu năng giúp bạn phát hiện các function chậm trước khi chúng trở thành vấn đề, và tất nhiên có thể cấu hình hành vi thử lại để các lần thực thi thất bại được tự động chạy lại.
Kết luận
Azure Functions cho phép bạn chạy mã để phản hồi sự kiện mà không phải quản lý máy chủ bên dưới. Triggers quyết định khi nào một function khởi chạy. Bindings, mặt khác, giúp dễ dàng kết nối function đó với các dịch vụ khác mà không cần mã tích hợp bổ sung.
Khi bạn chuyển từ một function thử nghiệm đơn giản sang chạy trong sản xuất, lựa chọn lưu trữ và mở rộng trở nên quan trọng hơn nhiều. Gói phù hợp không chỉ ảnh hưởng chi phí, mà còn ảnh hưởng đến tốc độ và độ tin cậy.
Tôi làm việc trên các hệ thống AI tăng tốc, cho phép trí tuệ ở biên với các pipeline ML liên kết (federated) trên dữ liệu phi tập trung và khối lượng công việc phân tán. Công việc của tôi tập trung vào Mô hình Lớn, Xử lý Giọng nói, Thị giác Máy tính, Học tăng cường và các cấu trúc tô-pô ML tiên tiến.
Câu hỏi thường gặp
Azure Functions là gì?
Một dịch vụ không máy chủ chạy các đoạn mã nhỏ để phản hồi sự kiện, mà bạn không phải quản lý máy chủ.
Điều gì kích hoạt một Azure Function?
Các sự kiện như yêu cầu HTTP, timer, tải tệp lên, hoặc thông điệp hàng đợi.
Sự khác biệt giữa trigger và binding là gì?
Trigger khởi chạy function. Binding kết nối nó với các dịch vụ khác để nhận đầu vào hoặc gửi đầu ra.
Cold start là gì?
Độ trễ ngắn khi một function khởi động sau khi ở trạng thái nhàn rỗi.
Azure Functions hỗ trợ những ngôn ngữ nào?
C#, JavaScript/TypeScript, Python, Java và PowerShell.
