Thực tiễn tốt nhất khi quản lý các công việc không đồng bộ chạy dài


12

Tôi đang trong giai đoạn thiết kế của một dự án nơi người dùng cuối sẽ gửi yêu cầu từ một trang web sẽ sinh ra một công việc được xử lý không đồng bộ chạy dài. Có một "thực hành tốt nhất" cho vấn đề này? Là dịch vụ web và môi giới dịch vụ là một cách tốt để đi? Hàng đợi nhắn tin của Microsoft có áp dụng ở đây không?


Nếu làm điều này trên web và nếu mất một thời gian rất dài, thì bạn có thể gửi tin nhắn văn bản hoặc email cho người dùng khi hoàn thành.
Công việc

Câu trả lời:


6

Tôi không biết về "thực hành tốt nhất". Tôi biết những lỗi phổ biến nhất.

Sai lầm đầu tiên: Bản thân DOS

Bạn sử dụng webhandler để xử lý công việc chạy dài. Điều này có thể xấu hoặc cực kỳ xấu tùy thuộc vào tỷ lệ phần trăm lượt truy cập của bạn trở thành công việc chạy dài, thời gian họ chạy và lưu lượng truy cập duy trì bạn nhận được.

Bạn muốn đảm bảo rằng bạn sẽ không nhận được hơn 1 công việc chạy dài trong khoảng thời gian để công việc chạy dài đó hoàn thành. Nếu bạn tự làm DOS. Nó cũng sẽ trở nên tồi tệ hơn khi bạn có càng nhiều lưu lượng truy cập giả định tỷ lệ phần trăm và thời gian không đổi. Đó là một trong những vấn đề tự đặt ra giới hạn tăng trưởng giao thông.

Sai lầm thứ hai: Sinh sản từ webhandler

Sinh ra một quy trình từ trình xử lý web để xử lý một quy trình chạy dài có thể khó khăn và do đó cũng dễ bị lỗi.

  • Bạn phải tách ra khỏi cha mẹ một cách chính xác nếu không webhandler chờ đợi đứa trẻ hoàn thành.
  • Khi bạn rẽ nhánh một đứa trẻ trong unix, nó thừa hưởng tay cầm mở từ cha mẹ. Chúng sẽ tự động bị đóng trừ khi chúng bị ghi đè. Điều này bao gồm những thứ như kết nối cơ sở dữ liệu, tập tin, kết nối mạng mở khác. Tất cả được đóng lại khi quá trình con hoàn thành.

Tùy chọn

Tôi thường sử dụng at(1)để phân tách sạch khỏi webhandler mà không cần gạt.

Bạn cũng có thể sử dụng một triển khai bỏ phiếu với cron.

Bạn có thể giao tiếp với một quy trình máy chủ khác xử lý việc xử lý. Giao tiếp đó có thể được thực hiện với sockets, pipeshoặc trừu tượng hóa mức cao hơn như cuộc gọi REST http hoặc định tuyến tin nhắn hàng đợi.


2

Tôi cho rằng bạn đang nói về hơn một vài phút.

Nếu chỉ vài phút, bạn có thể khởi chạy một luồng công nhân trên nền và hiển thị một số tiến trình trên giao diện người dùng. Rất nhiều ứng dụng web sử dụng phương pháp đó.

Nếu quá 5 phút, bạn có thể muốn ủy thác nhiệm vụ cho một dịch vụ chuyên dụng. Một ví dụ là các báo cáo được tạo bởi Google Analytics.

Hàng đợi Microsoft Messaging có thể được sử dụng để truyền thông tin từ hệ thống sang hệ thống khác hoặc thành phần khác.


Làm thế nào để các ngôn ngữ như PHP thực hiện điều này? Tôi biết một vài ứng dụng web làm điều này nhưng được viết bằng PHP
TheLQ

Tôi không phải là chuyên gia PHP, nhưng tôi đoán thay vì một chủ đề được khởi chạy bởi cùng một trang, một cái khác được gọi. Đây là những gì thực sự xảy ra với AJAX.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.