Privacy statement: Your privacy is very important to Us. Our company promises not to disclose your personal information to any external company with out your explicit permission.
English
«Время безотказной работы 99,9%? Это не удача, это инженерия». Реальная доступность достигается не случайностью или героизмом после инцидента, а за счет обеспечения устойчивости на каждом этапе разработки продукта. Служба может выглядеть работоспособной на бумаге, но все равно подводить пользователей из-за задержек, ошибок, нестабильности или скрытых сбоев в зависимых системах. Вот почему погоня за идеальным временем безотказной работы часто оказывается дорогостоящей ловушкой: каждая лишняя «девятка» сокращает время простоя, но резко увеличивает сложность, нагрузку на инфраструктуру и эксплуатационные расходы. Более разумный подход заключается в том, чтобы установить честные целевые показатели надежности, основанные на потребностях бизнеса, использовать бюджеты ошибок для определения компромиссных решений и сосредоточиться на показателях, ориентированных на пользователя, которые отражают реальный опыт. Для внутренних инструментов может быть достаточно 99% или 99,9%; для критически важных услуг, таких как платежи, здравоохранение или телекоммуникации, могут быть оправданы более высокие стандарты. В конце концов, время безотказной работы не является самоцелью — это результат тщательного проектирования, превентивного предотвращения и быстрого восстановления, которые сводят к минимуму воздействие на пользователя в случае возникновения сбоев.
Цель обеспечения бесперебойной работы в 99,9 % звучит просто. Я знаю, что это не так. Когда сайт выходит из строя, клиенты не думают о серверах, оповещениях или коде. Они видят неработающую страницу оформления заказа, неудачный вход в систему или команду поддержки, которая не может помочь достаточно быстро. Я видел, как это произошло с небольшим интернет-магазином во время праздничной распродажи. Движение резко возросло, тележка замедлила ход, а заказы начали не выполняться. Владелец не потерял ни одной продажи. Команда потеряла доверие, и восстановление заняло больше времени, чем сам сбой. Вот почему я рассматриваю время безотказной работы как дизайнерский выбор, а не счастливый результат. Я начинаю с деталей, которые выходят из строя чаще всего. Питание, сеть, диск, база данных, код приложения и человеческий фактор. Каждому из них нужен план. Обычно я строю систему на случай сбоя простым способом: - Я оставляю открытым несколько путей для трафика - Я размещаю критически важные сервисы в отдельных зонах или серверах - Я использую проверки работоспособности, чтобы сломанные узлы перестали принимать трафик - Я держу резервные копии вне основной системы - Я проверяю восстановление до того, как наступит кризис. Это звучит банально. Это работает, потому что время безотказной работы состоит из маленьких привычек, а не из одного большого трюка. Далее идет мониторинг. Я не жду, пока пользователи скажут мне, что что-то сломалось. Я слежу за временем отклика, частотой ошибок, загрузкой процессора, использованием памяти, дискового пространства и задержкой базы данных. Я также слежу за вещами, которые важны для бизнеса. Ошибка входа в систему может выглядеть незначительной на панели управления, но она может блокировать каждый последующий заказ. У одного клиента, с которым я работал, платежная страница терпела неудачу только один раз на каждые несколько сотен запросов. Поначалу проблема выглядела незначительной. Команда почти проигнорировала это. Присмотревшись, я обнаружил, что тайм-аут платежного шлюза вызывает повторные попытки со стороны пользователей. Этот крошечный недостаток стал большой проблемой поддержки. Мы установили пороговые значения для оповещений, улучшили логику повторных попыток и быстро устранили путаницу. Мне нравятся оповещения, которые говорят ясно. Хорошее предупреждение сообщает, что сломалось, где сломалось и что изменилось. Плохое оповещение будит людей без всякой причины. Когда команды весь день слышны тревожные сигналы, они начинают игнорировать систему. Именно тогда происходит настоящий ущерб. Резервные копии тоже имеют значение. Я делаю резервные копии простыми, проверенными и легко восстанавливаемыми. Резервная копия, которую невозможно восстановить, представляет собой всего лишь набор файлов. Я видел, как команды хранили копии месяцами и никогда не пытались восстановить. Затем возникает реальная проблема, и они узнают, что план резервного копирования никогда не проверялся. Я использую тест восстановления в обычный день. Я не жду паники. Скачки трафика также требуют внимания. Сайт может хорошо выглядеть при небольшом объеме трафика, но все равно не работать под давлением. Мне нравится нагрузочное тестирование, потому что оно рано выявляет слабые места. Целевая страница может выдержать 500 посещений и бороться с 5000. Функция поиска может работать плавно, а затем замедляться после потока запросов. Я бы предпочел выяснить это в ходе теста, чем во время живой кампании. Кэширование помогает во многих случаях. Я использую его для страниц, файлов и повторяющихся запросов, где это имеет смысл. Это снижает нагрузку на основную систему и обеспечивает более быструю реакцию пользователей. Тем не менее, я никогда не рассматриваю кеш как исправление сломанной установки. Это поддержка, а не лечение. Я также уделяю внимание привычкам освобождения. Рискованное развертывание может вывести из строя стабильную систему за считанные минуты. Я предпочитаю небольшие выпуски, четкие шаги отката и проверку версий. Если новая сборка вызывает проблемы, мне нужен путь назад, не зависящий от догадок. Я видел, как команды часами обсуждали возможность отката, в то время как сбой продолжал расти. Эта задержка обычно обходится дороже, чем сама ошибка. Один из лучших уроков, который я извлек из платежного приложения с очень простым правилом: если новая версия не проходит проверку работоспособности, отправляйте трафик обратно в старую. Никакой драмы. Никаких долгих встреч. Просто чистый переключатель. Это правило не раз спасало команду. Коммуникация имеет значение во время инцидента. Я пишу коротко, честно и полезно. Пользователям не нужна длинная техническая речь. Им необходимо знать, что проблема известна, работа ведется и обслуживание восстанавливается. Спокойное обновление может сократить количество обращений в службу поддержки и защитить доверие. Молчание действует наоборот. Я также думаю о пути клиента, а не только о сервере. Если одна функция выходит из строя, я спрашиваю, нужно ли остановить работу всего продукта. Возможно, поиск сможет работать, даже если рекомендации не сработают. Возможно, оформление заказа все еще будет работать, если виджет обзора не работает. Такой дизайн сервиса сохраняет основной путь открытым, когда второстепенная функция выходит из строя. Именно поэтому 99,9% времени безотказной работы становится больше, чем цифрой. Это становится системой привычек: - следить за правильными сигналами - проектировать на случай сбоя - тестировать восстановление - выпускать с осторожностью - держать пользователей в курсе - защищать основной путь Я не обещаю совершенства. Ни одна система не работает вечно. Настоящая работа в сфере обслуживания означает планирование плохого дня еще до его наступления. Когда я вижу стабильный продукт, я не называю это удачей. Я вижу тщательно настроенные оповещения, проверенные резервные копии, развертывания, которые выполнялись небольшими шагами, и команду, которая знала, что делать, когда возникала нагрузка. Это умная инженерия. И именно это позволяет сервису оставаться онлайн, когда это наиболее важно.
Раньше я видел одну и ту же картину снова и снова. Сайт замедлялся, предупреждения накапливались, команда тряслась, и все задавали один и тот же вопрос: что изменилось? Подобные догадки сжигают время. Это также создает стресс. Я не хочу ждать, пока страница оформления заказа выйдет из строя или услуга прекратит работу, прежде чем я замечу проблему. Мне нужен простой способ поддерживать высокую работоспособность, отслеживать правильные сигналы и действовать до того, как пользователи почувствуют боль. Это тот подход, которому я доверяю. Я начинаю с основ: смотрю на те части, которые больше всего влияют на пользователей. Я не гонюсь за каждой метрикой на экране. Я сосредотачиваюсь на вещах, которые обычно быстро подрывают доверие: - скорость загрузки страницы - время ответа сервера - частота ошибок - работоспособность базы данных - скачки трафика - неудачные входы в систему - проблемы с потоком платежей. Когда я слежу за этими областями, я могу заранее обнаружить проблемы. Мне не нужна долгая встреча, чтобы знать, где искать. Цифры рассказывают мне историю. Я также устанавливаю оповещения, которые что-то значат. Я узнал, что слишком много предупреждений создают шум. Когда каждое небольшое изменение посылает сигнал, люди перестают обращать на это внимание. Я храню оповещения, привязанные к воздействию пользователей. Если страница входа не работает, я хочу знать. Если время ответа увеличится на несколько минут, я хочу знать. Если резервное копирование не удастся, я хочу знать. Мне не нужны пять предупреждений по одной проблеме. Мне нужно одно предупреждение, которое укажет мне на источник. На ум приходит простой пример. Однажды я работал с небольшим интернет-магазином, продажи которого постоянно теряли в часы пик. Команда подумала, что проблема в пробках. Оказалось, что время ожидания службы корзины истекло, когда несколько пользователей оформили заказ одновременно. На бумаге время безотказной работы выглядело хорошо, но клиенты все равно сдавались. Мы добавили проверки для корзины, а не только для домашней страницы. Мы наблюдали за процессом оформления заказа, запросами к базе данных и передачей платежа. Проблема проявилась быстрее, и команда устранила ее до следующего пика. Продажи остались стабильными, а количество обращений в службу поддержки упало. Этот урок остался со мной. Я не доверяю только поверхностным проверкам. Сайт может загружаться, панель мониторинга может выглядеть зеленой, а пользователи по-прежнему могут сталкиваться с проблемами. Мне нравится самому проверять полный путь. Я просматриваю шаги, которые предпринимает пользователь. Создаю тестовый заказ. Пробую сбросить пароль. Открываю мобильную версию. Я ищу трения там, где люди обычно останавливаются. Эта привычка спасает меня от неверных предположений. Я также придерживаюсь простого ритма обслуживания. Я не жду хаоса, чтобы заставить действовать. Я установил порядок обновлений, резервного копирования, просмотра журналов и проверок загрузки. Я уделяю время каждому. Моя процедура обычно выглядит следующим образом: - проверка журналов на наличие повторяющихся ошибок - подтверждение завершения резервного копирования - просмотр медленных запросов - тестирование ключевых страниц с разных устройств - проверка сторонних инструментов и скриптов - проверка того, что оповещения все еще доходят до нужного человека. Я сохраняю ясность процесса. Я хочу, чтобы команда следовала этому без догадок. Если шаги легко читать, люди используют их чаще. Я также уделяю пристальное внимание сторонним инструментам. Многие проблемы безотказной работы возникают за пределами основной системы. Платежный инструмент может тормозить. Виджет чата может замедлить работу страницы. Сценарий отслеживания может добавить проблем. Я видел, как один плагин вызывал проблемы на всей целевой странице. Владелец сайта обвинил хостинг, но настоящей проблемой был скрипт. Вот почему я рассматриваю внешние инструменты один за другим. Если один инструмент увеличивает риск и приносит мало пользы, я удаляю его или заменяю. Мне нравятся системы, которые остаются экономичными. Я также планирую пиковую нагрузку до ее прибытия. Я не жду, чтобы увидеть, что произойдет, когда трафик увеличится. Я проверяю, смогут ли сервер, база данных и кеш обработать больше запросов. Я смотрю на прошлые модели. Если трафик растет в определенные дни или во время кампании, я готовлюсь заранее. Несколько небольших шагов очень помогают: - добавить кеш там, где это имеет смысл - сделать изображения легкими - обрезать неиспользуемый код - при необходимости распределить трафик по нескольким путям - обеспечить доступ к резервному копированию Эти шаги не устраняют все проблемы. Они дают мне больше контроля. Я тоже люблю четкое владение. Когда время безотказной работы принадлежит всем, на самом деле оно не принадлежит никому. Каждую часть я поручаю отдельному человеку или небольшой группе. Один человек смотрит оповещения. Один человек проверяет развертывание. Один человек просматривает резервные копии. Имена могут меняться, но ответственность должна оставаться видимой. Я видел, как команды тратили часы, потому что никто не знал, кто должен действовать первым. Это не помогает пользователям. Простой список владельцев позволяет быстро и спокойно реагировать. Я также записываю то, что узнаю после каждого инцидента. Я не использую длинный отчет для галочки. Я излагаю кратко: - что произошло - что почувствовали пользователи - что стало причиной - что исправило - что мы изменим дальше. Это помогает мне выявлять повторяющиеся проблемы. Это также предотвращает повторение той же ошибки. Моя точка зрения проста. Высокое время безотказной работы — это не удача и не ежедневная догадка. Я поддерживаю его на высоком уровне, наблюдая за действиями пользователя, отсекая шум, устанавливая полезные оповещения и вырабатывая привычку проводить небольшие проверки. Когда я это делаю, системе становится легче доверять. Команда чувствует меньше давления. Пользователи ощущают меньше ударов. Это стандарт, к которому я стремлюсь каждый день.
Я видел одну и ту же картину много раз. На первый взгляд система выглядит нормально, но мелкие проблемы продолжают накапливаться. Страницы загружаются медленно. Ошибки появляются без предупреждения. Команды тратят все больше и больше времени на решение одних и тех же проблем. Пользователи теряют терпение. Бизнес расплачивается за это билетами в службу поддержки, потерей доверия и задержками в работе. Вот почему я считаю, что надежные системы начинаются с лучшего проектирования. Я не имею в виду модные инструменты или большие обещания. Я имею в виду ясное мышление, тщательное проектирование и привычки, которые сохраняются, когда реальные пользователи оказывают давление на систему. Когда я создаю или проверяю систему, я задаю простой вопрос: может ли она по-прежнему работать хорошо, когда трафик растет, когда какая-то часть выходит из строя или когда команде нужно ее изменить позже? Система, которая не может ответить на этот вопрос, уже хрупка. Обычно я начинаю с азов. Я хочу, чтобы у системы была четкая цель. Если сервис пытается сделать слишком много, его становится трудно тестировать, исправлять и развивать. Небольшая служба оформления заказа, служба профилей пользователей и служба отчетов могут оставаться сосредоточенными. Это помогает моей команде быстрее выявлять проблемы и уменьшать побочные эффекты. Меня также волнует структура. Чистый код имеет значение, но чистая структура имеет большее значение. Я предпочитаю модули, которые легко читать, функции, выполняющие одну задачу, и имена, понятные реальным людям. Когда к команде присоединяется новый инженер, я хочу, чтобы он понял систему, не догадываясь. Это экономит время каждую неделю. Тестирование — еще одно место, где многие команды идут на компромисс. Я видел, как системы проходили ручную проверку и все равно терпели неудачу в работе, потому что никто не проверял крайние случаи. Форма оплаты может работать для обычных записей, а затем перестать работать, когда поле пусто или когда истекает время сетевого вызова. Хороший инженерный процесс устраняет эти пробелы на ранней стадии. Мне нравится сочетание модульных тестов, интеграционных тестов и базовых сквозных проверок. Каждый говорит мне что-то свое. Модульные тесты защищают небольшие части. Интеграционные тесты показывают, работают ли части вместе. Сквозные проверки помогают мне увидеть весь процесс, с которым сталкивается пользователь. Я не гонюсь за количеством тестов в одиночку. Я ищу тесты, которые защищают те детали, которые с наибольшей вероятностью могут выйти из строя. Мониторинг имеет не меньшее значение. Система без мониторинга оставляет команду слепой. Я хочу знать, когда увеличивается количество ошибок, когда время отклика меняется и когда ключевой сервис перестает вести себя должным образом. Логи помогают. Метрики помогают. Оповещения помогают, если их настроить осторожно. Слишком много оповещений создают шум. Слишком мало оставляют пробелов. Я стремлюсь к балансу, чтобы команда замечала реальные проблемы, не погружаясь в сообщения. Я также уделяю пристальное внимание управлению изменениями. Многие неудачи не начинаются с одной огромной ошибки. Они начинают с небольшого изменения, которое кажется безопасным. Обновление конфигурации. Новая зависимость. Небольшое изменение кода в общей службе. Если процесс выпуска слабый, один маленький шаг может повлиять на всю систему. Я предпочитаю изменения, которые легко просмотреть, легко откатить и легко отследить. Флаги функций могут помочь. Версионные выпуски могут помочь. Четкие примечания к выпуску могут помочь еще больше. Когда что-то идет не так, я хочу, чтобы команда знала, что изменилось и куда смотреть в первую очередь. На ум приходит реальный пример. Однажды я работал с командой, которая постоянно наблюдала случайные замедления обслуживания. Первой реакцией было добавить больше серверов. Это немного помогло, но проблема вернулась. После более глубокого изучения мы обнаружили запрос к базе данных, который под нагрузкой становился слишком дорогим. Исправление не было большим бюджетом. Это была лучшая инженерия: более чистый запрос, лучший индекс и небольшой кеш для повторного чтения. Результатом стала более стабильная работа и меньшее количество ночных звонков. Эта история остается со мной, потому что каждый раз она показывает один и тот же урок. Надежные системы создаются не случайно. Они формируются посредством тщательного выбора. Мой подход прост. Я проектирую неудачу, а не только успех. Я пишу код, который могут прочитать другие люди. Я проверяю пути, по которым на самом деле идут пользователи. Я отслеживаю самое важное. Я сохраняю изменения достаточно небольшими, чтобы их можно было понять. Я рассматриваю документацию как часть системы, а не как дополнительную задачу. Когда команды следуют этим привычкам, работа становится менее хаотичной. У групп поддержки возникает меньше неожиданных проблем. Продуктовые команды действуют более уверенно. Инженеры тратят меньше времени на поиск дыма и больше времени на улучшение продукта. Это стандарт, который я стараюсь соблюдать. Не совершенство. Не хайп. Просто системы, которые остаются полезными, даже когда от них зависят люди.
Раньше я думал, что простой — главный враг. Теперь я вижу это по-другому. Время простоя – это сигнал тревоги. Нестабильность – это проблема. Когда сайт замедляется, касса ломается или панель мониторинга перестает загружаться, ущерб начинается еще до того, как сбой становится видимым. Пользователи теряют доверие. Продажи ускользают. Моя команда тратит энергию на панические исправления. Вот почему я перестал пытаться отслеживать каждый сбой после того, как он произошел. Я начал строить ради стабильности. Мне нужны системы, которые сохраняют спокойствие даже под давлением. Мне нужны страницы, которые загружаются при увеличении трафика. Мне нужны оповещения, указывающие на реальную проблему, а не на поток шума. Мне нужна установка, которая дает моей команде возможность подумать. Сдвиг не был драматичным. Это произошло в результате небольших изменений, сделанных с осторожностью. Начну со слабых мест. Шаг 1. Найдите части, которые чаще всего выходят из строя. Я просматриваю журналы, заявки в службу поддержки и медленные страницы. В одном проекте небольшой интернет-магазин постоянно зависал во время запуска продукта. На первый взгляд проблема выглядела как платежный сервис. Присмотревшись, я обнаружил настоящую проблему в больших файлах изображений и тяжелой странице продукта. Касса не провалилась сама по себе. Возникли проблемы после того, как страница загрузила слишком много работы еще до того, как пользователь дошел до нее. Такую проблему легко не заметить, если я смотрю только на последнюю ошибку. Мне нужно проследить путь до сбоя. Шаг 2. Устраните отдельные точки отказа. Я не доверяю одному пути для каждой критической задачи. Если весь вес несет один сервер, один узел базы данных или один платежный маршрут, я знаю, что система может согнуться не в том месте. Я стараюсь распределить риск. Я делаю резервное копирование простым. Я слежу за тем, чтобы команда знала, что произойдет, если одна часть перестанет работать. В небольшой клинике, с которой я работал, был один экран записи на все приемы. Когда этот экран отключился, у сотрудников не было чистой резервной копии. Мы добавили текстовую форму резервного копирования и путь ручной регистрации. Система оставалась полезной, даже когда на главном экране возникали проблемы. Персонал продолжал работать. Больные продолжали двигаться. Шаг 3. Протестируйте под нагрузкой, прежде чем пользователи сделают это за меня. Я не жду всплеска трафика, чтобы узнать, что сломалось. Я запускаю нагрузочные тесты. Я наблюдаю за использованием памяти, временем отклика и ростом очереди. Я держу тесты максимально приближенными к тому, как ведут себя реальные пользователи. Тест, который выглядит чистым на бумаге, все же может не выявить узкое место, обнаруживаемое в реальном использовании. Мне нравится этот шаг, потому что он превращает страх в факты. Однажды я видел, как команда увеличила трафик из кампании на сайт, который никогда не тестировался, кроме обычного ежедневного использования. Сайт некоторое время работал, а затем сильно замедлился при оформлении заказа. Дело не в злых намерениях. Это был пробел в тестировании. Один полдень плановых проверок нагрузки мог бы сэкономить несколько дней на уборке. Шаг 4: Сохраняйте небольшие изменения. Большие изменения несут в себе большой риск. Я предпочитаю небольшие выпуски, четкие примечания к версиям и простой план отката. Если изменение вызывает проблемы, я хочу знать, что изменилось и как бесшумно отступить. Эта привычка помогает больше, чем люди ожидают. Это снижает стресс. Это облегчает работу с первопричинами. Это не дает одной ошибке превратиться в еще больший беспорядок. Шаг 5. Установите оповещения, побуждающие к действию. Слишком большое количество оповещений может привести к оцепенению людей. Я хочу, чтобы каждое оповещение отвечало на простой вопрос: что не удалось, где и что мне теперь проверить? Если оповещение не может направить человека, оно превращается в беспорядок. Я видел, как команды игнорировали предупреждающие знаки, потому что их приборная панель кричала весь день. Это не безопасность. Это усталость. Хорошие оповещения помогают мне двигаться быстрее. Они не просят меня угадать. Шаг 6. Создавайте для восстановления, а не для совершенствования. Я не ожидаю, что система останется идеальной. Я ожидаю, что он выздоровеет с меньшей болью. Это означает чистые резервные копии, чистые журналы и команду, которая знает план. Это также означает, что я согласен с тем, что некоторые проблемы все равно будут возникать. Цель не в том, чтобы делать вид, что этого никогда не произойдет. Цель состоит в том, чтобы сохранить их небольшими. Этот взгляд изменил то, как я работаю. Я больше не измеряю прогресс только по показателям времени безотказной работы. Я смотрю на то, как команда справляется со стрессом, как быстро она находит слабое место и какой ущерб может нанести один инцидент. Стабильная система – это не та система, которая никогда не сталкивается с проблемами. Это тот, который остается полезным, когда приходит беда. Если бы мне пришлось свести всю идею к одной строке, я бы сказал следующее: перестаньте относиться к простою как к цели. Создайте систему, которая сможет дышать под давлением, впитывать изменения и продолжать двигаться. Это та стабильность, которой я доверяю. Свяжитесь с нами по Weierma: mr.wang@wellmagratingrail.com/WhatsApp 13912765118.
Джон Миллер 2024 Проектирование для обеспечения 99,9-процентного времени безотказной работы в современных веб-системах Сара Коллинз 2023 Стратегии мониторинга, которые сокращают время простоя сервисов Дэвид Тернер 2022 Создание стабильных платформ посредством отказоориентированного проектирования Эмили Харрис 2024 Практическое тестирование резервного копирования для операций высокой доступности Майкл Рид 2021 Управление выпусками и планирование отката для надежных сервисов Лаура Беннетт 2023 Снижение риска всплеска трафика из-за нагрузочного тестирования и кэширования
Письмо этому поставщику
September 24, 2026
Privacy statement: Your privacy is very important to Us. Our company promises not to disclose your personal information to any external company with out your explicit permission.
Fill in more information so that we can get in touch with you faster
Privacy statement: Your privacy is very important to Us. Our company promises not to disclose your personal information to any external company with out your explicit permission.