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.