Введение

Устойчивость систем к сбоям или ошибкам компонентов. Отказоустойчивость – это способность системы поддерживать нормальное функционирование при возникновении сбоев или неисправностей в одном или нескольких ее компонентах. Любое снижение качества работы пропорционально серьезности сбоя, в отличие от системы с наивной конструкцией, где даже незначительный сбой может привести к полному отказу. Отказоустойчивость особенно важна для систем с высокой доступностью, критически важных для выполнения задач или даже жизненно важных систем. Способность сохранять функциональность при выходе из строя части системы называется плавным ухудшением характеристик. Отказоустойчивая конструкция позволяет системе продолжать выполнение своих функций, возможно, на пониженном уровне, а не полностью прекращать работу при отказе какой-либо ее части. Этот термин чаще всего используется для описания компьютерных систем, предназначенных для продолжения работы в случае частичного сбоя, возможно, с уменьшением пропускной способности или увеличением времени отклика. То есть, система в целом не останавливается из-за проблем в аппаратном или программном обеспечении. Примерами, не связанными с вычислительной техникой, могут служить автомобиль, спроектированный таким образом, чтобы оставаться управляемым при проколе одного из колес, или конструкция, сохраняющая свою целостность, несмотря на повреждения, вызванные усталостью, коррозией, производственными дефектами или ударом. Для отдельной системы отказоустойчивость может быть достигнута путем прогнозирования исключительных ситуаций и проектирования системы с учетом их возникновения, а также стремления к самостабилизации, чтобы система стремилась к безошибочному состоянию. Однако, если последствия сбоя системы катастрофичны или стоимость обеспечения достаточной надежности очень высока, лучшим решением может быть использование некоторой формы резервирования. В любом случае, если последствия сбоя системы настолько катастрофичны, система должна иметь возможность использовать откат к безопасному режиму. Это похоже на восстановление после сбоя, но может быть выполнено человеком, если люди участвуют в управлении системой.

Примеры

Отказоустойчивость оборудования иногда требует извлечения неисправных компонентов и замены их на новые, пока система продолжает работать (в вычислительной технике это известно как горячая замена). Такая система, реализованная с одним резервным экземпляром, называется одноточечно отказоустойчивой и составляет подавляющее большинство отказоустойчивых систем. В таких системах среднее время наработки на отказ должно быть достаточно большим, чтобы у операторов было достаточно времени для восстановления неисправных устройств (среднее время восстановления) до того, как выйдет из строя и резервный экземпляр. Увеличение времени наработки на отказ полезно, но не является обязательным требованием для отказоустойчивой системы. Отказоустойчивость особенно успешно применяется в компьютерных системах. Компания Tandem Computers построила весь свой бизнес на таких машинах, которые использовали одноточечную отказоустойчивость для создания своих систем NonStop с временем бесперебойной работы, измеряемым годами. Архитектуры, обеспечивающие безопасный отказ, могут также охватывать компьютерное программное обеспечение, например, посредством репликации процессов. Форматы данных также могут быть разработаны для постепенной деградации. Например, HTML разработан с учетом обратной совместимости, что позволяет веб-браузерам игнорировать новые и неподдерживаемые HTML-сущности, не делая документ непригодным для использования. Кроме того, некоторые веб-сайты, включая популярные платформы, такие как Twitter (до декабря 2020 года), предоставляют упрощенный интерфейс, не требующий JavaScript и имеющий минимальную разметку, чтобы обеспечить широкую доступность и охват, например, на игровых консолях с ограниченными возможностями просмотра веб-страниц.

Терминология

Система с высокой степенью отказоустойчивости может продолжать работу на прежнем уровне производительности, даже если один или несколько компонентов вышли из строя. Например, здание с резервным электрогенератором будет обеспечивать то же напряжение в розетках, даже при отключении электроснабжения от сети. Система, разработанная для безопасного отказа, безопасного завершения работы или плавного снижения производительности – независимо от того, функционирует ли она на пониженном уровне или полностью выходит из строя – делает это таким образом, чтобы защитить людей, имущество или данные от повреждений, травм, несанкционированного доступа или раскрытия информации. В компьютерах программа может обеспечить безопасный отказ, выполнив корректное завершение работы (в отличие от неконтролируемого сбоя), чтобы предотвратить повреждение данных после возникновения ошибки. Существует различие между "правильным отказом" и "неправильным отказом". Система, предназначенная для постепенной деградации или "мягкого отказа" (используется в вычислительной технике, аналогично понятию "безопасный отказ"), работает на пониженном уровне производительности после отказа одного или нескольких компонентов. Например, при отключении электроснабжения от сети в здании освещение может работать на пониженной яркости, а лифты – на пониженной скорости. В вычислительной технике, если пропускной способности сети недостаточно для потоковой передачи онлайн-видео, может быть транслирована версия с более низким разрешением вместо версии высокого разрешения. Прогрессивное улучшение – еще один пример, когда веб-страницы доступны в базовом функциональном формате для устаревших браузеров с маленьким экраном или ограниченными возможностями, но в улучшенной версии для браузеров, поддерживающих дополнительные технологии или имеющих больший дисплей. В отказоустойчивых компьютерных системах программы, считающиеся надежными, разработаны для продолжения работы, несмотря на ошибки, исключения или некорректные входные данные, а не для полного завершения работы. Хрупкость программного обеспечения – противоположность надежности. Устойчивые сети продолжают передавать данные, несмотря на отказ отдельных каналов или узлов. Ожидается, что устойчивые здания и инфраструктура также смогут предотвратить полный отказ в таких ситуациях, как землетрясения, наводнения или столкновения. Система с высокой прозрачностью отказов будет предупреждать пользователей о выходе из строя компонента, даже если она продолжает работать с полной производительностью, чтобы можно было устранить отказ или предвидеть неизбежный полный отказ. Аналогично, компонент с быстрым обнаружением отказа предназначен для сообщения об ошибке в момент ее возникновения, а не для генерации отчетов при отказе последующих компонентов. Это облегчает диагностику основной проблемы и может предотвратить неправильную работу в неисправном состоянии. Одиночная неисправность – это ситуация, когда одно из средств защиты от опасности неисправно. Если одиночная неисправность неизбежно приводит к другой одиночной неисправности, обе неисправности рассматриваются как одна одиночная неисправность. Один из источников приводит следующий пример: одиночная неисправность – это состояние, когда одно из средств защиты от опасности в оборудовании неисправно или присутствует одно внешнее аномальное состояние, например, короткое замыкание между токоведущими частями и присоединенной частью.

Критерии

Обычно обеспечение отказоустойчивого дизайна для каждого компонента не представляется возможным. Связанная с этим избыточность влечет за собой ряд негативных последствий: увеличение веса, габаритов, энергопотребления, стоимости, а также времени на проектирование, верификацию и тестирование. Поэтому необходимо рассмотреть ряд вариантов, чтобы определить, для каких компонентов требуется отказоустойчивость: насколько критичен компонент? В автомобиле радио не является критически важным, поэтому для этого компонента меньше требуется отказоустойчивости. Какова вероятность отказа компонента? Некоторые компоненты, такие как карданный вал в автомобиле, маловероятно выйдут из строя, поэтому обеспечение отказоустойчивости для них не требуется. Сколько стоит обеспечить отказоустойчивость компонента? Например, требование резервного двигателя для автомобиля, вероятно, будет слишком дорогим как с экономической точки зрения, так и с точки зрения веса и занимаемого пространства. Примером компонента, успешно проходящего все тесты, является система удержания пассажиров автомобиля. Хотя основной системой удержания пассажиров обычно считается гравитация, в случае переворота транспортного средства или воздействия высоких перегрузок эта основная система может оказаться неэффективной. Удержание пассажиров во время аварии абсолютно критично для безопасности, поэтому первый тест пройден. Аварии с выбросом пассажиров были довольно распространены до появления ремней безопасности, поэтому второй тест также пройден. Стоимость резервной системы удержания, такой как ремни безопасности, относительно невелика как с экономической точки зрения, так и с точки зрения веса и занимаемого пространства, поэтому третий тест пройден. Следовательно, установка ремней безопасности во всех транспортных средствах – отличное решение. Другие "дополнительные системы удержания", такие как подушки безопасности, дороже и поэтому проходят этот тест с меньшим запасом. Еще одним отличным и долгосрочным примером реализации этого принципа является тормозная система: хотя сами тормозные механизмы критически важны, они не склонны к внезапным (в отличие от постепенных) отказам и в любом случае дублируются для обеспечения равномерного и сбалансированного приложения тормозного усилия ко всем колесам. Дальнейшее дублирование основных компонентов было бы слишком дорогостоящим и привело бы к значительному увеличению веса. Однако системы, приводящие тормоза в действие под управлением водителя, по своей сути менее надежны, обычно используя трос (подвержен коррозии, растяжению, заеданию, обрыву) или гидравлическую жидкость (подвержена утечкам, закипанию и образованию пузырьков, поглощению воды и, как следствие, потере эффективности). Таким образом, в большинстве современных автомобилей гидравлический контур педального тормоза разделен по диагонали на две меньшие точки отказа, выход из строя любой из которых уменьшает тормозную мощность лишь на 50% и не вызывает столь опасного дисбаланса тормозных усилий, как прямое разделение на переднюю/заднюю или левую/правую оси. И в случае полного отказа гидравлического контура (относительно редкое событие) предусмотрена система безопасности в виде тросового ручного тормоза, который приводит в действие относительно слабые задние тормоза, но все же способен безопасно остановить автомобиль в сочетании с торможением двигателем/трансмиссией, при условии, что нагрузка на него соответствует нормальному дорожному движению. Совокупность маловероятных событий – полный отказ педального тормоза и необходимость экстренного торможения – скорее всего, приведет к столкновению, но при более низкой скорости, чем в противном случае. В отличие от педального тормоза, ручной тормоз является менее критичным элементом и, если не используется в качестве резервного, не представляет непосредственной опасности в случае обнаружения неисправности в момент применения. Поэтому в нем не предусмотрена избыточность как таковая (и обычно используется более дешевая, легкая, но менее износостойкая тросовая система привода), и в случае остановки на склоне может быть достаточно кратковременно задействовать педальный тормоз, чтобы удержать автомобиль, а затем тронуться с места в поисках ровного участка дороги. В качестве альтернативы, на небольших уклонах можно перевести трансмиссию в режим Park, Reverse или First gear, используя блокировку трансмиссии/компрессию двигателя для удержания автомобиля, поскольку нет необходимости в сложной системе для его предварительной остановки. На мотоциклах аналогичный уровень безопасности обеспечивается более простыми методами: во-первых, передняя и задняя тормозные системы полностью разделены, независимо от способа их привода (трос, тяга или гидравлика), что позволяет одной из них полностью выйти из строя, не влияя на другую. Во-вторых, задний тормоз относительно силен по сравнению со своим автомобильным аналогом, представляя собой мощный дисковый тормоз на некоторых спортивных моделях, хотя основное тормозное усилие обычно приходится на переднюю систему; поскольку общий вес транспортного средства более централизован, заднее колесо обычно больше и имеет лучшее сцепление с дорогой, что позволяет водителю отклоняться назад, перенося больше веса на заднее колесо и, следовательно, увеличивая тормозное усилие перед блокировкой колеса. На более дешевых и медленных утилитарных моделях, даже если переднее колесо оснащено гидравлическим дисковым тормозом для увеличения тормозного усилия и упрощения компоновки, заднее колесо обычно представляет собой примитивный, несколько неэффективный, но исключительно надежный барабанный тормоз с тросовым приводом, благодаря простоте соединения педали с колесом и, что более важно, практически исключительной невозможности катастрофического отказа, даже если остальная часть машины, как и многие недорогие мотоциклы после нескольких лет эксплуатации, находится на грани разрушения из-за недостаточного обслуживания.

Методы допуска неисправностей

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

Вычисления без ошибок

Вычислительная техника, нечувствительная к ошибкам, — это метод, позволяющий компьютерным программам продолжать выполнение, несмотря на возникновение ошибок. Этот метод может применяться в различных ситуациях. Он способен обрабатывать некорректные обращения к памяти, возвращая программе сгенерированное значение, которое программа использует, игнорируя исходное значение памяти, к которому она пыталась обратиться. Это существенно отличается от типичных средств проверки памяти, которые сообщают программе об ошибке или прерывают её работу. Данный подход имеет накладные расходы на производительность: поскольку для вставки динамических проверок корректности адресов требуется переписывание кода, время выполнения увеличивается на 80–500%.

Восстановительный пастырский труд

Recovery shepherding – это легковесный метод, позволяющий программным программам восстанавливаться после ошибок, которые в противном случае были бы фатальными, таких как разыменование нулевого указателя и деление на ноль. В отличие от техники вычислений, нечувствительных к сбоям, recovery shepherding работает непосредственно с исполняемым бинарным файлом программы и не требует ее перекомпиляции. Он использует фреймворк двоичной инструментации Pin. Он подключается к процессу приложения при возникновении ошибки, восстанавливает выполнение, отслеживает последствия восстановления по мере продолжения выполнения, локализует последствия восстановления внутри процесса приложения и отключается от процесса после того, как все последствия восстановления будут удалены из состояния процесса. Он не мешает нормальному выполнению программы и, следовательно, создает пренебрежимо малые накладные расходы. Это может включать резервные компоненты, которые автоматически "включаются", если один из компонентов выходит из строя. Например, большие грузовики могут потерять шину без серьезных последствий. У них много шин, и ни одна из них не является критической (за исключением передних шин, которые используются для управления, но обычно несут меньшую нагрузку, как каждая по отдельности, так и в сумме, чем остальные четыре-шестнадцать, поэтому они менее подвержены поломкам). Идея включения избыточности для повышения надежности системы была впервые предложена Джоном фон Нейманом в 1950-х годах. Существуют два типа избыточности: пространственная и временная. Пространственная избыточность предоставляет дополнительные компоненты, функции или элементы данных, которые не требуются для безотказной работы. Пространственная избыточность далее классифицируется на аппаратную, программную и информационную избыточность в зависимости от типа избыточных ресурсов, добавленных в систему. При временной избыточности вычисление или передача данных повторяется, и результат сравнивается с сохраненной копией предыдущего результата. Современная терминология для этого вида тестирования называется "тестирование отказоустойчивости в процессе эксплуатации", или сокращенно ISFTT.

Связанные термины

Есть разница между отказоустойчивостью и системами, которые редко выходят из строя. Например, системы Western Electric с кроссбарной коммутацией имели наработки на отказ в два часа за сорок лет, и поэтому были очень устойчивы к отказам. Но при возникновении отказа они все равно полностью прекращали работу, и поэтому не были отказоустойчивыми.