Я разрабатываю сайт asp.net, который нужно ежедневно посещать на нескольких сайтах социальных сетей для получения общих данных о друзьях / последователях. В качестве хостинга я выбрал бизнес-класс arvixe. В будущем, если мы вырастем, я бы хотел перейти на выделенный сервер и запустить службу Windows, однако, поскольку на данный момент это еще не решено, мне нужен еще один надежный способ выполнения запланированных задач. Я знаком с запуском таймера потока из app_code (global.aspx). Однако повторное использование пула приложений вызовет некоторые проблемы с таймером. Я никогда не использовал планирование задач, как кварц, но много читал об этом в stackoverflow. Я искал совета, как достичь своей цели. Одна большая проблема, с которой я сталкиваюсь при использовании любого из методов, заключается в том, что мне нужно, чтобы потоки искателя регулярно спали до часа из-за ограничений на вызовы API. Моей первой мыслью было использовать db для сохранения начала и окончания работы. Когда пул приложений перерабатывается, я удаляю все незавершенные части и запускаю только те части, которые не были запущены в этот день. Что думают здесь эксперты? есть ли хорошие ссылки на образец архитектуры этого типа планирования?
запущенный таймер от global.asax vs quartz.net
Ответы (4)
На самом деле не имеет значения, какой метод вы используете, катитесь ли вы самостоятельно или используете Quartz. Вы находитесь во власти ASP.NET/IIS, потому что именно там вы хотите его разместить.
У вас есть запасной компьютер, который может просто выполнять запланированное задание и загружать данные в размещенную базу данных? Честно говоря, возможно, безопаснее (в зависимости от вашего варианта использования) просто сделать это таким образом, а затем попытаться запустить планировщик в ASP.NET.
В некотором роде поста Брайана;
Найдите запасной компьютер.
Вместо того, чтобы разрешать доступ к БД, пусть он вызовет веб-службу на вашем сайте. Этот сервисный вызов должен быть инициатором процесса, который вы пытаетесь выполнить. Не пытайтесь вводить в него параметры, просто что-то вроде "StartProcess ()" должно работать нормально.
Что касается перехода в спящий режим и его возобновления позже, обратите внимание на Workflow Foundation. . Есть несколько хороших встроенных функций для сохранения состояния.
Не открывайте свою БД внешнему миру, вместо этого откройте эту страницу или веб-службу и оберните вокруг нее некоторую безопасность. WCF имеет для этого несколько хороших встроенных функций безопасности.
Самое приятное то, что когда вы решите уйти, вы можете сохранить свою веб-службу и таким же образом вызвать ее из службы Windows.
Пока вы используете постоянное хранилище заданий (например, базу данных), и вы пишете и планируете свои задания, чтобы они могли справиться с такими вещами, как убийство на полпути, повторное использование IIS вашего процесса не так уж и важно.
Более серьезная проблема заключается в том, что IIS отключает ваш сайт, если на нем нет трафика. Если вы можете поддерживать свой сайт в рабочем состоянии, просто убедитесь, что вы правильно настроили политику пропусков зажигания и что ваши задания хранят любые данные о состоянии, необходимые для продолжения с того места, где они остановились, вы сможете это осуществить.
Если вы не зависят от языка и не возражаете написать свой "скрипт активации задания" на вашем любимом языке, поддерживаемом Linux ...
Одно из решений, которое мне очень понравилось:
- Получение относительно дешевого, стабильного Linux-хостинга (от известных компаний),
- Создание службы WCF на вашей платформе .Net, которая будет содержать логику, которую вы хотите запускать регулярно (RESTfully, SOAP или XMLRPC ... в зависимости от того, что вам подходит),
- Обработка вызовов через размещенные в Linux задания cron, написанные на выбранном вами языке (я использую PHP) .
Как я уже сказал, работает очень хорошо. Нет расходов на VPS, настраивается и активируется извне. У меня есть одно центральное место, где активируются мои рабочие места, с временем безотказной работы от 99 до 100% (никогда не было сбоев).