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

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

Чтобы сделать систему более отказоустойчивой, необходимо объединить следующие шаблоны проектирования : повтор, откат, тайм-аут, автоматический выключатель и шаблон переборки. [3] [4]

Чтобы сделать вашу систему более отказоустойчивой, вам следует измерить 99-й процентиль задержки и держать оставшийся 1% (так называемые хвостовые задержки) под контролем с помощью механизмов самовосстановления. [5]

Введение

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

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

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

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

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

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

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

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

Для обработки блокировок используются два метода.

  • Темы
  • Таймеры

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

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

АдаАфниксС++С#ШЕЛКЭйфелеваЭрланг
ЯваЛисппурпурныйМодуль 3Напье 88ОзВуаля
pSatherPerl 5.8.7+PHPПитонРРубинSmalltalk
Ткл/ТкВЮниконБалерина

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

К языкам, не поддерживающим потоковое программирования, относятся следующие.

БашЯваскриптSQLВизуальный базовый

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

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

Ошибки вызываются сигналами в системах, совместимых с POSIX, и эти сигналы исходят от вызовов API, от операционной системы и от других приложений.

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

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

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

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

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

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

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

пытаться
{
API_вызов();
}
ловить
{
код_обработчика_сигнала;
}

Сбой оборудования

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

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

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

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

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

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


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

Ссылки

  1. ^ «Устойчивость программного обеспечения к отказам». Университет Карнеги-Меллона.
  2. ^ "Переносимые и отказоустойчивые программные системы" (PDF) . Массачусетский технологический институт.
  3. ^ Kubernetes Native Microservices с Quarkus и MicroProfile . Мэннинг. 2022. ISBN 9781638357155.
  4. ^ Интервью по проектированию систем . Мэннинг. 2024. ISBN 9781638355915.
  5. ^ Витильо, Роберто (2021). Понимание распределенных систем: что каждый разработчик должен знать о больших распределенных приложениях . Роберто Витильо. ISBN 978-1838430207.
  6. ^ Экхардт, Д.Э., «Фундаментальные различия в надежности N-модульной избыточности и программирования N-версий», Журнал систем и программного обеспечения, 8, 1988, стр. 313–318.
  7. Рэй Жигет и Джонетт Хассел, «На пути к ресурсному методу обеспечения отказоустойчивости программного обеспечения», региональная конференция ACM Southeast, апрель 1999 г.

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

  • Отказоустойчивость программного обеспечения, Крис Инасио, Университет Карнеги-Меллона (1998)
Retrieved from "https://en.wikipedia.org/w/index.php?title=Software_fault_tolerance&oldid=1254957278"