1. Пользователь первый раз открывает сайт, регистрируется.
2. Пользователь входит в свой кабинет (по логину и паролю).
3. Пользователь создает требование на мониторинг (указывает, какое из явлений отслеживать (с указанием аргументов) и по какому графику).
4. Пользователь создает подписку (как его оповещать о наступлении события) и подтверждает ее (на указанный адрес оптавляем код подтверждения).
5. Администратор активирует требование и подписки, устанавливает баланс пользователя в условных единицах.
6. Система мониторинга (Windows Service) с помощью запроса к базе данных получает активные требования, которые нужно исполнить в данный момент и вызывает подпрограммы с теми аргументами, которые указаны в требовании.
7. Подпрограммы проверяют хватает ли средств на счету у пользователя для осуществления требования. Если нет -- деактивируют требование.
8. Подпрограммы делают проверку явления и при необходимости генерируют событие (к примеру, изменение доступности сервера). Технически событие – это запись информации в базу данных (в таблицу Event заносится тип события и аргументы в виде XML) и вызов всех подписчиков (стандартный механизм .Net).
9. Система рассылки (работает в своем потоке) получает список необработанных событий, получает список подписок и производит рассылку. Предварительно проверяется хватает ли средств на счету у пользователя для осуществления оповещения. Если нет -- деактивирует подписку.
Предусмотреть обработку требований в разных потоках (семафором ограничивать количество одновременных потоков до константы 20).