open atlas
↑ К треку
AWS на практике AWS · 01 · 01

Регионы и зоны доступности

Инфраструктура AWS — иерархия доменов отказа и задержки. Регион — изолированная географическая область, зона доступности — независимый ЦОД внутри неё. Размещай сервис в ≥2 зонах, иначе отказ одной зоны кладёт всё.

AWS Middle ◷ 16 min
Уровень
ОсновыJuniorMiddleSenior

Инстансы 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-1eu-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 и балансировщик — крутится в одной зоне доступности. Эта зона теряет питание. Что произойдёт и в чём ошибка дизайна?

Вспомните перед уходом
  1. 01
    Почему региональный сервис нужно проектировать минимум на две зоны доступности и что делает RDS Multi-AZ, когда его зона отказывает?
  2. 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-уровень. Открой, попробуй, потом открой ответ.

вспомнитьприменитьуглубить0 из 5 завершено

Что-то непонятно?

Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.

хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.