Первоначально опубликовано на Неудача неизбежна Анкет
Инжиниринг надежности сайта — это многогранное движение, которое сочетает в себе многие практики, менталитет и культурные ценности. Это выглядит целостно на то, как организация может стать более устойчивой, работая на каждом уровне от серверного оборудования до морального духа команды. На каждом уровне SRE применяется для повышения надежности соответствующих систем.
При таком широком воздействии может быть полезно потребоваться время, чтобы переоценить, как повысить надежность системы. В этом сообщении в блоге мы будем выполнять некоторые полезные шаги, чтобы предпринять при повышении надежности системы. В качестве примера мы будем использовать проект разработки, но суть этого совета может быть применена в любом месте SRE.
При анализе надежности системы просто изучение абстрактных метрик, таких как доступность или скорость отклика, рассказывают только половину истории — данные также должны находиться в контексте. Вам также необходимо рассмотреть влияние различных горячих точек проблем с производительностью на пользователей вашего сервиса. Постоянная задержка секунды при входе в ваш сервис может иметь больше, чем случайная полная недоступность обслуживания с меньшим трафиком.
Чтобы улучшить надежность вашей системы значимым образом, вам необходимо определить, какие поездки пользователей являются более критическими. Это позволит вам создать Индикаторы уровня обслуживания Это отражает, где проблемы с надежностью оказывают наибольшее влияние на бизнес. Такие методы, как путешествия пользователей и мониторы черного ящика, могут помочь вам понять точку зрения клиента в вашем сервисе и сосредоточиться на областях, которые наиболее важны.
Теперь, когда вы поняли, где возникают наиболее эффективные проблемы с надежностью, вы можете должным образом расставить приоритеты при разработке надежности. Ваши SLIS можно использовать для установки SLOS и Бюджеты ошибок , Стандарты того, насколько ненадежна ваша система. Новые проекты разработки могут быть оценены за их ожидаемое влияние на надежность, а затем учитываться в рамках бюджета ошибок. При разработке для вашей системы подумайте о надежности как о функции, и на самом деле ваша самая важная функция, поскольку клиенты просто ожидают, что вещи «просто работают».
После того, как у вас будут ваши цели, инженерия надежности предоставляет практику, которые помогут вам связаться с ними, в том числе:
- Системы избыточности: Такие как непредвиденные обстоятельства для использования серверов резервного копирования
- Устойчивость к ошибкам: Такие как алгоритмы коррекции ошибок для входящих сетевых данных
- Профилактическое обслуживание: Такие как езда на велосипеде через аппаратные ресурсы перед сбоем через чрезмерное использование
- Профилактика человеческих ошибок: Такие как очистка и проверка ввода человека в систему
- Оптимизация надежности: Например, написание кода, оптимизированного для быстрой и последовательной загрузки
Иметь в виду эту практику надежности по мере развития, что сделает ваш код приемлемым. В то же время вы можете уверенно ускорить разработку, оценивая ее против SLOS.
Независимо от того, насколько надежны свои системы, всегда возникают непредвиденные проблемы. Это золотое правило SRE: неудача неизбежна. То, как вы реагируете и учитесь на этих инцидентах, определяет, насколько надежны ваши системы после развертывания. SRE поощряет рассматривать инциденты как незапланированные инвестиции в надежность.
Есть три основных компонента в ответ на инцидент, которые приводят к более надежной системе
- Классифицируйте свой инцидент. Создайте схему классификации инцидентов на основе серьезности и типа обслуживания/инцидента. Убедитесь, что ваши классификации являются однозначными и последовательными. Регулярно просматривайте их, чтобы убедиться, что инциденты правильно классифицируются.
- Ответьте на инцидент. Каждая классификация должна указывать на указанный ответ, такой как runbook, который респондент может следовать, чтобы начать решение проблемы. В вашем книге следует указать, кто предупреждается и как они отвечают.
- Запишите детали вашего инцидента. Имейте ретроспективный документ инцидента, который респонденты создают, работая над проблемой, содержащей временную шкалу, предпринятые шаги и общение.
Тщательно реагирование на инциденты помогает системе надежности несколькими способами. На самом основном уровне, реагирование на инциденты эффективно означает, что проблема смягчается быстрее, что уменьшает воздействие на клиента. Когда вы регистрируете классификацию инцидентов, вы найдете закономерности последовательных эффектных типов инцидентов — AREAS, где могут быть сосредоточены усилия по инженерному обеспечению надежности. Наконец, обзор ретроспективы инцидентов может показать, где процедуры могут быть сделаны более эффективными, ускоряя будущие ответы.
Теперь, когда вы создали свои процедуры ответа на инцидент, пришло время проверить их. Тестирование в производстве является практикой использования методов, таких как A/B -тестирование, чтобы безопасно найти проблемы в развернутом коде. Используя фактические производственные среды, влияние проблем с надежностью клиента будет более очевидным. Другое преимущество заключается в том, что вам гарантировано, что тестируемая среда совпадает с клиентами. Однако, если вы хотите проверить на катастрофы надежности, вам понадобится техника, более удаленная от воздействия на клиента, например, Chaos Engineering.
Chaos Engineering — это дисциплина, в которой инженеры преднамеренно вводят сбой в производственную систему для стресс -тестирования и подготовки к гипотетическим сценариям, таким как перебои в сервере, интенсивная нагрузка сети или отказ от сторонних интеграций.
Chaos Engineering преподает много уроков о надежности вашей системы. Поскольку команды реагирования на инциденты относятся к эксперименту так, как если бы это был реальная сбой системы, вы сможете оценить эффективность ваших ответов. Это допускает итерацию и улучшение ваших процедур ответа и устойчивости системы. Вы можете дополнительно имитировать сбои в рамках ответов, таких как ключевые инженеры недоступны, создавая сценарии наихудшего случая, чтобы увидеть, не вызывает ли ваша система шторм. Эти эксперименты могут предоставить полезные данные для будущего инженерного фокуса.
Инциденты, будь то реальные или смоделированные, предоставляют множество информации о том, как ведет себя ваша система. Кроме того, нормальное функционирование вашей системы постоянно выпускает данные об использовании и ответе. Не собирая и не понимая этих данных, вы не сможете принимать значимые решения о том, где и как следует улучшить надежность. Таким образом, необходимо иметь систему наблюдений, созданная для приема и контекстуализации всех данных, которые производит ваша система, имеет важное значение.
Инструменты мониторинга хорошее место для начала. Эти инструменты будут собирать данные со всей вашей системы и представлять их таким образом, чтобы это помогло сделать шаблоны очевидными. Например, гистограмма, показывающая время отклика одного компонента, коррелирующую с гистограммой нагрузки сервера, может выявить причинно -следственную связь. Данные мониторинга могут быть объединены с данными об инцидентах: когда происходит инцидент, снимок контролируемых данных может быть включен в ретроспективу.
Чтобы по -настоящему закрыть цикл от данных, которые вы собираете, до улучшения надежности, вам необходимо посвятить время его изучению. Основной принцип SRE — это то, что совершенен, не является целью; Скорее, улучшение есть. Так же, как вы должны ожидать, что инциденты возникнут даже в самых тщательно разработанных коде, вы должны ожидать, что ваши ответы будут достигнуть ударов скорости, ваши эксперименты выявят слабые точки, и ваш мониторинг будет неполным. Это не должно быть обескураживающим, но мотивирующим: Непрерывно улучшающаяся система — это та, которая действительно устойчива к лицу любых изменений.
Установите регулярные запланированные встречи для рассмотрения ретроспективы инцидентов, SLIS и SLO, мониторинга мониторинга, runbooks и любых других процедур или методов SRE, которые вы реализовали. Эти встречи не должны быть залиты к конкретным инженерам, вовлеченным в инцидент или проект. Например, если встреча посвящена рассмотрению расписания по вызову, предоставленному на тех, кто встречается, для рассмотрения оставшегося бюджета ошибок в проекте разработки, обе команды могут лучше понять ресурсы и давление всей системы.
Тон и мышление этих встреч особенно важны. Вина не должна быть назначена каким -либо конкретным лицам. Вместо этого систематические проблемы должны быть раскрыты совместно. Наказание одного человека ничего не делает для повышения надежности системы, и на самом деле, вероятно, имеет полный противоположный эффект. Работая безумно и устранение факторов инцидентов, систематическая ненадежность может быть решена и улучшена.
Хотите увидеть, насколько безупречно может помочь повысить надежность ваших систем? У нас есть инструменты для совместных ответов, ретроспективы инцидентов, бюджета SLO и ошибок, а также многое другое, помогая таким группам, как Итерабильно уменьшить критические инциденты на 43% Анкет Проверьте демо !
Оригинал: «https://dev.to/blameless/how-to-improve-the-reliability-of-a-system-1jgm»