Продакшен-сервис полностью упал, когда отказала одна зона доступности облака — в чём изъян дизайна?
Утром была авария зоны доступности облака. Ваш сервис был полностью недоступен всё её время, а затем восстановился сам, когда зона вернулась. Руководство хочет знать, почему одна зона положила весь сервис. Вот развёртывание.
Регион: eu-1
Балансировщик: single-zone (только eu-1a)
Web ASG: 6 инстансов, все в подсети eu-1a
База: один инстанс, eu-1a, без standby
Кэш: один узел, eu-1a
Авария: eu-1a недоступна 09:12-10:40; сервис лежал всё окно
Объясните, почему он упал, и как вы бы его перепроектировали.
Все слои жили в одной зоне, eu-1a, поэтому с её отказом упал весь стек — шесть инстансов в одной зоне это резерв против потери инстанса, а не зоны. Фикс: подсети и группа автоскейлинга по двум-трём зонам, балансировщик с health-проверками и БД в multi-AZ со standby и failover. Потеря зоны срежет мощность, а не доступность.
- ✗Винить число инстансов, когда изъян — размещение в одной зоне
- ✗Утверждать, что регион всегда падает целиком, и спасает лишь multi-region
- ✗Винить софт балансировщика вместо одно-зонной топологии
- →Какое минимальное изменение удержало бы сервис живым в эту аварию?
- →Как доказать, что перепроектированный сервис переживёт потерю зоны заранее?
Решение
Корневая причина
Каждый слой — балансировщик, web ASG, база, кэш — целиком в eu-1a. Отказ одной зоны положил всё сразу. Шесть инстансов — это резерв против потери инстанса, но не против потери зоны: они делят один домен отказа.
Редизайн — зона как домен отказа, который переживают
Балансировщик: multi-AZ (eu-1a, eu-1b, eu-1c), health-проверки целей
Web ASG: подсети в eu-1a/1b/1c, минимум по зоне, авто-замена узлов
База: managed, multi-AZ, автоматический failover на standby
Кэш: реплика/кластер в нескольких зонах (или деградация без него)
Теперь потеря eu-1a: балансировщик снимает её цели, ASG поднимает мощность в eu-1b/1c, БД делает failover на standby. Сервис срезает мощность, а не доступность.
Проверка
Не нужен второй регион: зоны региона — независимые домены отказа с низкой задержкой между ними, так что multi-AZ и есть базовая единица HA. Второй регион — это уже про DR при отказе целого региона, дороже и сложнее.