2010-09-06 31 views
9

Giả sử tôi có 2 máy chủ.Cách tốt nhất để tạo REST API cho các tác vụ lâu dài là gì?

Đầu tiên là dịch vụ cung cấp một số tính toán, có thể kéo dài thời gian (từ vài phút đến vài giờ).

Máy chủ thứ hai sẽ sử dụng dịch vụ này để có một số dữ liệu được tính toán.

Tôi đang cố thiết kế một API REST cho máy chủ đầu tiên và cho đến nay rất tốt. Nhưng tôi muốn nghe một số ý kiến ​​về cách mô hình thông báo khi nhiệm vụ lâu dài kết thúc.

tôi coi 2 cách tiếp cận cho đến nay:

  1. Polling - máy chủ thứ hai sẽ hỏi tất cả bây giờ và sau đó về kết quả.
  2. Gọi lại - Máy chủ thứ hai sẽ thiết lập một uri cho người đầu tiên gọi sau khi hoàn thành. Nhưng điều này có mùi một chút trong REST API.

Bạn nghĩ sao?

Trả lời

4

Ngoài những gì tôi đã already answered trong this similar question, tôi khuyên bạn nên sử dụng Giao thức xuất bản Atom cho thông báo (bạn có thể xuất bản lên máy chủ thứ hai của mình).

+0

Có sai lầm khi sử dụng phương pháp gọi lại không? Tôi có một vấn đề rất giống nhau (ngoại trừ dịch vụ của tôi có thể mất từ ​​2 đến 500 giây để trả lời) và sử dụng gọi lại đơn giản hơn nhiều so với việc bỏ phiếu – Johan

+0

Giải thích ngắn gọn và liên kết đến giải thích về Giao thức xuất bản Atom sẽ cải thiện rất nhiều câu trả lời này . – Geerten

1

Nếu bạn sử dụng Python, bạn có thể tận dụng lợi thế của RabbitMQ và Celery để thực hiện công việc. Cần tây cho phép bạn tạo một mục trong một hàng đợi và sau đó tạm dừng thực hiện bất cứ điều gì bạn đang chạy nó (ví dụ: Django) sao cho bạn có thể tiêu thụ đầu ra của bộ xử lý hàng đợi khi nó có sẵn. Không cần bỏ phiếu hoặc gọi lại.

+0

Trừ khi bạn hiểu cần tây (nghĩa là bạn là tác giả) Tôi chỉ sử dụng Rabbit MQ + pika trực tiếp và tiết kiệm cho mình một cơn đau (biến mất ngoại lệ, chuỗi đơn giản không hoạt động, các vấn đề tương thích kỳ lạ với gevent, v.v.). Bạn có thể làm cho nó hoạt động nhưng nếu bạn đang làm bất cứ điều gì cần tây phức tạp từ xa là ẩn bạn khỏi vô số các chi tiết thực hiện công việc thực tế mà bạn có thể cần. – pip

7

Trong trường hợp của bạn, tôi sẽ chọn bỏ phiếu. Khi máy chủ thứ hai thực hiện yêu cầu ban đầu để tạo công việc trên máy chủ đầu tiên, máy chủ sẽ nhận được phản hồi có url của trang trạng thái cuối cùng. Các máy chủ thứ hai sau đó thăm dò rằng url mỗi 5-15 phút để kiểm tra tình trạng của công việc. Nếu máy chủ đầu tiên làm cho url đó là nguồn cấp dữ liệu RSS hoặc Atom, thì người dùng cũng có thể trỏ trình đọc RSS của họ vào cùng một url và tìm ra chính mình nếu công việc được thực hiện. Đó là một chiến thắng thực sự khi cả người và máy móc có thể lấy thông tin từ một nguồn duy nhất.

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