Отказоустойчивость программного обеспечения - Software fault tolerance

Отказоустойчивость программного обеспечения это способность компьютерное программное обеспечение продолжать нормальную работу, несмотря на наличие системы или аппаратное обеспечение неисправности. Отказоустойчивое программное обеспечение способен удовлетворить требования, несмотря на сбои.[1][2]

Введение

Единственное постоянное - это изменение. Это, безусловно, относится к программным системам больше, чем к любому явлению,[3] не все программы меняются одинаково, поэтому Отказоустойчивость методы предназначены для преодоления ошибок выполнения путем изменения значений переменных для создания приемлемого состояние программы.[4] Необходимость контролировать сбои в программном обеспечении - одна из самых растущих проблем, с которыми сегодня сталкиваются отрасли программного обеспечения. Отказоустойчивость должна быть ключевым фактором на ранней стадии разработка программного обеспечения.

Существуют различные механизмы отказоустойчивости программного обеспечения, среди которых:

  • Блоки восстановления
  • N-версия программного обеспечения
  • Программное обеспечение для самопроверки

Сбой операционной системы

Компьютерные приложения делают вызов с помощью интерфейс прикладного программирования (API) для доступа к общим ресурсам, таким как клавиатура, мышь, экран, диск, сеть и принтер. Они могут потерпеть неудачу по двум причинам.

  • Заблокированные вызовы
  • Неисправности

Заблокированные звонки

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

Например, вызов TCP блокируется до тех пор, пока не станет доступен ответ с удаленного сервера. Это происходит каждый раз, когда вы выполняете действие в веб-браузере. Интенсивные вычисления вызывают длительные задержки с тем же эффектом, что и заблокированный вызов API.

Есть два метода обработки блокировки.

  • Потоки
  • Таймеры

Многопоточность допускает отдельную последовательность выполнения для каждого вызова API, который может блокироваться. Это может предотвратить остановку всего приложения во время ожидания ресурса. Это имеет то преимущество, что никакая информация о состоянии вызова API не теряется, пока выполняются другие действия.

Потоковые языки включают следующее.

АдаАфниксC ++C #ШЕЛКЭйфельErlang
ЯваЛиспПурпурныйМодула 3Napier 88УнцияПресто
pSatherPerl 5.8.7+PHPPythonрРубинБолтовня
Tcl / TkV

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

К непоточным языкам относятся следующие.

БашJavascriptSQLVisual Basic

Поврежденное состояние произойдет с таймерами. Этого можно избежать следующим образом.

Неисправности

Неисправность вызвана сигналы в POSIX-совместимых системах, и эти сигналы исходят из вызовов API, из операционной системы и из других приложений.

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

Обработчик - это функция, которая выполняется по запросу, когда приложение получает сигнал. Это называется Обработка исключений.

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

Функции-обработчики бывают двух видов.

  • Инициализировано
  • В соответствии

Инициализированные функции обработчика сопоставляются с каждым сигналом при запуске программного обеспечения. Это вызывает запуск функции обработчика при поступлении соответствующего сигнала. Этот метод можно использовать с таймерами для имитации потоковой передачи.

Встроенные функции обработчика связаны с вызовом с использованием специального синтаксиса. Наиболее известны следующие из них, используемые в C ++ и Java.

пытаться
{
API_call ();
}
ловить
{
signal_handler_code;
}

Аппаратный сбой

Аппаратная отказоустойчивость программного обеспечения требует следующего.

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

  • Автоматическое резервное копирование по расписанию с помощью программного обеспечения
  • Ручное резервное копирование по регулярному расписанию
  • Восстановление информации

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

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

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


Смотрите также

Рекомендации

  1. ^ «Отказоустойчивость программного обеспечения». Университет Карнеги Меллон.
  2. ^ «Портативные и отказоустойчивые программные системы» (PDF). Массачусетский Институт Технологий.
  3. ^ Экхардт, Д. Э., "Фундаментальные различия в надежности N-модульного избыточного программирования и N-версии программирования", Журнал систем и программного обеспечения, 8, 1988, стр. 313–318.
  4. ^ Рэй Жигетт и Джонетт Хассел, «На пути к ресурсному методу обеспечения отказоустойчивости программного обеспечения», Юго-восточная региональная конференция ACM, апрель 1999 г.

дальнейшее чтение