Сервис для обработки поставленных в очередь длительных процессов - с чего начать? - PullRequest
1 голос
/ 05 сентября 2010

Каков наилучший способ создания службы для обработки длительных процессов в очереди?Например, это то, что мы пытаемся сделать

  1. Пользователь загружает 401 тыс. Данных в Интернет
  2. Данные поступают в очередь обработки (таблица базы данных)
  3. 401 тыс.обрабатывается (может занять пару минут на клиента)
  4. Пользователь по электронной почте информируется о том, что 401k был принят

Мы, безусловно, могли бы написать сервис для обработки этого, но что еслислужба не работает?Как кто-то будет уведомлен?Что делать, если есть исключение?Кроме того, должен ли этот сервис обрабатывать другие процессы, не инициированные пользователем (например, отправка электронной почты и т. Д.).

У нас есть команда опытных разработчиков .NET, но весь наш опыт связан с веб-приложениями и клиентскими приложениями или консольными приложениями, запускаемыми планировщиком задач, поэтому любое направление, которое вы можете предоставить, будет высоко оценено.

Ответы [ 2 ]

1 голос
/ 05 сентября 2010

Рассмотрите возможность использования MSMQ (System.Messaging) для этой задачи.Возможно, такой поток:

  • Пользователь загружает данные на веб-сайт.
  • данные записываются в MSMQ.
  • с интервалом n Служба Windows просматривает / читает из очереди следующее ожидающее сообщение.
  • работа выполняется службой, данные записываются в БД и отправляют другое сообщение в другую очередь для уведомления клиента.
  • другой сервис заглядывает / читает из 2-й очереди.Посылает электронное письмо / уведомление клиенту по мере необходимости.Предположим, что эта вторая очередь необходима для обработки сбоев SMTP и т. Д., И ею можно управлять независимо от первой очереди.

Ваша другая проблема, связанная с потенциальными сбоями, может быть еще одной службой или, возможно, опросом.механизм на вашем сайте.Прочтите в БД дату и время последнего обработанного сообщения.Прочитайте количество пунктов «ожидания».Если цифры не являются удовлетворительными, отправьте электронное письмо администраторам / клиентам / и т. Д.при необходимости.

Использование MSMQ означает, что вы можете использовать pull-систему, и вам не придется загружать базу данных и сеть, опрашивая каждые n против базы данных.Все отправленные сообщения являются транзакционными, поэтому вам не придется беспокоиться о потерянных / unAck'd сообщениях.

@ Джесс : Вы поняли, что пытаетесь покрыть базы.Правильная очередь поможет в том, что она не забивает вашу базу данных запросами.Масштаб вашего приложения / проекта / клиентов будет определять, является ли это проблемой.В самом деле, вы могли бы бросить все это в один файл .aspx в Page_Load, но вы точно знаете это лучше.

Re: overkill.Я «прочитал» в вопросе, что были некоторые опасения по поводу простоев и как такое приложение могло бы справиться с этим.Веб-служба, из коробки, не:

  • хорошо обрабатывает сбои БД, поскольку она использует БД для сохранения результатов своей работы.Это «ловец», «работник» и «результат» - все в одном кадре.Это действительно относится к DMZ?Примечание. Элемент 1: «Интернет», а не интрасеть.

  • масштабируется без добавления дополнительных веб + рабочих узлов.

Это предлагаемое решение включает в себя:

  • MSMQ имеет собственную реализацию хранилища, поэтому он не зависит от базы данных вашего приложения для организации очередей и порядка-Доставка.Он является частью Windows и работает как служба. Если MSMQ не работает, значит, Windows не работает или безопасность настроена неправильно.

  • асинхронная обработка.Ваш веб-уровень может просто «поймать» запрос и «поставить» в очередь.Вот и все.Нет раскручивания потоков, не зависит от баз данных приложений.Он может вернуться к работе по получению запросов от других пользователей.Пользователям не придется «чувствовать» отставание от напряженного рабочего дня.

  • масштабируемость.Вы можете развернуть службу Windows на 1+ компьютерах для работы.

  • разделение работы: обработка 401 КБ, отправка электронной почты, обработка запросов + аутентификация - все в отдельных модулях.

  • безопасность - неясно на 100%, в интранете или в Интернете.Если вы подключены к Интернету, подумайте, как вы хотите отправлять сообщения из DMZ во внутреннее приложение.Можете ли вы оправдать наличие доступа на чтение и запись к базе данных вашего приложения из открытого Интернета?Рассмотрим какой-нибудь фасад.Очередь обеспечивает это.

0 голосов
/ 05 сентября 2010

Если ваш опыт работы в веб-приложениях, сделайте это в веб-приложении. Вы можете выполнять обработку в контексте веб-службы, а не в ее собственной.

редактировать

Очевидно, я не был достаточно ясен. IIS обслуживает ASP.NET и статический контент, но это также идеальное место для размещения потока опроса, который обрабатывает задания в базе данных. Я называю это идеальным, потому что он может обновлять статические переменные, которые могут отображаться на внутренней веб-странице, и он может извлечь выгоду из всей системы ведения журналов, сброса и другой инфраструктуры, предоставляемой IIS. Это позволяет избежать всей сложности создания отдельной службы только для запуска одного потока, а затем приходится иметь дело со стоимостью этого решения.

Я делал это несколько раз, с хорошими результатами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...