|
(В оригинале Everything will ultimately fail)
Поскольку оборудование может отказать, мы добавляем избыточность. Это позволяет нам пережить одиночный отказ оборудования, но повышает вероятность того, что в любое время в системе будет хотя бы один отказ.
Программное обеспечение также может отказывать. Мы добавляем системы мониторинга для обнаружения отказов и оповещения о них, но мониторинг тоже является программным обеспечением, и тоже подвержен сбоям.
Люди делают ошибки. Поэтому мы автоматизируем процессы и диагностику. Автоматизация позволяет избежать ошибок, вносимых человеческим фактором, но повышает шансы на то, что ошибка останется незамеченной – ни одна автоматизированная система не может адекватно реагировать на такое же количество ситуаций, как это может делать человек.
Поэтому мы добавляем мониторинг и в автоматизацию. Еще больше программного обеспечения, еще больше возможностей для сбоев и отказов.
Сети состоят из аппаратного и программного обеспечения плюс очень длинных проводов. И конечно же, поэтому тоже подвержены сбоям. Даже когда они работают, они непредсказуемы, потому что пространство состояний большой сети, с практической точки зрения, бесконечное. Отдельная компонента работает вполне детерменированно, а поведение системы в целом становится хаотичным.
Любой механизм, предназначенный для предотвращения какого-либо сбоя или поломки, привносит новые возможные сбои или поломки. Мы создаем кластерное ПО для переноса приложения с отказавшего сервера на работающий, но при этом не можем никак проконтролировать работоспособность кластерной сети.
Стоить вспомнить, что авария атомной станции на острове Трех Миль была вызвана неисправностью предохранительного клапана – механизма безопасности, предназначенного для предотвращения последствий превышения давления в контуре выше допустимого.
И что же мы можем с этим сделать?
Примите как данность то, что в вашей системе будут происходить сбои и отказы. Если вы это не признаете, вы потеряете возможность обнаружения и контроля таких ситуаций – нельзя контролировать то, чего не может случиться. Как только вы признаете, что сбои возможны, вы получите возможность спроектировать определенные реакции системы на конкретные сбои с целью минимизировать последствия и защитить остальные части системы.
Если вы не заложите в систему режимы работы в случае сбоев, то сбои все равно случатся, но система при этом будет вести себя полностью непредсказуемо.
Автор оригинала - Michael Nygard
|