Иногда в системах возникают коварные ситуации: проверки состояния показывают, что всё хорошо, но по факту ничего не работает. Это называется «серый отказ».
На связи Александр Душеин, технический лидер команды архитекторов Yandex Cloud. Давайте разбираться, как возникают серые отказы и как Zonal Shift помогает с ними справиться.
❇ Что-то может пойти не так на уровне сети
Один из вариантов серого отказа — сбой в сетевой связности, когда в одних направлениях она работает, а в других нет. Например, могут сбоить каналы интернет‑провайдеров.
Целевые ресурсы бэкенда в повреждённой зоне доступности могут по‑прежнему отвечать на все проверки Health Check и показывать зелёный статус. При этом они перестают обрабатывать весь трафик или начинают генерировать ошибки.
Эта ситуация может нарушить работу системы, ведь сетевой балансировщик всё ещё будет рассчитывать на бэкенд со сбоями и статусом «Всё ок!».
❇ Иногда что-то ломается на уровне приложения
На уровне L7 ситуация с серыми отказами становится серьёзнее. Частичная деградация связности может привести к дополнительному ухудшению запросов между зонами: трафик из больной зоны начинает переливаться в здоровую. И наоборот.
🧬 Для управления такими ситуациями мы создали Zonal Shift
Это инструмент для управляемого закрытия конкретной зоны доступности на конкретном балансировщике. Он пригодится не только в ситуации частичных отказов, но и при необходимости закрыть балансировку в зоне доступности, чтобы провести учения или регламентные работы.
Zonal Shift поддерживает два режима:
🟢 Полное закрытие всех балансировщиков в зоне доступности
🟢 Закрытие тех, на которые клиент сам повесил признак «Можно потушить»
Для сетевого балансировщика этот признак позволит сразу перераспределить трафик в другие зоны. Функциональность Zonal Shift поддерживается и на уровне L7, так что в более сложной схеме также можно избежать каскадного сбоя из‑за амплификации. Мы можем явно выключать балансировку на бэкенды в зоне доступности, а семантически это работает аналогично сетевой балансировке (NLB).
При этом важно помнить, что Zonal Shift закрывает не зону, а балансировку трафика в неё. Например, если у клиента есть Kubernetes в нескольких зонах доступности, то микросервисы также будут размещены в них и будут общаться между собой горизонтально.
❇ Что важно учесть
Мы изучили графики и журналы по следам инцидентов и заметили, что настройки балансировки часто бывают неоптимальны. Это приводит к сбоям в работе сервисов, поэтому мы сформулировали правила на уровне NLB:
🟢 Делать проверки готовности целевых ресурсов с интервалом не более 3 секунд
🟢 Указывать корректный порог работоспособности и неработоспособности. Значения должны быть строго больше одной проверки
🟢 Следить за тем, чтобы реализация проверок не требовала много ресурсов для генерации ответа. Тогда не будет повышенной нагрузки
В ней же мы рассказываем, какие именно настройки балансировщиков критически важны для защиты от серых отказов, и делимся подробными инструкциями по отказоустойчивости.
Yandex for Backend
💹 Видишь сбой? И я не вижу. А он есть
Иногда в системах возникают коварные ситуации: проверки состояния показывают, что всё хорошо, но по факту ничего не работает. Это называется «серый отказ».
На связи Александр Душеин, технический лидер команды архитекторов Yandex Cloud. Давайте разбираться, как возникают серые отказы и как Zonal Shift помогает с ними справиться.
❇ Что-то может пойти не так на уровне сети
Один из вариантов серого отказа — сбой в сетевой связности, когда в одних направлениях она работает, а в других нет. Например, могут сбоить каналы интернет‑провайдеров.
Целевые ресурсы бэкенда в повреждённой зоне доступности могут по‑прежнему отвечать на все проверки Health Check и показывать зелёный статус. При этом они перестают обрабатывать весь трафик или начинают генерировать ошибки.
Эта ситуация может нарушить работу системы, ведь сетевой балансировщик всё ещё будет рассчитывать на бэкенд со сбоями и статусом «Всё ок!».
❇ Иногда что-то ломается на уровне приложения
На уровне L7 ситуация с серыми отказами становится серьёзнее. Частичная деградация связности может привести к дополнительному ухудшению запросов между зонами: трафик из больной зоны начинает переливаться в здоровую. И наоборот.
🧬 Для управления такими ситуациями мы создали Zonal Shift
Это инструмент для управляемого закрытия конкретной зоны доступности на конкретном балансировщике. Он пригодится не только в ситуации частичных отказов, но и при необходимости закрыть балансировку в зоне доступности, чтобы провести учения или регламентные работы.
Zonal Shift поддерживает два режима:
🟢 Полное закрытие всех балансировщиков в зоне доступности
🟢 Закрытие тех, на которые клиент сам повесил признак «Можно потушить»
Для сетевого балансировщика этот признак позволит сразу перераспределить трафик в другие зоны. Функциональность Zonal Shift поддерживается и на уровне L7, так что в более сложной схеме также можно избежать каскадного сбоя из‑за амплификации. Мы можем явно выключать балансировку на бэкенды в зоне доступности, а семантически это работает аналогично сетевой балансировке (NLB).
При этом важно помнить, что Zonal Shift закрывает не зону, а балансировку трафика в неё. Например, если у клиента есть Kubernetes в нескольких зонах доступности, то микросервисы также будут размещены в них и будут общаться между собой горизонтально.
❇ Что важно учесть
Мы изучили графики и журналы по следам инцидентов и заметили, что настройки балансировки часто бывают неоптимальны. Это приводит к сбоям в работе сервисов, поэтому мы сформулировали правила на уровне NLB:
🟢 Делать проверки готовности целевых ресурсов с интервалом не более 3 секунд
🟢 Указывать корректный порог работоспособности и неработоспособности. Значения должны быть строго больше одной проверки
🟢 Следить за тем, чтобы реализация проверок не требовала много ресурсов для генерации ответа. Тогда не будет повышенной нагрузки
🔶 А ещё мы подготовили чек‑лист для работы с ALB-сервисами. Ищите его в статье на Хабре: habr.com/ru/companies/yandex/articles/952350/
В ней же мы рассказываем, какие именно настройки балансировщиков критически важны для защиты от серых отказов, и делимся подробными инструкциями по отказоустойчивости.
Подписывайтесь на нас в Telegram: t.me/+aN8Rc-4YJtVlZWZi
1 month ago | [YT] | 2