Регионы и зоны доступности
Инфраструктура AWS — иерархия доменов отказа и задержки. Регион — изолированная географическая область, зона доступности — независимый ЦОД внутри неё. Размещай сервис в ≥2 зонах, иначе отказ одной зоны кладёт всё.
Инстансы EC2 крутились в us-east-1a. База RDS крутилась в us-east-1a. Балансировщик указывал на us-east-1a. Всё работало безупречно — до утра, когда одна зона доступности в us-east-1 потеряла питание. Каждый слой стека был в этой одной зоне, поэтому весь продукт погас, пока конкурент в том же регионе, размазавший нагрузку по трём зонам, не уронил ни одного запроса. Архитектура была неправильной не потому, что была сложной. Она была неправильной, потому что у неё не было второго домена отказа.
К концу урока ты будешь знать, где именно размещать нагрузку, почему развёртывание в одной зоне — тихий убийца production-аптайма и что именно ждёт от тебя домен SAA-C03 по отказоустойчивым архитектурам.
Регион, зона, edge: иерархия отказа и задержки
Глобальное присутствие AWS — это не одно облако. Это намеренно слоёный набор границ изоляции, и твоя задача как архитектора — разместить нагрузку на правильной границе под тот радиус поражения и задержку, которые ты можешь стерпеть.
Регион — это независимая географическая область: us-east-1 (Сев. Вирджиния), eu-central-1 (Франкфурт), ap-southeast-1 (Сингапур). Регионы изолированы друг от друга по дизайну: они не делят ЦОДы, и AWS не реплицирует твои данные между ними автоматически. Регион выбирают по трём причинам. Задержка — размести вычисления ближе к пользователям. Резидентность данных и закон — GDPR или банковский регулятор могут запретить вывоз клиентских данных из Франкфурта, а поскольку данные остаются в регионе, пока ты сам их не скопируешь, выбор eu-central-1 — это уже мера комплаенса. Цена — один и тот же тип инстанса в разных регионах может стоить заметно по-разному.
Зона доступности (Availability Zone, AZ) — это один или несколько обособленных ЦОД внутри региона, у каждого независимые питание, охлаждение и физическая сеть, разнесённые достаточно далеко, чтобы пожар, наводнение или отказ питания в одном вряд ли задели другой, — но при этом достаточно близко (обычно в пределах ~100 км / единиц миллисекунд), чтобы репликация оставалась дешёвой. AWS держит примерно 33 региона по миру, и в каждом регионе минимум три зоны (у большинства — от трёх до шести). Два свойства, делающие зоны рабочей лошадкой отказоустойчивого дизайна, по дизайну в противоречии: зоны отказывают независимо (гарантия изоляции), но при этом соединены высокоскоростными приватными линками с низкой задержкой — round trip между зонами внутри региона обычно ~1-2 мс, против десятков-сотен мс между регионами (например, us-east-1↔eu-west-1 — примерно 70-90 мс round trip). Этот линк в 1-2 мс — причина, по которой синхронный standby базы можно держать в другой зоне без ощутимого налога на задержку, тогда как межрегиональный синхронный standby платил бы 70-90 мс на каждой записи.
Под регионом лежат две конструкции «только про задержку», которые стоит назвать. Edge-локации — это точки присутствия CDN CloudFront, их сотни, гораздо больше, чем регионов, и они кэшируют контент близко к пользователям. Local Zones выносят кусок вычислений и хранилища в город ради нагрузок со сверхнизкой задержкой. Обе снижают задержку; ни та, ни другая не место для долговечного состояния.
Региональный по умолчанию, глобальный — по исключению
Прежде чем выбирать сервис, спроси: в каком домене отказа он живёт и кто отвечает за его размазывание? Ответ определяет потолок твоей отказоустойчивости.
Большинство сервисов AWS региональны: когда ты создаёшь инстанс EC2, базу RDS, очередь SQS или бакет S3, он существует в одном регионе и управляется control plane этого региона. Для отказоустойчивости из этого следует резкий вывод — региональный сервис доступен ровно настолько, насколько доступны зоны, по которым ты его размазал. Для высокой доступности нужно проектировать минимум на две зоны доступности, потому что развёртывание в одной зоне наследует доступность одного ЦОД, а ЦОДы отказывают.
Небольшой набор сервисов глобален, с единым control plane на все регионы: IAM (твои пользователи, роли и политики действуют на весь аккаунт), Route 53 (DNS с health-чеками, способными переключать трафик между регионами) и CloudFront (CDN, отдаваемый из edge-локаций повсюду). Понимание, в какую корзину попадает сервис, говорит тебе, где его домен отказа и нужно ли вообще думать про multi-Region для него.
| Область | Примеры | Домен отказа | Что ты обязан сделать |
|---|---|---|---|
| Зональный | инстанс EC2, том EBS, одна подсеть | Одна зона | Сам реплицируй ресурс в ≥2 зоны |
| Региональный | S3, SQS, DynamoDB, RDS Multi-AZ, ALB | Покрывает зоны одного региона | Включи/настрой его multi-AZ опцию; выбери регион под закон и задержку |
| Глобальный | IAM, Route 53, CloudFront | Все регионы | Ничего ради зональной устойчивости; используется для маршрутизации между регионами |
▸Почему это работает
Почему AWS просто не реплицирует всё между регионами за тебя? Потому что межрегиональная репликация — это трейдофф, который ты обязан взять на себя, а не дефолт. Копирование данных во второй регион добавляет межрегиональную сетевую задержку (десятки-сотни миллисекунд, намного выше линка в единицы мс между зонами) и стоимость egress (платишь за гигабайт за вынос данных из региона). Это ещё и может сломать комплаенс, который держится на том, что данные никогда не покидают свой регион. Поэтому AWS держит твои данные внутри одного региона, пока ты явно не включишь репликацию, — делая «остаться в регионе» безопасным, дешёвым и законным дефолтом, а «уйти в multi-Region» — намеренным, посчитанным по деньгам решением ради disaster recovery или глобальной задержки.
Конкретный multi-AZ дизайн
Когда ты принимаешь чужую архитектуру или проектируешь новую, пройдись по каждому уровню и спроси: что случится с этим ресурсом, если его зона исчезнет? Если ответ «ляжет» — этому уровню нужна вторая зона.
Отказоустойчивость перестаёт быть абстракцией в тот момент, когда ты рисуешь VPC. Возьми классический трёхуровневый веб-сервис в eu-central-1 и размажь его по двум зонам (три лучше для систем на кворуме):
- VPC (Virtual Private Cloud — изолированная виртуальная сеть внутри региона) с одной подсетью на зону на уровень — скажем, публичная подсеть в
eu-central-1aиeu-central-1bпод балансировщик и приватная подсеть в каждой зоне под app-серверы и базу. - Application Load Balancer (ALB), подключённый к обеим публичным подсетям. ALB — региональный сервис, запускающий узлы в каждой включённой зоне; он делает health-чеки таргетов и перестаёт маршрутизировать в зону, чьи инстансы нездоровы.
- Auto Scaling group из app-серверов, размазанная по обеим приватным подсетям, чтобы ёмкость пережила потерю одной зоны.
- RDS Multi-AZ: primary в
eu-central-1aс синхронным standby вeu-central-1b. AWS реплицирует записи на standby и при отказе primary автоматически делает failover, переключая DNS-имя базы на standby — обычно за минуту-две, без потери подтверждённых данных, потому что репликация была синхронной.
Сценарий отказа, против которого это защищает, конкретен: если eu-central-1a гаснет, ALB перестаёт слать трафик на нездоровые таргеты, в Auto Scaling group остаются серверы в eu-central-1b, а RDS повышает standby. Продукт остаётся на живой зоне. Сравни с версией из хука на одной зоне: каждый уровень в одной зоне означает, что отказ зоны — это полный отказ, переключаться не на что. Посчитай радиус поражения: реальный зональный сбой (хорошо задокументированные зональные отказы us-east-1 — канонический пример) кладёт 100% стека на одной зоне на всё время события — минуты-часы, — тогда как цена его избежать была standby во второй зоне и трафик межзональной репликации по ~$0.01/GB, часто пара долларов в месяц на небольшом парке. Асимметрия и есть весь аргумент: одна зона «экономит» цену standby и покупает тебе радиус поражения в 100% простоя. Это ровно та отказоустойчивость, которую проверяет домен SAA-C03 «Design Resilient Architectures»: верный ответ почти всегда включает размазывание нагрузки по нескольким зонам.
Регулируемому финтеху из ЕС нужна высокодоступная прод-база. Клиентские данные обязаны оставаться в ЕС. Какое развёртывание подходит лучше?
Весь твой стек — EC2, RDS и балансировщик — крутится в одной зоне доступности. Эта зона теряет питание. Что произойдёт и в чём ошибка дизайна?
- 01Почему региональный сервис нужно проектировать минимум на две зоны доступности и что делает RDS Multi-AZ, когда его зона отказывает?
- 02Чем регион отличается от зоны, какие сервисы AWS глобальны, а не региональны, и почему резидентность данных следует из выбора региона?
Глобальная инфраструктура AWS — это вложенный набор доменов отказа и задержки. Регион — изолированная географическая область; регионы не делят ЦОДы, и твои данные остаются внутри одного, пока ты не реплицируешь их, что делает выбор региона твоим рычагом для задержки, закона (резидентность данных) и цены. Внутри каждого региона минимум три зоны доступности — обособленные ЦОД с независимыми питанием, охлаждением и сетью, но соединённые приватными линками с задержкой в единицы миллисекунд, так что они отказывают независимо и при этом поддерживают синхронную репликацию между собой. Большинство сервисов AWS региональны и доступны ровно настолько, насколько доступны зоны, по которым ты их размазал, поэтому высокая доступность означает проектирование минимум на две зоны: подсети по зонам, ALB, покрывающий их, Auto Scaling group из app-серверов в каждой и RDS Multi-AZ с синхронным standby, делающим failover автоматически. Небольшой набор сервисов глобален — IAM, Route 53, CloudFront. Сценарий, которого стоит бояться, — развёртывание на одной зоне: когда эта зона гаснет, гаснет и весь продукт, потому что нет второго домена отказа, на который можно опереться. Multi-Region — отдельный, намеренный выбор, покупающий disaster recovery и глобальную задержку ценой межрегиональной задержки и стоимости egress, — ровно тот тип рассуждений об отказоустойчивой архитектуре, который ждёт SAA-C03. Теперь, когда встречаешь однозонное развёртывание, ты знаешь и радиус поражения, и лечение: добавь вторую зону, включи multi-AZ опции — и самая частая причина production-простоев уйдёт из твоего реестра рисков.
Практика
Начни сверху. Задачи идут от простого к сложному: вспомнить факт, применить к случаю, затем senior-уровень. Открой, попробуй, потом открой ответ.
Что-то непонятно?
Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.