Красота на переменах: создание отказоустойчивых систем через хаос

Автор: Laura McKinney
Дата создания: 2 Апрель 2021
Дата обновления: 1 Июль 2024
Anonim
"Хаос. Создание новой науки", Джеймс Глейк, -аудиокнига часть 3
Видео: "Хаос. Создание новой науки", Джеймс Глейк, -аудиокнига часть 3

Содержание


Источник: давление UA / iStockphoto

вынос:

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

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

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

Подготовка к неудаче

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


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

Когда дело доходит до тестирования устойчивости, правильные инструменты не должны слишком беспокоиться о том, как обрабатываются запросы, просто о том, что они в конечном итоге оказывают правильное влияние. Помните, что при определенных условиях служба ввода может не передать запрос остальной системе, но не может сообщить об ошибке. Не рискуйте проблемами, попадающими под радар мониторинга, следя за тем, чтобы сквозная проверка действительно происходила. (Подробнее см. Tech Failures: Можем ли мы жить с ними?)

Следующие шаги

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


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

Если вы запускаете несколько микросервисов, вы можете спросить, произойдет ли глобальный сбой в случае сбоя какой-либо отдельной службы. Или, если у вас есть механизм организации очередей для буферизации связи между службами, что произойдет, когда потребительская служба (или службы) перестанут работать? Смогут ли пользователи работать с вашим приложением? И учитывая среднюю нагрузку, сколько времени у вас до того, как очереди переполнятся, и вы начнете терять s?

Нет ошибок, нет стресса - ваше пошаговое руководство по созданию изменяющего жизнь программного обеспечения без разрушения вашей жизни

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

После того как вы определили несколько ключевых вопросов о своей инфраструктуре, вы можете начать перечислять различные способы имитации этих сбоев. Этого может быть достаточно, чтобы остановить конкретную службу или сервер базы данных. Возможно, вы захотите заблокировать основной поток службы для имитации взаимоблокировки, пока ее контейнер все еще реагирует и работает. Вы можете решить ввести правила в вашей сети, чтобы блокировать трафик между конкретными службами. В средах Linux вы можете использовать такие инструменты, как "tc", чтобы эмулировать сетевые ситуации, такие как пакеты с высокой задержкой, отброшенные, поврежденные или дублированные пакеты. (Может быть важно вовлечь пользователей в тестирование. Подробнее о 4 причинах, по которым конечные пользователи должны участвовать в тестировании до UAT.)

Обучение и улучшение с помощью упражнений

Один из наиболее ценных аспектов создания сценариев отказов заключается в том, что они могут раскрыть все потенциальные способы отказа системы, тем самым проложив путь к логике самовосстановления. Ваша команда выполнит шаги по восстановлению сервисов вручную - кстати, отличное упражнение для подтверждения того, что они могут сделать это в рамках SLA. Можно автоматизировать этот процесс восстановления, но в то же время вы можете быть спокойны, зная, что ваша команда прошла через процесс возврата услуг в нужное русло. Делая сценарии отказов случайными и регулярными и не раскрывая полные сведения о прогоне, вы также можете включать в анализ детализацию и диагностику, что, в конце концов, является важной частью SLA.

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