Организация очередей использования Базы данных или MSMQ?

Часть приложения, я продолжаю работать, является swf, который показывает тест приблизительно с 80 вопросами. Каждый вопрос сохраняется в SQL Server через WebORB и ASP.NET.

Если кандидат заканчивает тест, сессия должна быть проверена. Проблема состоит в том, что иногда 350 кандидатов заканчивают свой тест одновременно, и ЦП на веб-сервере и SQL Server взрывается (350 проверок одновременно).

Теперь, как я должен реализовать организацию очередей здесь? В базе данных существует таблица, которая имеет запись для каждой сессии. Один столбец содержит состояние. 1 закончен, 2 проверен.

Я мог реализовать организацию очередей двумя способами (поскольку я вижу его, возможно, у Вас есть другие суждения):

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

Теперь:

  • Каков был бы лучший подход?
  • Где Вы запускаете процесс, который проверит сессии? В Вашем global.asax (application_start)? Как сервис окон? Как exe на корне веб-сайта, который запускается в application_start?

Мне, с помощью таблицы и ища записи с состоянием 1 кажется самым легким путем.

5
задан Daniel Vassallo 23 March 2010 в 21:57
поделиться

3 ответа

Подход MSMQ отделяет ваше веб-приложение от службы логики проверки и базы данных.

Это дает много преимуществ, вот некоторые из них:

  • Будет легче справляться с ситуациями, когда логика проверки может обрабатывать 5 сессий в секунду, а получает сразу 300. В противном случае вам пришлось бы обрабатывать таймауты, повторные попытки и т.д.

  • Было бы проще проводить техническое обслуживание службы валидации, не прерывая работу остальной части приложения. Когда служба проверки будет остановлена, сообщения будут стоять в очереди в MSMQ, и будут обрабатываться снова, как только она будет восстановлена.

  • То же самое, что описано выше, относится и к обслуживанию базы данных.

4
ответ дан 14 December 2019 в 04:35
поделиться

Если у вас нет опыта использования MSMQ и не настроена инфраструктура, я бы посоветовал этого не делать. Конечно, это может быть «правильный» способ постановки в очередь на платформе Microsoft, но он не очень прост и требует некоторого обучения.

То же самое касается создания службы Windows; не делайте этого, если вы не знакомы с этим. Для таких простых случаев, как этот, я бы сказал, что боль больше, чем награда.

Самым простым решением, вероятно, было бы использование таблицы и запуск процесса в фоновом потоке, который вы запускаете в global.asax. Вероятно, вы также захотите создать страницу администратора, которая может сообщать некоторую информацию о состоянии процесса (количество ожидающих заданий и т. Д.) И, возможно, кнопку для перезапуска процесса, если он по какой-то причине не работает.

3
ответ дан 14 December 2019 в 04:35
поделиться

Что проверяет ? Перед тем, как приступить к работе над стратегией организации очередей, я бы попытался сделать проверку как можно быстрее, включая настройку на основе, если это еще не так.

1
ответ дан 14 December 2019 в 04:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: