tgoop.com/interface31/4266
Last Update:
Отказоустойчивость или высокая доступность?
Каждый раз, когда речь заходит о кластерных решениях начинает звучать термин «отказоустойчивый». В связи с этим у многих, особенно не посвященных в тонкости технологии возникают неверные ожидания, которые приводят к негативному опыту эксплуатации подобных систем.
Почему? Потому что «как вы лодку назовете, так она и поплывет». Начнем с понятия «отказоустойчивость». В русском языке он не допускает двойного толкования и обозначает устойчивость системы к отказу части ее компонентов.
Отказоустойчивость, как инженерное понятие, предусматривает сохранение работоспособности системы, возможно с ухудшением эксплуатационных характеристик, при отказе одного или нескольких компонентов.
Примером отказоустойчивой системы можно считать RAID (кроме RAID 0), который сохраняет работоспособность, несмотря на ухудшение характеристик для уровней с четностью, при выходе из строя заданного числа дисков.
При этом сам отказ происходит без видимых последствий для системы и пользователя. На том же RAID1 (зеркало) вы можете вообще не заметить выход из строя одного из дисков.
Теперь вернемся к кластеризации. Является ли кластер отказоустойчивым? Если говорить о современной кластеризации, когда мы говорим о виртуальных средах – то нет. Но то же самое касается и классической кластеризации приложений.
Приложение ничего не знает о внутренней кухне кластера, и оно работает с некоторым сервисом, который запущен не в сферическом вакууме, а на одной из нод кластера или на виртуальной машине, которая выполняется на одной из нод.
При этом все сетевые подключения принимает именно конкретная нода и именно в ее оперативной памяти находится обрабатываемая экземпляром сервиса информация.
Что будет при отказе этой ноды? Все открытые сеансы будут закрыты, вся несохраненная информация в оперативной памяти потеряна, все незафиксированные транзакции будут в последствии откачены.
Так о какой отказоустойчивости идет речь? Понятно, что отказоустойчивостью в классическом ее понимании тут и не пахнет. Все дело в неправильном и неудачном переводе термина «failover», в английском языке, в отличие от русского, имеющего несколько значений.
Одно из них действительно «отказоустойчивый», но в другом контексте это же слово переводится как «с обработкой отказа», что более точно отражает происходящие в кластере процессы.
Что делает кластер в случае отказа одной из нод? Он запускает отказавшие сервисы на оставшихся нодах, либо перенаправляет сеансы пользователей на работающие экземпляры служб.
Это и называется «обработка отказа», т.е. при отказе одной из нод кластер автоматически выполняет восстановление отказавшего сервиса. Но это не отказоустойчивость, а именно быстрое восстановление.
А можно ли передать рабочие процессы с одной ноды на другую без прерывания их работы? В целом да, но только при условии нормально функционирующего кластера. В этом случае одна нода передает другой содержимое оперативной памяти процесса и переключает на нее сетевые соединения.
Что касается виртуализации, то миграция без остановки работы доступна только для виртуальных машин и недоступна для контейнеров. Почему? Потому что контейнер использует ядро и окружение хостовой системы, которое невозможно передать на другой хост, поэтому контейнер обязательно потребуется перезапустить после передачи на другую ноду.
В случае отказа ноды содержимое памяти как виртуальной машины, так и контейнера теряется, и мы можем только выполнить холодный перезапуск на другом узле.
В связи с чем сегодня употребление термина «failover» считается нежелательным, как и русскоязычного «отказоустойчивый». Для того, чтобы избежать путаницы рекомендуется использовать термин «high availability» или «высокая доступность» по-русски.
Этот термин не вызывает неоправданных ожиданий и абсолютно верно отражает основную характеристику системы – доступность. Потому что даже при отказе одного или нескольких узлов ваши сервисы будут в течении короткого времени восстановлены и снова окажутся доступны для пользователей.
BY Записки IT специалиста

Share with your friend now:
tgoop.com/interface31/4266