Như bài viết cấp cao về công việc nền và xếp hàng gợi ý, các dynos web của bạn sẽ cần giao tiếp với các dynos nhân viên của bạn thông qua một cơ chế trung gian (thường là một hàng đợi).
Để đạt được những gì bạn đang hy vọng, hãy làm theo phương pháp chung sau:
- Web dyno nhận được yêu cầu web
- Web dyno thêm một công việc vào hàng đợi
- Nhân viên dyno nhận công việc ngoài hàng đợi
- Nhân viên dyno thực thi công việc, ghi tiến trình gia tăng vào một thành phần được chia sẻ
- Các yêu cầu thăm dò phía trình duyệt về trạng thái công việc từ web dyno
- Thành phần truy vấn dyno web được chia sẻ để biết tiến trình của công việc nền và gửi trạng thái trở lại trình duyệt
- Nhân viên dyno hoàn thành việc thực hiện công việc và đánh dấu là hoàn thành trong thành phần được chia sẻ
- Các yêu cầu thăm dò phía trình duyệt về trạng thái công việc từ web dyno
- Thành phần truy vấn dyno web được chia sẻ để biết tiến trình của công việc nền và gửi lại trạng thái đã hoàn thành cho trình duyệt
Về cách triển khai thực tế, tôi không quá quen thuộc với các thư viện tốt nhất trong Node.js, nhưng các thành phần gắn kết quá trình này với nhau có sẵn trên Heroku dưới dạng tiện ích bổ sung.
Hàng đợi:AMQP là một giao thức hàng đợi được hỗ trợ tốt và tiện ích bổ sung CloudAMQP có thể đóng vai trò là hàng đợi thông báo giữa web của bạn và công nhân dynos.
Trạng thái được chia sẻ:Bạn có thể sử dụng một trong các tiện ích bổ sung của Postgres để chia sẻ trạng thái của công việc đang được xử lý hoặc thứ gì đó hiệu quả hơn như Memcache hoặc Redis.
Vì vậy, tóm lại, bạn phải sử dụng một thành phần bổ trợ trung gian để giao tiếp giữa các dynos trên Heroku. Mặc dù cách tiếp cận này liên quan đến kỹ thuật nhiều hơn một chút, nhưng kết quả là một kiến trúc được phân tách đúng cách và có thể mở rộng.