Часть приложения, я продолжаю работать, является swf, который показывает тест приблизительно с 80 вопросами. Каждый вопрос сохраняется в SQL Server через WebORB и ASP.NET.
Если кандидат заканчивает тест, сессия должна быть проверена. Проблема состоит в том, что иногда 350 кандидатов заканчивают свой тест одновременно, и ЦП на веб-сервере и SQL Server взрывается (350 проверок одновременно).
Теперь, как я должен реализовать организацию очередей здесь? В базе данных существует таблица, которая имеет запись для каждой сессии. Один столбец содержит состояние. 1 закончен, 2 проверен.
Я мог реализовать организацию очередей двумя способами (поскольку я вижу его, возможно, у Вас есть другие суждения):
Теперь:
Мне, с помощью таблицы и ища записи с состоянием 1 кажется самым легким путем.
Подход MSMQ отделяет ваше веб-приложение от службы логики проверки и базы данных.
Это дает много преимуществ, вот некоторые из них:
Будет легче справляться с ситуациями, когда логика проверки может обрабатывать 5 сессий в секунду, а получает сразу 300. В противном случае вам пришлось бы обрабатывать таймауты, повторные попытки и т.д.
Было бы проще проводить техническое обслуживание службы валидации, не прерывая работу остальной части приложения. Когда служба проверки будет остановлена, сообщения будут стоять в очереди в MSMQ, и будут обрабатываться снова, как только она будет восстановлена.
То же самое, что описано выше, относится и к обслуживанию базы данных.
Если у вас нет опыта использования MSMQ и не настроена инфраструктура, я бы посоветовал этого не делать. Конечно, это может быть «правильный» способ постановки в очередь на платформе Microsoft, но он не очень прост и требует некоторого обучения.
То же самое касается создания службы Windows; не делайте этого, если вы не знакомы с этим. Для таких простых случаев, как этот, я бы сказал, что боль больше, чем награда.
Самым простым решением, вероятно, было бы использование таблицы и запуск процесса в фоновом потоке, который вы запускаете в global.asax. Вероятно, вы также захотите создать страницу администратора, которая может сообщать некоторую информацию о состоянии процесса (количество ожидающих заданий и т. Д.) И, возможно, кнопку для перезапуска процесса, если он по какой-то причине не работает.
Что проверяет
? Перед тем, как приступить к работе над стратегией организации очередей, я бы попытался сделать проверку
как можно быстрее, включая настройку на основе, если это еще не так.