Методы, способы и средства обеспечения отказоустойчивости автоматизированных систем: Отказоустойчивость - это процесс правильной работы системы, несмотря на возникновение сбоев в системе. Даже после выполнения стольких процессов тестирования существует вероятность сбоя в системе. Практически система не может быть полностью безошибочной. следовательно, системы спроектированы таким образом, что в случае наличия ошибок и сбоев система выполняет работу должным образом и выдает правильный результат. Любая система состоит из двух основных компонентов – аппаратного и программного обеспечения. Ошибка может возникнуть в любом из них. Таким образом, существуют отдельные методы обеспечения отказоустойчивости как в аппаратном, так и в программном обеспечении. [Картинка 1](1.jpg) В основном для обеспечения отказоустойчивости оборудования используются два метода: BIST –расшифровывается как Build in Self Test. Система снова и снова проверяет себя через определенный промежуток времени, что является методом BIST для обеспечения отказоустойчивости оборудования. Когда система обнаруживает неисправность, она отключает неисправный компонент и включает его резервную часть. Система в основном перенастраивает себя в случае возникновения сбоя. TMR - это тройное модульное резервирование. Создаются три резервные копии критически важных компонентов, и все эти три копии выполняются одновременно. Проводится голосование по результатам всех избыточных копий, и выбирается результат большинства. Он может допускать возникновение одной ошибки за раз. Для обеспечения отказоустойчивости программного обеспечения используются три метода. Первые два метода являются общими и в основном являются адаптацией аппаратных методов обеспечения отказоустойчивости: Программирование в N-версии – При программировании с N версиями N версий программного обеспечения разрабатываются N отдельными лицами или группами разработчиков. Программирование в N-версии похоже на TMR в технике аппаратной отказоустойчивости. В N-версии программирования все избыточные копии выполняются одновременно, и полученный результат отличается от каждой обработки. Идея программирования n-версии в основном заключается в том, чтобы получать все ошибки только во время разработки. [Картинка 2](2.jpg) Блоки восстановления – Метод блоков восстановления также похож на программирование n-версии, но в методе блоков восстановления избыточные копии генерируются только с использованием разных алгоритмов. В блоке восстановления все резервные копии не запускаются одновременно, и эти копии запускаются одна за другой. Метод блока восстановления может использоваться только в тех случаях, когда сроки выполнения задачи превышают время вычисления задачи. [Картинка 3](3.jpg) Восстановление с помощью флажков и отката – Этот метод отличается от двух методов обеспечения отказоустойчивости программного обеспечения. В этом методе система проверяется каждый раз, когда мы выполняем некоторые вычисления. Эти методы в основном полезны при сбое процессора или повреждении данных. [Картинка 4](4.jpg) Способы реализации: Есть два принципиально разных подхода, хотя они вполне могут независимо или полузависимо сочетаться для вашей системы. Один подход — это DR (disaster recovery), когда полная копия всей вашей системы может быть поднята в другом датацентре. Данный метод выручает практически в любой ситуации, однако, он может имеет очень длительный промежуток простоя. Я знаю одну систему, в которой это занимает в районе часа. Но тут тоже надо быть очень аккуратным, не только конфигурация системы, но и железо в DR должны совпадать с продакшеном. Например, когда мы тестировали DR, в одной из систем с которыми я работал, то у нас при сильной нагрузке оказалось, что один из компонентов заточен на работу в однопоточной среде и его пропускная способность пропорциональна частоте процессора, а на DR у нас была мега железка с огромным количеством ядер, но с небольшой тактовой частотой, так что этот компонент стал затыкаться. Вобщем, тест был весьма неудачен и «более клевое» железо на текущей конфигурации нашей системы нам явно не подходило. Второй способ — это программно реализовывать отказоустойчивость для каждого из компонент и их взаимодействия. Различных техник сделать вашу систему более устойчивой очень много. Источники: 1.[translated.turbopages.org](https://translated.turbopages.org/proxy_u/en-ru.ru.a12db7e1-6352f0a5-a7668b83-74722d776562/https/www.geeksforgeeks.org/fault-tolerance-techniques-in-computer-system/) 2.[top-technologies.ru](https://top-technologies.ru/ru/article/view?id=34112) 3.[habr.com](https://habr.com/ru/post/118496/)