Система с быстрым отказом (Fail-fast) в технике, программировании и бизнесе с примерами

Лекция



Система с быстрым отказом ( fail-fast ) — это подход, при котором программа сразу же останавливается и выдает ошибку, как только обнаруживает непредвиденное или некорректное поведение. Это делается для того, чтобы предотвратить дальнейшее выполнение программы в условиях, которые могут привести к более сложным и труднообнаружимым ошибкам.

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

Аппаратное и программное обеспечение

Системы или модули с высокой отказоустойчивостью желательны в ряде случаев:

  • Архитектуры Fail-fast основаны на политике обработки ошибок, где любая обнаруженная ошибка или непредвиденное состояние приводит к отказу системы (быстрому). В некотором смысле политика обработки ошибок противоположна той, которая используется в отказоустойчивой системе . В отказоустойчивой системе политика обработки ошибок устанавливается для того, чтобы иметь избыточные компоненты и перемещать запросы на вычисления к активным компонентам, когда какой-либо компонент выходит из строя. Парадоксально, что системы Fail-fast делают отказоустойчивые системы более устойчивыми. У нас может быть 10 избыточных серверов для данной базы данных, но если общая конфигурация для 10 серверов будет обновлена ​​с использованием неверных данных аутентификации для клиентов, все они «избыточно выйдут из строя». В этом смысле система Fail-fast позаботится о том, чтобы все 10 избыточных серверов вышли из строя как можно скорее, чтобы DevOps быстро отреагировал.
  • Компоненты Fail-fast часто используются в ситуациях, когда сбой в одном компоненте может быть не заметен, пока он не приведет к сбою в другом компоненте в результате ленивой инициализации. Например, «Система, которая «обречена» на сбой из-за неправильной настройки пути в файловой системе, не дает сбой при запуске, потому что путь в файловой системе не проверяется при запуске. Только когда поступает клиентский запрос, система дает сбой, случайным образом, позже».
  • Найти причину отказа проще в системе fail-fast, поскольку система сообщает об отказе с максимально возможной информацией как можно ближе к моменту отказа. В отказоустойчивой системе отказ может остаться незамеченным, тогда как в системе, которая не является ни отказоустойчивой, ни fail-fast, отказ может быть временно скрыт, пока он не вызовет какую-то, казалось бы, не связанную проблему позже.
  • Система с функцией быстрого восстановления, которая спроектирована так, чтобы останавливаться и сообщать об ошибке в случае сбоя, с меньшей вероятностью ошибочно выполнит необратимую или дорогостоящую операцию.

Разработчики также называют код fail-fast, если он пытается как можно скорее завершиться неудачей при инициализации переменной или объекта. В объектно-ориентированном программировании объект, спроектированный fail-fast, инициализирует внутреннее состояние объекта в конструкторе, запуская исключение, если что-то не так (вместо того, чтобы разрешать неинициализированные или частично инициализированные объекты, которые позже завершатся неудачей из-за неправильного «сеттера»). Затем объект можно сделать неизменяемым , если не ожидается никаких дальнейших изменений внутреннего состояния. В функциях код fail-fast будет проверять входные параметры в предварительном условии . В архитектурах клиент-сервер fail-fast будет проверять клиентский запрос сразу по прибытии, перед его обработкой или перенаправлением другим внутренним компонентам, возвращая ошибку, если запрос завершается неудачей (неправильные параметры, ...). Код, спроектированный fail-fast, уменьшает внутреннюю энтропию программного обеспечения и сокращает усилия по отладке.

Преимущества системы с быстрым отказом:

  • Раннее обнаружение ошибок: ошибки выявляются на самых ранних этапах, упрощая диагностику и исправление.
  • Упрощение отладки: поскольку система останавливается сразу после обнаружения ошибки, легче понять, где именно произошла проблема.
  • Повышение надежности: уменьшает риск накопления ошибок и их каскадного распространения в других частях системы.

Примеры

  • Приложение/система с высокой отказоустойчивостью проверяет готовность всех ресурсов ввода/вывода, необходимых для будущих вычислений, до поступления любого запроса на вычисления.
  • Отказоустойчивое приложение/система проверяет правильность всех неизменяемых начальных конфигураций при запуске.
  • Функция fail-fast — это функция, которая проверяет все входные данные функции в предварительном условии , прежде чем приступить к каким-либо вычислениям или бизнес-логике в такой функции.
  • Функция fail-fast обычно выдает исключение времени выполнения при обнаружении какого-либо ненормального вычисления, что приводит к сбою системы, если никакая другая функция не предусмотрела «перехват», вместо того, чтобы возвращать некоторое значение ошибки без каких-либо (оптимистичных) предположений о правильном управлении возникшей ошибкой.
  • В области программной инженерии итератор с быстрым отказом — это итератор , который пытается вызвать ошибку, если последовательность элементов, обрабатываемых итератором, изменяется во время итерации .
  • При наличии начального состояния в конечном автомате система с быстрым отказом проверит такое состояние и быстро откажет.
  • При наличии изменения состояния в машине состояний система fail-fast остановит машину, если изменение состояния запрещено. Может случиться так, что запрещенное изменение состояния вызвано неправильным внешним вводом. В этом случае система fail-fast прекратит обработку запроса, как только будет обнаружен неправильный ввод (вместо делегирования реализации машины состояний).

Примеры использования fail-fast в программировании


Проверка аргументов в методах: Если метод ожидает определенные значения или типы данных, он может сразу выбросить исключение, если эти условия не выполняются.


function processData(array $data): void {
    if (empty($data)) {
        throw new InvalidArgumentException("Данные не должны быть пустыми.");
    }
    // Основная логика
}

processData([]); // Немедленная ошибка из-за пустого массива


Fail-fast коллекции: В некоторых языках программирования (например, Java) коллекции реализованы как fail-fast: если коллекция изменяется во время итерации, выбрасывается исключение. В PHP такое можно реализовать через контроль версий.

class FailFastCollection implements IteratorAggregate {
    private array $items = [];
    private int $version = 0;

    public function add($item): void {
        $this->items[] = $item;
        $this->version++;
    }

    public function getIterator(): Iterator {
        $currentVersion = $this->version;
        foreach ($this->items as $item) {
            if ($currentVersion !== $this->version) {
                throw new RuntimeException("Коллекция была изменена во время итерации.");
            }
            yield $item;
        }
    }
}

$collection = new FailFastCollection();
$collection->add(1);
$collection->add(2);

foreach ($collection as $item) {
    echo $item;
    $collection->add(3); // Ошибка из-за изменения коллекции
}

​


Fail-fast API: Если система взаимодействует с внешним API и получает ответ, который не соответствует ожиданиям, она может немедленно завершить работу и выбросить ошибку, чтобы избежать каскадного распространения ошибок.


function fetchData(string $url): array {
    $response = file_get_contents($url);
    $data = json_decode($response, true);
    
    if (json_last_error() !== JSON_ERROR_NONE) {
        throw new RuntimeException("Ошибка декодирования JSON.");
    }

    if (!isset($data['expectedField'])) {
        throw new RuntimeException("Отсутствует ожидаемое поле в ответе.");
    }

    return $data;
}


В этих примерах fail-fast защищает код от некорректных данных, нарушений контракта и несанкционированных изменений, обеспечивая стабильность системы и упрощая отладку.

Fail fast (в бизнесе) сущность, примеры и критика

Этот термин широко использовался в качестве метафоры в бизнесе, начиная с 2001 года, означая, что предприятия должны проводить смелые эксперименты, чтобы определить долгосрочную жизнеспособность продукта или стратегии, а не действовать осторожно и вкладывать годы в обреченный подход. Он стал принят как своего рода «мантра» в культуре стартапов , то есть «Ошибайся быстро, ошибайся часто».

Fail fast , также иногда называемый fail fast, fail often или fail cheap , — это концепция управления бизнесом и теория организационной психологии , которая утверждает, что компании должны поощрять сотрудников использовать процесс проб и ошибок для быстрого определения и оценки долгосрочной жизнеспособности продукта или стратегии и двигаться дальше, сокращая потери, а не продолжая инвестировать в обреченный подход. Это элемент корпоративной культуры некоторых организаций , особенно в технологической отрасли и в Кремниевой долине США .

Ключевое обоснование заключается в том, что неудача обнаруживается до значительных инвестиций, на самых ранних возможностях в усилиях. Сопутствующие практики предназначены для выявления проблем до начала обширных исследований и разработок и задолго до выпуска или развертывания . Иногда неправильно понимаемый как поощрение полного провала, важнейший принцип — «Принцип 4: Сдерживай риск убытков — проваливайся дешево».

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

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

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

Эта концепция была рассмотрена в академических кругах еще в 1992 году Симом Ситкиным из Университета Дьюка .

Говоря о подразумеваемом обещании концепции сотрудникам, Майкл ДеПриско из Института управления проектами в 2022 году раскритиковал концепцию как банальность , написав, что, хотя менеджеры поощряют сотрудников быть готовыми к неудачам, на практике последствия неудач часто наносят ущерб работе или карьере. Он утверждал, что слегка измененный подход, который он называет «Учись быстро», может работать, если руководство будет следовать подразумеваемому предлагаемому обеспечению работы и карьеры за неудачи, а также учиться на этих неудачах.

Эта концепция также подверглась критике, в том числе со стороны TechTarget и бизнес-школы Университета Квинсленда , за риск поощрения посредственности .

По данным New Yorker , многочисленные исследования предпринимательского успеха показали, что «данные свидетельствуют о том, что прошлые неудачи на самом деле просто предсказывают будущие неудачи» и что прогнозируемые преимущества обучения в результате неудач могут быть чрезмерно оптимистичными.

Эта концепция широко использовалась в качестве метафоры в бизнесе, начиная как минимум с 2001 года. Она широко используется в технологической и фармацевтической отраслях . Она стала мантрой и знаком чести в культуре стартапов , особенно в технологической отрасли и в Кремниевой долине США, где она является обычной частью корпоративной культуры.

Примеры

Кэрол Бартц обсуждала концепцию, которую она назвала «fail-fast forward» в своей речи в Стэнфордском университете в 2001 году, описывая систему, которую она внедрила в Autodesk, чтобы «спроектировать компанию, способную потерпеть неудачу в определенных миссиях, быть устойчивой к неудачам и реагировать на них, быстро преодолевая их».

Джефф Безос из Amazon написал в письме акционерам в 2015 году, что «неудача и изобретение — неразлучные близнецы. Чтобы изобретать, нужно экспериментировать, и если вы заранее знаете, что это сработает, это не эксперимент». Chaos Monkey — проект Netflix, который намеренно имитирует или вызывает неудачу, чтобы проверить способность к восстановлению. Ранний девиз Facebook был « Двигайся быстро и ломай вещи ». Японская химическая фирма Kao , рассматривая предлагаемый выход на производство дискет , проверила вопрос о том, будут ли потребители принимать диски с брендом компании, не известной своими технологическими продуктами, покупая дискеты у другого производителя и маркируя их как диски Kao, тем самым недорого оценивая вероятность неудачи. Генеральный директор компании Procter and Gamble Лафли в своей книге «The Game-Changer » приводит список, который Макграт характеризует как «даже [праздник]», дорогостоящих неудач продуктов и уроков, извлеченных компанией из этих неудач за время его пребывания на посту генерального директора .

Существуют примеры психологической концепции, не связанные с бизнесом, которые рассматриваются в книге по самопомощи « Проваливай быстро, терпи неудачу часто » Джона Крумхольца и Райана Бабино из Стэнфордского университета .

Вау!! 😲 Ты еще не читал? Это зря!

создано: 2024-10-29
обновлено: 2024-10-29
5



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Теория надёжности

Термины: Теория надёжности