TL;DR
- Tải dữ liệu hàng loạt từ hàng ngàn URL là một vấn đề quản lý hàng đợi trước khi đó là một vấn đề HTTP.
- Sử dụng đồng thời có giới hạn, thời gian chờ cho mỗi yêu cầu, thử lại với jitter, các điểm kiểm tra, và một khóa kết quả idempotent.
asynciovàaiohttphoạt động tốt với các trang công khai đơn giản; việc render trình duyệt hoặc phát hiện trang nên chuyển sang dịch vụ crawl.- Nstdata Crawl là sự lựa chọn tốt hơn khi lô cần các trang đã được render, các artefact trang, hoặc thu thập cấp trang điều khiển hơn là các lần lấy dữ liệu thô.
Tại sao các lô URL lớn lại thất bại
Bắt đầu với Nstdata Crawl khi việc thu thập cần render hoặc trạng thái nhiệm vụ.
Một trình tải lô thất bại khi tỷ lệ nộp, giới hạn trang mục tiêu, thử lại và lưu trữ kết quả được coi là một vòng lặp. Một nghìn URL có thể tạo ra các ghi chép trùng lặp, các cơn bão thử lại, các kết nối mở, và không có cách đáng tin cậy để tiếp tục sau khi một worker hoặc quá trình dừng lại. Bắt đầu với Nstdata Crawl khi lô là một nhiệm vụ crawl thay vì một danh sách các yêu cầu HTTP đơn giản.
Quyết định thiết kế đầu tiên là danh tính bản ghi. Sử dụng một URL chính thống cộng với một hash cấu hình lấy dữ liệu, không phải vị trí trong một tệp đầu vào. Ghi lại các trạng thái queued, running, succeeded, failed, và dead_letter, với lỗi cuối cùng và số lần thử. Điều này làm cho một lần chạy một phần trở nên có thể sửa chữa.
Một thiết kế bất đồng bộ vẫn duy trì giới hạn
Mô hình an toàn nhất là một nhà sản xuất, một nhóm worker giới hạn bằng semaphore, và một điểm kết quả bền vững. tài liệu mô hình cho các yêu cầu HTTP bất đồng bộ; là tài liệu tham khảo chính xác cho vòng đời phiên và thời gian chờ.





