CHƯƠNG 3 : PHƯƠNG PHÁP ĐÁNH GIÁ VÀ KẾT QUẢ
4.3. Giải pháp và phân tích lựa chọn
4.3.5. Xử lý các tác vụ chạy nền với Celery và Redis
Một số tác vụ xử lý trong phần mềm thử nghiệm địi hỏi tính tốn phức tạp, thời gian xử lý lâu như việc huấn luyện mơ hình (cho mỗi đối tượng cá thể gia súc) và suy luận (inference) để phân loại ra kết quả từ mơ hình đã huấn luyện sẵn. Các tác vụ này không thể xử lý đồng bộ trong luồng HTTP request từ người dùng. Vì thế àng đợi tác
vụ (task queue) là một giải pháp tiện lợi cho các chương trình để thực thi một tác vụ
một cách bất đồng bộ, linh hoat với tiến trình phục vụ. Tiến trình phục vụ được thực thi độc lập với ứng dụng và thậm chí có thể được đặt trên một hệ thống khác. Các giao tiếp giữa ứng dụng và tiến trình phục vụ sẽ được thực hiện qua message queue. Chương trình sẽ gởi cơng việc đến hàng đợi và theo dõi tiến trình cơng việc bằng cách tương tác với hàng đợi như sơ đồ 4-3 sau:
ình 4-3: àng đợi tác vụ xử lý không đồng bộ
Giải pháp phổ biến nhất hiện nay cho hàng đợi tác vụ đối với ngơn ngữ lập trình Python là Celery. Đây là một ứng dụng tương đối phức tạp với nhiều tùy chọn và hỗ trợ một số kiểu hàng đợi khác nhau. Celery hỗ trợ tốt cho các tác vụ nền trong ứng dụng Django. Đối với giải pháp message broker, có nhiều phần mềm phổ biến như Redis, RabbitMQ, Kafka… Vốn là một chương trình bộ đệm (cache) và có chức năng lưu trữ trong bộ nhớ (RAM), Redis đơn giản và được sử dụng trong chương trình này để hỗ trợ cho Celery. Sơ đồ nguyên lý hoạt động của Celery và Redis để chạy các tác vụ nền được hình dung ở hình 4-4.
Redis cũng có thể được sử dụng để lưu trữ kết quả của tác vụ nền được thực hiện bởi Celery, tuy nhiên ở chương trình thử nghiệm này chọn lưu trữ kết quả Celery ngay trong cơ sở dữ liệu chính.