This article needs additional citations for verification. (February 2011) |
Отказоустойчивость программного обеспечения — это способность программного обеспечения компьютера продолжать свою нормальную работу, несмотря на наличие системных или аппаратных сбоев. Отказоустойчивое программное обеспечение имеет возможность удовлетворять требованиям, несмотря на сбои. [1] [2]
Чтобы сделать систему более отказоустойчивой, необходимо объединить следующие шаблоны проектирования : повтор, откат, тайм-аут, автоматический выключатель и шаблон переборки. [3] [4]
Чтобы сделать вашу систему более отказоустойчивой, вам следует измерить 99-й процентиль задержки и держать оставшийся 1% (так называемые хвостовые задержки) под контролем с помощью механизмов самовосстановления. [5]
Единственное, что постоянно, — это изменение. Это, безусловно, более верно для программных систем, чем для любого явления, [6] не все программное обеспечение изменяется одинаково, поэтому методы обеспечения отказоустойчивости программного обеспечения предназначены для преодоления ошибок выполнения путем изменения значений переменных для создания приемлемого состояния программы . [7] Необходимость контроля отказоустойчивости программного обеспечения является одной из наиболее растущих проблем, с которыми сталкиваются сегодня индустрии программного обеспечения. Отказоустойчивость должна быть ключевым фактором на ранней стадии разработки программного обеспечения .
Существуют различные механизмы обеспечения отказоустойчивости программного обеспечения, среди которых:
Компьютерные приложения делают вызов, используя интерфейс прикладного программирования (API), для доступа к общим ресурсам, таким как клавиатура, мышь, экран, дисковод, сеть и принтер. Они могут выйти из строя двумя способами.
Заблокированный вызов — это запрос на услуги со стороны операционной системы, который останавливает работу компьютерной программы до тех пор, пока не будут получены результаты.
Например, вызов TCP блокируется до тех пор, пока не будет получен ответ от удаленного сервера. Это происходит каждый раз, когда вы выполняете действие с веб-браузером. Интенсивные вычисления вызывают длительные задержки с тем же эффектом, что и заблокированный вызов API.
Для обработки блокировок используются два метода.
Потоки допускают отдельную последовательность выполнения для каждого вызова API, который может блокироваться. Это может предотвратить остановку всего приложения в ожидании ресурса. Это имеет то преимущество, что никакая информация о состоянии вызова API не теряется, пока происходят другие действия.
К потоковым языкам относятся следующие.
Ада | Афникс | С++ | С# | ШЕЛК | Эйфелева | Эрланг |
Ява | Лисп | пурпурный | Модуль 3 | Напье 88 | Оз | Вуаля |
pSather | Perl 5.8.7+ | PHP | Питон | Р | Рубин | Smalltalk |
Ткл/Тк | В | Юникон | Балерина |
Таймеры позволяют прерывать заблокированный вызов. Периодический таймер позволяет программисту эмулировать потоки. Прерывания обычно уничтожают любую информацию, связанную с состоянием заблокированного вызова API или интенсивного вычисления, поэтому программист должен отслеживать эту информацию отдельно.
К языкам, не поддерживающим потоковое программирования, относятся следующие.
Баш | Яваскрипт | SQL | Визуальный базовый |
Поврежденное состояние будет возникать с таймерами. Этого можно избежать следующим образом.
Ошибки вызываются сигналами в системах, совместимых с POSIX, и эти сигналы исходят от вызовов API, от операционной системы и от других приложений.
Любой сигнал, не имеющий кода обработчика, становится ошибкой, вызывающей преждевременное завершение работы приложения.
Обработчик — это функция, которая выполняется по требованию, когда приложение получает сигнал. Это называется обработкой исключений .
Сигнал завершения — единственный сигнал, который не может быть обработан. Все остальные сигналы могут быть направлены в функцию-обработчик.
Функции-обработчики бывают двух основных видов.
Инициализированные функции обработчика спариваются с каждым сигналом при запуске программного обеспечения. Это приводит к запуску функции обработчика при поступлении соответствующего сигнала. Этот метод можно использовать с таймерами для эмуляции потоковой обработки.
Функции обработчика в строке связаны с вызовом с использованием специализированного синтаксиса. Наиболее знакомым является следующий, используемый с C++ и Java.
Для обеспечения отказоустойчивости оборудования программного обеспечения необходимо следующее.
Резервное копирование сохраняет информацию в случае необходимости замены оборудования. Это можно сделать одним из двух способов.
Резервное копирование требует стратегии восстановления информации, чтобы сделать резервную информацию доступной в заменяющей системе. Процесс восстановления обычно занимает много времени, и информация будет недоступна, пока процесс восстановления не будет завершен.
Избыточность основана на репликации информации на более чем одном вычислительном устройстве, чтобы задержка восстановления была короткой. Этого можно достичь с помощью непрерывного резервного копирования в работающую систему, которая остается неактивной до тех пор, пока не понадобится (синхронизированное резервное копирование).
Этого также можно добиться путем копирования информации по мере ее создания в нескольких идентичных системах, что может устранить задержку восстановления.