Polling là gì?
Polling là kỹ thuật mà một thành phần (downstream) liên tục gửi yêu cầu đến thành phần khác (upstream) để kiểm tra trạng thái hoặc lấy dữ liệu mới nhất. Nó thường được dùng khi downstream không biết khi nào dữ liệu sẽ được cập nhật, nhưng vẫn cần theo dõi sự thay đổi đó.
Vai trò của Polling trong workflow tự động hóa
Polling đóng vai trò là một phương thức chủ động để workflow kiểm tra trạng thái của các tác vụ bên ngoài hoặc các nguồn dữ liệu mà không có cơ chế thông báo tức thời. Trong các hệ thống workflow, polling thường được sử dụng để:
- Kiểm tra khi nào một tài nguyên (như file, job, hoặc API endpoint) sẵn sàng để xử lý
- Theo dõi tiến độ của các tác vụ chạy dài
- Giám sát trạng thái của các dịch vụ, host hoặc API bên ngoài
Polling cho phép workflow hoạt động độc lập mà không cần phụ thuộc vào webhook hoặc event-driven architecture, nhưng với chi phí là tài nguyên và độ trễ.
Short Polling và Long Polling
Có hai cách thức chính để triển khai polling: short polling và long polling.
Short Polling là khi downstream gửi yêu cầu và upstream trả về dữ liệu ngay lập tức, dù dữ liệu có thay đổi hay không. Downstream sẽ gửi yêu cầu mới sau một khoảng thời gian cố định (interval time), ví dụ mỗi 5 giây. Cách này dễ triển khai nhưng tốn tài nguyên vì phải gửi nhiều yêu cầu ngay cả khi không có dữ liệu mới.
Long Polling là khi upstream không trả về dữ liệu ngay lập tức, mà chờ cho đến khi có dữ liệu thay đổi hoặc hết timeout. Khi có sự kiện hoặc timeout xảy ra, upstream mới trả về response cho downstream. Cách này giảm độ trễ và tiết kiệm tài nguyên vì chỉ gửi dữ liệu khi có thay đổi.
Sự khác biệt chính giữa hai cách này là short polling thực hiện kiểm tra định kỳ regardless of dữ liệu có thay đổi hay không, còn long polling chỉ trả về dữ liệu khi có sự kiện hoặc vượt quá thời gian chờ.
Ứng dụng thực tế của Polling
Polling được sử dụng trong nhiều trường hợp workflow thực tế:
- Giám sát tài nguyên: Kiểm tra định kỳ host, service, hoặc mạng để phát hiện thay đổi trạng thái
- Xử lý file: Polling một thư mục FTP hoặc S3 bucket để phát hiện file mới được tải lên
- Kiểm tra job: Gửi yêu cầu khởi động một job, sau đó polling để kiểm tra khi nào job hoàn thành
- API status check: Gọi một REST API theo chu kỳ để kiểm tra khi nào một tài nguyên cụ thể sẵn sàng
Trong Google Workflows, bạn có thể triển khai polling bằng cách sử dụng sys.sleep để tạm dừng workflow, sau đó gửi yêu cầu kiểm tra lại cho đến khi điều kiện được thỏa mãn.
Những lưu ý quan trọng về Polling
Khi sử dụng polling trong workflow, cần lưu ý:
- Interval time và timeout: Short polling cần chọn interval phù hợp—quá ngắn tốn tài nguyên, quá dài làm tăng độ trễ. Long polling cần cấu hình timeout để tránh giữ connection quá lâu
- Overhead lịch sử: Nếu polling bằng cách gọi activity trong một vòng lặp, mỗi lần gọi sẽ thêm event vào history của workflow, làm tăng kích thước lịch sử
- Công suất server: Polling tạo ra yêu cầu liên tục, nên cần xem xét tác động đến máy chủ upstream, đặc biệt nếu có nhiều client polling cùng lúc
- Webhook là thay thế: Nếu upstream có khả năng gửi webhook, đó thường là cách tiết kiệm tài nguyên hơn so với polling
Các thuật ngữ liên quan đến Polling
Dưới đây là các thuật ngữ thường gặp khi làm việc với polling trong automation và workflow:
- Webhook: Cơ chế server push cho phép upstream chủ động gửi dữ liệu đến downstream khi có sự kiện, là thay thế hiệu quả cho polling.
- Long Polling: Kiểu polling mà server giữ connection mở cho đến khi có dữ liệu mới hoặc timeout, giảm độ trễ so với short polling.
- Trigger: Sự kiện hoặc điều kiện khiến workflow bắt đầu thực thi, có thể được kích hoạt bởi polling hoặc event bên ngoài.
- Retry: Cơ chế tự động thử lại một bước workflow nếu nó thất bại, thường kết hợp với polling để xử lý các tình huống tạm thời.
Các câu hỏi thường gặp
Polling có khác gì với Webhook?
Polling là client chủ động hỏi server có dữ liệu mới không, còn webhook là server chủ động gửi dữ liệu đến client khi có sự kiện. Webhook tiết kiệm tài nguyên hơn vì không cần yêu cầu liên tục, nhưng polling dễ triển khai hơn và không yêu cầu server phải có khả năng kết nối ngược đến client.
Tôi nên chọn short polling hay long polling?
Short polling đơn giản và dễ triển khai, phù hợp khi không cần update quá nhanh. Long polling giảm độ trễ và tiết kiệm tài nguyên, phù hợp khi cần phản ứng nhanh với sự thay đổi dữ liệu. Chọn dựa trên yêu cầu về độ trễ chấp nhận được và tài nguyên sẵn có.
Khi nào polling trong workflow sẽ timeout?
Long polling sẽ timeout nếu upstream không trả về dữ liệu trong khoảng thời gian chờ được cấu hình. Khi timeout xảy ra, server buộc phải trả về response (có thể không kèm dữ liệu hữu ích) để tránh giữ connection quá lâu.
Polling có ảnh hưởng đến lịch sử workflow không?
Có, nếu polling được triển khai bằng cách gọi activity trong một vòng lặp, mỗi lần gọi sẽ thêm event vào lịch sử workflow. Điều này có thể làm cho lịch sử trở nên rất lớn nếu polling chạy nhiều lần, ảnh hưởng đến hiệu suất truy vấn lịch sử.