9

Chúng tôi đã di chuyển apis của chúng tôi từ python sang nút. Chúng tôi đã sử dụng hàng đợi công việc với apis động cơ ứng dụng Python của chúng tôi. Với node.js hiện được hỗ trợ trên công cụ ứng dụng, bạn có đề xuất chúng tôi sử dụng hàng đợi công việc hoặc đám mây/phụ cho công việc không? Ưu điểm/khuyết điểm của mỗi loại bao gồm độ tin cậy, tính di động, v.v.với node.js trên công cụ ứng dụng, tốt hơn là nên sử dụng hàng đợi công việc hoặc pub/sub

Trả lời

10

Hàng đợi công việc và Pub/Sub có các mô hình nhắn tin khác nhau và do đó rất hữu ích cho nhiều thứ khác nhau. Trong khi Pub/Sub sử dụng mô hình nhà xuất bản-người đăng ký, Hàng đợi nhiệm vụ thu thập và phân phối nhiệm vụ cho người lao động.

Sử dụng Pub/Sub để phân phối tác vụ sẽ không tự nhiên như sử dụng hàng đợi công việc. Tất cả người đăng ký vào một chủ đề Pub/Sub xem tất cả các tin nhắn, trong khi trong hàng đợi nhiệm vụ, một tin nhắn chỉ được một người nhận tiêu thụ. Mặt khác, hàng đợi công việc không được thiết kế với mục đích phát sóng tin nhắn.

Hiện tại, hàng đợi công việc hoạt động tốt nhất trên App Engine. Mặc dù có một API REST của hàng đợi nhiệm vụ thử nghiệm, hàng đợi công việc có nguồn gốc và hoạt động tốt nhất trên App Engine. Pub/Sub có thể được sử dụng từ bất cứ đâu. Trong khi nhiệm vụ xếp hàng nhiệm vụ được phân phối tự động cho các cá thể App Engine, bạn cần phải thực hiện thiết lập bổ sung để sử dụng Pub/Sub cho giao tiếp trong ứng dụng.

Hàng đợi công việc cũng cung cấp các tính năng đặc biệt, chẳng hạn như trì hoãn thư.

Edit:

Đáng tiếc là nó trông giống như đẩy hàng đợi công việc vẫn chưa sẵn sàng trên Engine runtime Node.js App.

Giải pháp Pub/Sub mà Kamal chỉ ra bên dưới là một mẹo hay để mô phỏng cân bằng tải dựa trên kéo. Sử dụng Pub/Sub có lẽ là cách phù hợp nếu bạn chọn OK với chế độ kéo, mặc dù tôi muốn làm rõ rằng API nhiệm vụ AE có sẵn (https://github.com/google/google-api-nodejs-client/tree/master/apis) cho node.js khi sử dụng kéo.

Một điều cần cân nhắc xem bạn có sử dụng tính năng kéo hoặc đẩy là chính sách thử lại hơi khác. Các mục xếp hàng nhiệm vụ có thể được cấu hình để thử lại vô thời hạn, trong khi tôi nghĩ Pub/Sub sẽ ngừng cố gửi tin nhắn nếu nó không được xác nhận sau 7 ngày.

điều khác cần xem xét nếu bạn quyết định sử dụng chế độ push PubSub là:

  • Một số tính năng của hàng đợi nhiệm vụ AE như trì hoãn các thông điệp hoặc configuromg nhắn với retry hoặc thời gian cụ thể để sống cài đặt này không có sẵn trong PubSub
  • Bạn sẽ cần phải biết điểm cuối cho các trường hợp bạn muốn tiêu thụ nhiệm vụ từ hàng đợi.

Trên ghi chú riêng (để trả lời câu trả lời đầu tiên bên dưới), có vẻ như tích hợp memcache được hỗ trợ. Trang này có trang tài liệu ở số https://cloud.google.com/appengine/docs/flexible/nodejs/caching-application-data.

+0

Vậy, node.js đang chạy trên App Engine có dễ dàng truy cập và làm việc liên tục với Hàng đợi nhiệm vụ (đẩy, không kéo) không? Ứng dụng mẫu từ Google cho các tác vụ của công nhân với node.js sử dụng Pub/Sub, đó là lý do tôi hỏi. Tôi chưa thấy tài liệu Google trên hàng đợi nhiệm vụ node.js hoặc tích hợp memcache. – philipfc

+0

Có thể tải tin nhắn số dư trên nhiều người đăng ký. Tất cả _subscriptions_ trên một chủ đề Pub/Sub xem tất cả các tin nhắn. Tuy nhiên, nhiều người đăng ký có thể lấy tin nhắn từ cùng một thuê bao, thông thường sẽ gửi mỗi tin nhắn đến một trong số họ (mặc dù lưu ý rằng Pub/Sub đã đảm bảo giao hàng _at-lease-once_). –

+0

Đã chỉnh sửa phản hồi ban đầu của tôi để bao gồm thông tin bổ sung. –

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