Лекция
Система с быстрым отказом ( 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 защищает код от некорректных данных, нарушений контракта и несанкционированных изменений, обеспечивая стабильность системы и упрощая отладку.
Этот термин широко использовался в качестве метафоры в бизнесе, начиная с 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 » приводит список, который Макграт характеризует как «даже [праздник]», дорогостоящих неудач продуктов и уроков, извлеченных компанией из этих неудач за время его пребывания на посту генерального директора .
Существуют примеры психологической концепции, не связанные с бизнесом, которые рассматриваются в книге по самопомощи « Проваливай быстро, терпи неудачу часто » Джона Крумхольца и Райана Бабино из Стэнфордского университета .
Комментарии
Оставить комментарий
Теория надёжности
Термины: Теория надёжности