Введение
Устойчивость систем к сбоям или ошибкам компонентов. Отказоустойчивость – это способность системы поддерживать нормальное функционирование при возникновении сбоев или неисправностей в одном или нескольких ее компонентах. Любое снижение качества работы пропорционально серьезности сбоя, в отличие от системы с наивной конструкцией, где даже незначительный сбой может привести к полному отказу. Отказоустойчивость особенно важна для систем с высокой доступностью, критически важных для выполнения задач или даже жизненно важных систем. Способность сохранять функциональность при выходе из строя части системы называется плавным ухудшением характеристик. Отказоустойчивая конструкция позволяет системе продолжать выполнение своих функций, возможно, на пониженном уровне, а не полностью прекращать работу при отказе какой-либо ее части. Этот термин чаще всего используется для описания компьютерных систем, предназначенных для продолжения работы в случае частичного сбоя, возможно, с уменьшением пропускной способности или увеличением времени отклика. То есть, система в целом не останавливается из-за проблем в аппаратном или программном обеспечении. Примерами, не связанными с вычислительной техникой, могут служить автомобиль, спроектированный таким образом, чтобы оставаться управляемым при проколе одного из колес, или конструкция, сохраняющая свою целостность, несмотря на повреждения, вызванные усталостью, коррозией, производственными дефектами или ударом. Для отдельной системы отказоустойчивость может быть достигнута путем прогнозирования исключительных ситуаций и проектирования системы с учетом их возникновения, а также стремления к самостабилизации, чтобы система стремилась к безошибочному состоянию. Однако, если последствия сбоя системы катастрофичны или стоимость обеспечения достаточной надежности очень высока, лучшим решением может быть использование некоторой формы резервирования. В любом случае, если последствия сбоя системы настолько катастрофичны, система должна иметь возможность использовать откат к безопасному режиму. Это похоже на восстановление после сбоя, но может быть выполнено человеком, если люди участвуют в управлении системой.
Fault tolerance is the ability of a system to maintain proper operation in the event of failures or faults in one or more of its components. Any decrease in operating quality is proportional to the severity of the failure, unlike a naively designed system in which even a small failure can lead to total breakdown. Fault tolerance is particularly sought after in high availability, mission critical, or even life critical systems. The ability to maintain functionality when portions of a system break down is referred to as graceful degradation. A fault tolerant design enables a system to continue its intended operation, possibly at a reduced level, rather than failing completely when some part of the system fails. The term is most commonly used to describe computer systems designed to continue operation in the event of a partial failure, with perhaps a reduction in throughput or an increase in response time. That is, the system as a whole is not stopped due to problems either in the hardware or the software. Non computing examples include a motor vehicle designed to remain drivable if one of the tires is punctured, or a structure that retains its integrity despite damage caused by fatigue, corrosion, manufacturing flaws, or impact. For an individual system, fault tolerance can be achieved by anticipating exceptional conditions and building the system to cope with them, and aiming for self stabilization so that the system converges towards an error free state. However, if the consequences of a system failure are catastrophic, or the cost of making it sufficiently reliable is very high, a better solution may be to use some form of duplication. In any case, if the consequence of a system failure is so catastrophic, the system must be able to use reversion to fall back to a safe mode. This is similar to roll back recovery but can be a human action if humans are present in the loop.
Примеры
Отказоустойчивость оборудования иногда требует извлечения неисправных компонентов и замены их на новые, пока система продолжает работать (в вычислительной технике это известно как горячая замена). Такая система, реализованная с одним резервным экземпляром, называется одноточечно отказоустойчивой и составляет подавляющее большинство отказоустойчивых систем. В таких системах среднее время наработки на отказ должно быть достаточно большим, чтобы у операторов было достаточно времени для восстановления неисправных устройств (среднее время восстановления) до того, как выйдет из строя и резервный экземпляр. Увеличение времени наработки на отказ полезно, но не является обязательным требованием для отказоустойчивой системы. Отказоустойчивость особенно успешно применяется в компьютерных системах. Компания Tandem Computers построила весь свой бизнес на таких машинах, которые использовали одноточечную отказоустойчивость для создания своих систем NonStop с временем бесперебойной работы, измеряемым годами. Архитектуры, обеспечивающие безопасный отказ, могут также охватывать компьютерное программное обеспечение, например, посредством репликации процессов. Форматы данных также могут быть разработаны для постепенной деградации. Например, HTML разработан с учетом обратной совместимости, что позволяет веб-браузерам игнорировать новые и неподдерживаемые HTML-сущности, не делая документ непригодным для использования. Кроме того, некоторые веб-сайты, включая популярные платформы, такие как Twitter (до декабря 2020 года), предоставляют упрощенный интерфейс, не требующий JavaScript и имеющий минимальную разметку, чтобы обеспечить широкую доступность и охват, например, на игровых консолях с ограниченными возможностями просмотра веб-страниц.
Терминология
Система с высокой степенью отказоустойчивости может продолжать работу на прежнем уровне производительности, даже если один или несколько компонентов вышли из строя. Например, здание с резервным электрогенератором будет обеспечивать то же напряжение в розетках, даже при отключении электроснабжения от сети. Система, разработанная для безопасного отказа, безопасного завершения работы или плавного снижения производительности – независимо от того, функционирует ли она на пониженном уровне или полностью выходит из строя – делает это таким образом, чтобы защитить людей, имущество или данные от повреждений, травм, несанкционированного доступа или раскрытия информации. В компьютерах программа может обеспечить безопасный отказ, выполнив корректное завершение работы (в отличие от неконтролируемого сбоя), чтобы предотвратить повреждение данных после возникновения ошибки. Существует различие между "правильным отказом" и "неправильным отказом". Система, предназначенная для постепенной деградации или "мягкого отказа" (используется в вычислительной технике, аналогично понятию "безопасный отказ"), работает на пониженном уровне производительности после отказа одного или нескольких компонентов. Например, при отключении электроснабжения от сети в здании освещение может работать на пониженной яркости, а лифты – на пониженной скорости. В вычислительной технике, если пропускной способности сети недостаточно для потоковой передачи онлайн-видео, может быть транслирована версия с более низким разрешением вместо версии высокого разрешения. Прогрессивное улучшение – еще один пример, когда веб-страницы доступны в базовом функциональном формате для устаревших браузеров с маленьким экраном или ограниченными возможностями, но в улучшенной версии для браузеров, поддерживающих дополнительные технологии или имеющих больший дисплей. В отказоустойчивых компьютерных системах программы, считающиеся надежными, разработаны для продолжения работы, несмотря на ошибки, исключения или некорректные входные данные, а не для полного завершения работы. Хрупкость программного обеспечения – противоположность надежности. Устойчивые сети продолжают передавать данные, несмотря на отказ отдельных каналов или узлов. Ожидается, что устойчивые здания и инфраструктура также смогут предотвратить полный отказ в таких ситуациях, как землетрясения, наводнения или столкновения. Система с высокой прозрачностью отказов будет предупреждать пользователей о выходе из строя компонента, даже если она продолжает работать с полной производительностью, чтобы можно было устранить отказ или предвидеть неизбежный полный отказ. Аналогично, компонент с быстрым обнаружением отказа предназначен для сообщения об ошибке в момент ее возникновения, а не для генерации отчетов при отказе последующих компонентов. Это облегчает диагностику основной проблемы и может предотвратить неправильную работу в неисправном состоянии. Одиночная неисправность – это ситуация, когда одно из средств защиты от опасности неисправно. Если одиночная неисправность неизбежно приводит к другой одиночной неисправности, обе неисправности рассматриваются как одна одиночная неисправность. Один из источников приводит следующий пример: одиночная неисправность – это состояние, когда одно из средств защиты от опасности в оборудовании неисправно или присутствует одно внешнее аномальное состояние, например, короткое замыкание между токоведущими частями и присоединенной частью.
Критерии
Обычно обеспечение отказоустойчивого дизайна для каждого компонента не представляется возможным. Связанная с этим избыточность влечет за собой ряд негативных последствий: увеличение веса, габаритов, энергопотребления, стоимости, а также времени на проектирование, верификацию и тестирование. Поэтому необходимо рассмотреть ряд вариантов, чтобы определить, для каких компонентов требуется отказоустойчивость: насколько критичен компонент? В автомобиле радио не является критически важным, поэтому для этого компонента меньше требуется отказоустойчивости. Какова вероятность отказа компонента? Некоторые компоненты, такие как карданный вал в автомобиле, маловероятно выйдут из строя, поэтому обеспечение отказоустойчивости для них не требуется. Сколько стоит обеспечить отказоустойчивость компонента? Например, требование резервного двигателя для автомобиля, вероятно, будет слишком дорогим как с экономической точки зрения, так и с точки зрения веса и занимаемого пространства. Примером компонента, успешно проходящего все тесты, является система удержания пассажиров автомобиля. Хотя основной системой удержания пассажиров обычно считается гравитация, в случае переворота транспортного средства или воздействия высоких перегрузок эта основная система может оказаться неэффективной. Удержание пассажиров во время аварии абсолютно критично для безопасности, поэтому первый тест пройден. Аварии с выбросом пассажиров были довольно распространены до появления ремней безопасности, поэтому второй тест также пройден. Стоимость резервной системы удержания, такой как ремни безопасности, относительно невелика как с экономической точки зрения, так и с точки зрения веса и занимаемого пространства, поэтому третий тест пройден. Следовательно, установка ремней безопасности во всех транспортных средствах – отличное решение. Другие "дополнительные системы удержания", такие как подушки безопасности, дороже и поэтому проходят этот тест с меньшим запасом. Еще одним отличным и долгосрочным примером реализации этого принципа является тормозная система: хотя сами тормозные механизмы критически важны, они не склонны к внезапным (в отличие от постепенных) отказам и в любом случае дублируются для обеспечения равномерного и сбалансированного приложения тормозного усилия ко всем колесам. Дальнейшее дублирование основных компонентов было бы слишком дорогостоящим и привело бы к значительному увеличению веса. Однако системы, приводящие тормоза в действие под управлением водителя, по своей сути менее надежны, обычно используя трос (подвержен коррозии, растяжению, заеданию, обрыву) или гидравлическую жидкость (подвержена утечкам, закипанию и образованию пузырьков, поглощению воды и, как следствие, потере эффективности). Таким образом, в большинстве современных автомобилей гидравлический контур педального тормоза разделен по диагонали на две меньшие точки отказа, выход из строя любой из которых уменьшает тормозную мощность лишь на 50% и не вызывает столь опасного дисбаланса тормозных усилий, как прямое разделение на переднюю/заднюю или левую/правую оси. И в случае полного отказа гидравлического контура (относительно редкое событие) предусмотрена система безопасности в виде тросового ручного тормоза, который приводит в действие относительно слабые задние тормоза, но все же способен безопасно остановить автомобиль в сочетании с торможением двигателем/трансмиссией, при условии, что нагрузка на него соответствует нормальному дорожному движению. Совокупность маловероятных событий – полный отказ педального тормоза и необходимость экстренного торможения – скорее всего, приведет к столкновению, но при более низкой скорости, чем в противном случае. В отличие от педального тормоза, ручной тормоз является менее критичным элементом и, если не используется в качестве резервного, не представляет непосредственной опасности в случае обнаружения неисправности в момент применения. Поэтому в нем не предусмотрена избыточность как таковая (и обычно используется более дешевая, легкая, но менее износостойкая тросовая система привода), и в случае остановки на склоне может быть достаточно кратковременно задействовать педальный тормоз, чтобы удержать автомобиль, а затем тронуться с места в поисках ровного участка дороги. В качестве альтернативы, на небольших уклонах можно перевести трансмиссию в режим Park, Reverse или First gear, используя блокировку трансмиссии/компрессию двигателя для удержания автомобиля, поскольку нет необходимости в сложной системе для его предварительной остановки. На мотоциклах аналогичный уровень безопасности обеспечивается более простыми методами: во-первых, передняя и задняя тормозные системы полностью разделены, независимо от способа их привода (трос, тяга или гидравлика), что позволяет одной из них полностью выйти из строя, не влияя на другую. Во-вторых, задний тормоз относительно силен по сравнению со своим автомобильным аналогом, представляя собой мощный дисковый тормоз на некоторых спортивных моделях, хотя основное тормозное усилие обычно приходится на переднюю систему; поскольку общий вес транспортного средства более централизован, заднее колесо обычно больше и имеет лучшее сцепление с дорогой, что позволяет водителю отклоняться назад, перенося больше веса на заднее колесо и, следовательно, увеличивая тормозное усилие перед блокировкой колеса. На более дешевых и медленных утилитарных моделях, даже если переднее колесо оснащено гидравлическим дисковым тормозом для увеличения тормозного усилия и упрощения компоновки, заднее колесо обычно представляет собой примитивный, несколько неэффективный, но исключительно надежный барабанный тормоз с тросовым приводом, благодаря простоте соединения педали с колесом и, что более важно, практически исключительной невозможности катастрофического отказа, даже если остальная часть машины, как и многие недорогие мотоциклы после нескольких лет эксплуатации, находится на грани разрушения из-за недостаточного обслуживания.
How critical is the component? In a car, the radio is not critical, so this component has less need for fault tolerance. How likely is the component to fail? Some components, like the drive shaft in a car, are not likely to fail, so no fault tolerance is needed. How expensive is it to make the component fault tolerant? Requiring a redundant car engine, for example, would likely be too expensive both economically and in terms of weight and space, to be considered. An example of a component that passes all the tests is a car's occupant restraint system. While the primary occupant restraint system is not normally thought of, it is gravity. If the vehicle rolls over or undergoes severe g forces, then this primary method of occupant restraint may fail. Restraining the occupants during such an accident is absolutely critical to safety, so the first test is passed. Accidents causing occupant ejection were quite common before seat belts, so the second test is passed. The cost of a redundant restraint method like seat belts is quite low, both economically and in terms of weight and space, so the third test is passed. Therefore, adding seat belts to all vehicles is an excellent idea. Other "supplemental restraint systems", such as airbags, are more expensive and so pass that test by a smaller margin. Another excellent and long term example of this principle being put into practice is the braking system: whilst the actual brake mechanisms are critical, they are not particularly prone to sudden (rather than progressive) failure, and are in any case necessarily duplicated to allow even and balanced application of brake force to all wheels. It would also be prohibitively costly to further double up the main components and they would add considerable weight. However, the similarly critical systems for actuating the brakes under driver control are inherently less robust, generally using a cable (can rust, stretch, jam, snap) or hydraulic fluid (can leak, boil and develop bubbles, absorb water and thus lose effectiveness). Thus in most modern cars the footbrake hydraulic brake circuit is diagonally divided to give two smaller points of failure, the loss of either only reducing brake power by 50% and not causing as much dangerous brakeforce imbalance as a straight front back or left right split, and should the hydraulic circuit fail completely (a relatively very rare occurrence), there is a failsafe in the form of the cable actuated parking brake that operates the otherwise relatively weak rear brakes, but can still bring the vehicle to a safe halt in conjunction with transmission/engine braking so long as the demands on it are in line with normal traffic flow. The cumulatively unlikely combination of total foot brake failure with the need for harsh braking in an emergency will likely result in a collision, but still one at lower speed than would otherwise have been the case. In comparison with the foot pedal activated service brake, the parking brake itself is a less critical item, and unless it is being used as a one time backup for the footbrake, will not cause immediate danger if it is found to be nonfunctional at the moment of application. Therefore, no redundancy is built into it per se (and it typically uses a cheaper, lighter, but less hardwearing cable actuation system), and it can suffice, if this happens on a hill, to use the footbrake to momentarily hold the vehicle still, before driving off to find a flat piece of road on which to stop. Alternatively, on shallow gradients, the transmission can be shifted into Park, Reverse or First gear, and the transmission lock / engine compression used to hold it stationary, as there is no need for them to include the sophistication to first bring it to a halt. On motorcycles, a similar level of fail safety is provided by simpler methods; first, the front and rear brake systems are entirely separate, regardless of their method of activation (that can be cable, rod or hydraulic), allowing one to fail entirely while leaving the other unaffected. Second, the rear brake is relatively strong compared to its automotive cousin, being a powerful disc on some sports models, even though the usual intent is for the front system to provide the vast majority of braking force; as the overall vehicle weight is more central, the rear tire is generally larger and has better traction, so that the rider can lean back to put more weight on it, therefore allowing more brake force to be applied before the wheel locks. On cheaper, slower utility class machines, even if the front wheel should use a hydraulic disc for extra brake force and easier packaging, the rear will usually be a primitive, somewhat inefficient, but exceptionally robust rod actuated drum, thanks to the ease of connecting the footpedal to the wheel in this way and, more importantly, the near impossibility of catastrophic failure even if the rest of the machine, like a lot of low priced bikes after their first few years of use, is on the point of collapse from neglected maintenance.
Методы допуска неисправностей
Исследования, необходимые для определения допустимых отклонений в критических системах, требуют значительной междисциплинарной работы. Чем сложнее система, тем более внимательно необходимо учитывать и к чему готовиться в отношении всех возможных взаимодействий. Учитывая важность дорогостоящих систем в транспортной отрасли, коммунальном хозяйстве и военной сфере, область исследований чрезвычайно широка: она охватывает как очевидные направления, такие как моделирование программного обеспечения и обеспечение надежности, так и проектирование аппаратного обеспечения, а также более сложные области, такие как стохастическое моделирование, теория графов, формальная или дизъюнктивная логика, параллельные вычисления, дистанционная передача данных и многое другое.
Вычисления без ошибок
Вычислительная техника, нечувствительная к ошибкам, — это метод, позволяющий компьютерным программам продолжать выполнение, несмотря на возникновение ошибок. Этот метод может применяться в различных ситуациях. Он способен обрабатывать некорректные обращения к памяти, возвращая программе сгенерированное значение, которое программа использует, игнорируя исходное значение памяти, к которому она пыталась обратиться. Это существенно отличается от типичных средств проверки памяти, которые сообщают программе об ошибке или прерывают её работу. Данный подход имеет накладные расходы на производительность: поскольку для вставки динамических проверок корректности адресов требуется переписывание кода, время выполнения увеличивается на 80–500%.
Восстановительный пастырский труд
Recovery shepherding – это легковесный метод, позволяющий программным программам восстанавливаться после ошибок, которые в противном случае были бы фатальными, таких как разыменование нулевого указателя и деление на ноль. В отличие от техники вычислений, нечувствительных к сбоям, recovery shepherding работает непосредственно с исполняемым бинарным файлом программы и не требует ее перекомпиляции. Он использует фреймворк двоичной инструментации Pin. Он подключается к процессу приложения при возникновении ошибки, восстанавливает выполнение, отслеживает последствия восстановления по мере продолжения выполнения, локализует последствия восстановления внутри процесса приложения и отключается от процесса после того, как все последствия восстановления будут удалены из состояния процесса. Он не мешает нормальному выполнению программы и, следовательно, создает пренебрежимо малые накладные расходы. Это может включать резервные компоненты, которые автоматически "включаются", если один из компонентов выходит из строя. Например, большие грузовики могут потерять шину без серьезных последствий. У них много шин, и ни одна из них не является критической (за исключением передних шин, которые используются для управления, но обычно несут меньшую нагрузку, как каждая по отдельности, так и в сумме, чем остальные четыре-шестнадцать, поэтому они менее подвержены поломкам). Идея включения избыточности для повышения надежности системы была впервые предложена Джоном фон Нейманом в 1950-х годах. Существуют два типа избыточности: пространственная и временная. Пространственная избыточность предоставляет дополнительные компоненты, функции или элементы данных, которые не требуются для безотказной работы. Пространственная избыточность далее классифицируется на аппаратную, программную и информационную избыточность в зависимости от типа избыточных ресурсов, добавленных в систему. При временной избыточности вычисление или передача данных повторяется, и результат сравнивается с сохраненной копией предыдущего результата. Современная терминология для этого вида тестирования называется "тестирование отказоустойчивости в процессе эксплуатации", или сокращенно ISFTT.
tracks the repair effects as the execution continues, contains the repair effects within the application process, and detaches from the process after all repair effects are flushed from the process state. It does not interfere with the normal execution of the program and therefore incurs negligible overhead. This can consist of backup components that automatically "kick in" if one component fails. For example, large cargo trucks can lose a tire without any major consequences. They have many tires, and no one tire is critical (with the exception of the front tires, which are used to steer, but generally carry less load, each and in total, than the other four to 16, so are less likely to fail). The idea of incorporating redundancy in order to improve the reliability of a system was pioneered by John von Neumann in the 1950s. Two kinds of redundancy are possible: space redundancy and time redundancy. Space redundancy provides additional components, functions, or data items that are unnecessary for fault free operation. Space redundancy is further classified into hardware, software and information redundancy, depending on the type of redundant resources added to the system. In time redundancy the computation or data transmission is repeated and the result is compared to a stored copy of the previous result. The current terminology for this kind of testing is referred to as 'In Service Fault Tolerance Testing or ISFTT for short.
Связанные термины
Есть разница между отказоустойчивостью и системами, которые редко выходят из строя. Например, системы Western Electric с кроссбарной коммутацией имели наработки на отказ в два часа за сорок лет, и поэтому были очень устойчивы к отказам. Но при возникновении отказа они все равно полностью прекращали работу, и поэтому не были отказоустойчивыми.