2009-01-14 40 views
7

Cách tốt để kết nối mô hình yêu cầu/phản hồi http đồng bộ với mô hình dựa trên hàng đợi không đồng bộ là gì?Kết nối mô hình yêu cầu/phản hồi http với hàng đợi không đồng bộ

Khi yêu cầu HTTP của người dùng đến nó tạo ra yêu cầu công việc đi vào hàng đợi (beanstalkd trong trường hợp này). Một trong những công nhân nhận yêu cầu, thực hiện công việc và chuẩn bị phản hồi.

Mô hình xếp hàng không phải là yêu cầu/phản hồi - chỉ có các yêu cầu, không phải trả lời. Vì vậy, câu hỏi đặt ra là, cách tốt nhất để chúng ta nhận được phản hồi trở lại thế giới của HTTP và quay trở lại với người dùng?

Ý tưởng:

  1. Beanstalkd hỗ trợ chủ đề trọng lượng nhẹ hoặc hàng đợi (họ gọi chúng là ống). Chúng tôi có thể tạo ra một ống cho mỗi yêu cầu, có nhân viên tạo ra một thông điệp trên ống đó, và có quá trình http ngồi và chờ đợi trên ống cho phản ứng. Không đặc biệt như thế này vì nó có quá trình apache ngồi xung quanh lấy bộ nhớ.

  2. Có cuộc thăm dò ý kiến ​​khách hàng http cho phản hồi. Yêu cầu HTTP ban đầu của người dùng khởi động công việc trên hàng đợi và trả về ngay lập tức. Các khách hàng (trình duyệt của người dùng) thăm dò định kỳ cho một phản ứng. Trên backend, người lao động đặt phản ứng của nó vào memcached, và chúng tôi kết nối nginx để memcached để bỏ phiếu là trọng lượng nhẹ.

  3. Sử dụng Comet. Tương tự như tùy chọn thứ hai, nhưng với giao tiếp http fancier để tránh bỏ phiếu.

Tôi nghiêng về phía 2 vì thật dễ dàng và cũng biết (tôi chưa sử dụng sao chổi). Tôi đoán có lẽ cũng có một mô hình rõ ràng hơn nhiều mà tôi chưa từng nghĩ tới. Bạn nghĩ sao?

+0

Tôi đang gặp vấn đề tương tự và đang trong quá trình đánh giá các tùy chọn tương tự. Bạn có thể chia sẻ những gì bạn đã chọn, cách nó thực hiện và những ưu và nhược điểm của giải pháp được thực hiện của bạn là gì? Cảm ơn – tropikalista

Trả lời

1

Đây là how to implement request-response efficiently on JMS có thể hữu ích (mặc dù Java/JMS centric). Ý tưởng chung là tạo hàng đợi tạm thời cho mỗi khách hàng/chủ đề, sau đó sử dụng correlationID để tương ứng với các yêu cầu trả lời, v.v.

0

Tôi đang tìm cách triển khai hệ thống Beanstalkd và memcached để chạy một số quy trình theo yêu cầu - trong này trường hợp, tra cứu thông tin khi người dùng đăng nhập (số lượng tin nhắn mà người dùng đã chờ ví dụ). Thông tin được lưu trữ trong Memcached và sau đó đọc lại trang tải tiếp theo.

Không biết nhiều hơn về công việc bạn đang làm, không dễ để nói những gì cần làm hoặc cách thực hiện. Tuy nhiên, tùy chọn # 2 là đơn giản nhất và có thể là tất cả những gì bạn cần - tùy thuộc vào những gì bạn đang đẩy trở lại vào công nhân.

+0

Các nhiệm vụ rất đa dạng và phức tạp - phân tích dữ liệu đến, tạo thành một vector đặc trưng dựa trên dữ liệu, thực hiện đối sánh thuật toán và cuối cùng loại bỏ các kết quả trùng khớp khác nhau từ trình phân loại. – Parand

1

Bỏ phiếu là giải pháp đơn giản; sao chổi là giải pháp hiệu quả hơn. Tôi đã có nó đóng đinh :)

Tôi yêu sao chổi (mặc dù tôi thiên vị, vì tôi đã giúp viết WebSync), nó độc đáo cho phép khách hàng của bạn đăng ký kênh và nhận được thông báo khi quá trình máy chủ của bạn sẵn sàng. Làm việc như một nhà vô địch.

Các vấn đề liên quan