Найкращі практики управління довготривалими асинхронними завданнями


12

Я перебуваю на стадії розробки проекту, де кінцевий користувач подасть запит із веб-сторінки, яка породить тривале асинхронне оброблене завдання. Чи існує "найкраща практика" для цієї проблеми? Чи хороший шлях для веб-служб та сервісних брокерів? Чи застосовується тут черга обміну повідомленнями Microsoft?


Якщо це робиться в Інтернеті, і якщо це займає дуже багато часу, ви можете надіслати текстове повідомлення або електронний лист користувачеві після його завершення.
Робота

Відповіді:


6

Я не знаю про "кращу практику". Я знаю найпоширеніші помилки.

Перша помилка: DOS Yourself

Ви використовуєте веб-обробник для обробки тривалої роботи. Це може бути погано або вкрай погано залежно від вашого відсотка звернень, які стають тривалими робочими завданнями, від того, як довго вони працюють і скільки стійкого трафіку ви отримуєте.

Ви хочете переконатися, що ви не отримаєте більше ніж одну тривалу роботу протягом періоду часу, необхідного для завершення цієї тривалої роботи. Якщо ви самі робите DOS. Це також буде погіршуватися тим більше трафіку, який ви отримуєте, припускаючи відсоток і час залишається послідовним. Це одна з тих проблем, яка самостійно накладає обмеження на зростання трафіку.

Друга помилка: Нерест у веб-обробника

Нерест процесу з веб-обробника для обробки тривалого запущеного процесу може бути складним, і як результат також схильним до помилок.

  • Ви повинні правильно відмежуватися від батьків, інакше веб-обробник чекає, коли дитина завершиться.
  • Коли ви роздвоюєте дитину в unix, вона успадковує відкриті ручки від батька. Вони автоматично закриються, якщо їх не перезаписати. Сюди входять такі речі, як підключення до бази даних, файлові файли та інші відкриті мережеві з'єднання. Усі вони закриваються, коли процес дитини закінчується.

Параметри

Зазвичай я використовую at(1)для чистого відмежування від веб-обробника без розгортання.

Ви також можете використовувати реалізацію опитування за допомогою cron.

Ви можете спілкуватися з іншим сервером, який обробляє обробку. Це повідомлення може бути зроблено з sockets, pipesабо більш високим рівнем абстракцій , як HTTP - виклик REST або маршрутизації повідомлення черзі.


2

Я припускаю, що ви говорите більше декількох хвилин.

Якщо це кілька хвилин, ви можете запустити робочу нитку на задньому плані та відобразити деякий прогрес у інтерфейсі користувача. Багато методів веб-додатків використовують цей метод.

Якщо це більше ніж, скажімо, 5 хвилин, ви можете делегувати завдання спеціальній службі. Одним із прикладів є звіти, створені Google Analytics.

Черга Microsoft Messaging може використовуватися для передачі інформації з системи в іншу або компонента в іншу.


Як такі мови, як PHP, досягають цього? Я знаю кілька веб-додатків, які роблять це, але написані на PHP
TheLQ

Я не фахівець з PHP, але, мабуть, замість теми, запущеної тією ж сторінкою, називається інша. Це те, що насправді відбувається з AJAX.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.