Лучшие практики терпимости отказа и надежности для запланированных задач или сервисов

Я работал над многими приложениями, которые работают как сервис окон или запланированные задачи.

Теперь, я хочу удостовериться, что эти приложения будут отказоустойчивы и надежны. Например; у меня есть сервис, который работает каждый час. если сервис отказывает, в то время как его работа или выполнение, я хотел бы, чтобы приложение работало снова в течение того же периода (существует несколько вещей, связанных с этим включая транзакции обработки данных), для предотвращения потери данных. кроме того, я хотел бы, чтобы программа сообщила об ошибке с деталями. Моя цель состоит в том, чтобы избежать потери данных и не отстающий для того, чтобы запустить программу.

Я создал библиотеку классов, которую пользователь может импортировать в проект. Библиотека, как предполагается, хранит информацию рабочего экземпляра программы, т.е. чтения программы и информацию о записях рабочего интервала, рабочее состояние и т.д. Эти данные хранятся в базе данных.

Мне было любопытно, если существуют некоторые лучшие практики для создания запланированных задач / сервисы окон отказоустойчивый и надежный.

Редактирование: Я говорю о независимых задачах или сервисах который на различных серверах. и моя цель состоит в том, чтобы удостовериться, что сервис будет продолжать управлять, сообщать о любых отказах и восстанавливаться от них.

12
задан DarthVader 27 May 2010 в 17:45
поделиться

2 ответа

Мне интересно, что говорят другие люди, но я дам вам несколько моментов, на которые наткнулся:

  1. Создайте обработчик событий для необработанных исключений. Таким образом, вы можете очистить ресурсы, записать в файл журнала, отправить электронное письмо администратору или сделать что-нибудь, что вам нужно, вместо того, чтобы сбой.

    AppDomain.CurrentDomain.UnhandledException + = new UnhandledExceptionEventHandler (AppUnhandledExceptionEventHandler);

  2. Переопределите любые обработчики событий сервисной базы, которые вам нужны в основной части вашего приложения. OnStart и OnStop очень важны, но есть много других, которые вы можете использовать. http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase%28v=VS.71%29.aspx

  3. Остерегайтесь таймеров. Таймеры форм Windows не будут работать правильно в службе. Пользователь System.Threading.Timers или System.Timers.Timer. Лучший таймер для использования в службе Windows

  4. Если вы обновляетесь в потоке, убедитесь, что вы используете блокировку () или монитор в ключевых разделах, чтобы убедиться, что все является потокобезопасным.

  5. Будьте осторожны, чтобы не использовать что-либо специфическое для пользователя, поскольку служба работает без определенного пользовательского контекста. Я заметил, что некоторые из моих строк подключения SQL больше не работают для авторизации Windows и т. Д. Также я слышал, что у людей возникают проблемы с подключенными дисками.

  6. Никогда не создавайте услуги с пользовательским интерфейсом. Фактически, для Vista и 7 это практически невозможно сделать. Это не должно требовать взаимодействия с пользователем, максимум, что вы можете сделать, - это отправить сообщение с помощью функции WIN32. MSDN утверждает, что создание интерактивных сервисов - плохая практика. http://msdn.microsoft.com/en-us/library/ms683502%28VS.85%29.aspx

  7. В целях отладки неплохо запустить службу как консольное приложение, пока вы заставить его делать то, что вы хотите. Замечательный учебник: http://mycomponent.blogspot.com/2009/04/create-debug-install-windows-service-in.html

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

7
ответ дан 2 December 2019 в 23:06
поделиться

Что-то очевидное - не запускайте все задачи одновременно. Старайтесь планировать их так, чтобы только одна задача использовала какой-то дорогой ресурс в любое время (если это возможно). Например, если вам нужно рассылать информационные бюллетени и некоторые специфические уведомления, запланируйте их на разное время. Если две задачи должны очистить что-то в базе данных, пусть одна выполняется после другой.

Также запланируйте выполнение задач в нерабочее время - очевидно, ночью.

0
ответ дан 2 December 2019 в 23:06
поделиться
Другие вопросы по тегам:

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