Cloud & IT Cert Prep · Урок

Активный режим в нескольких площадках с Global Tables и Route 53

Одновременно поддерживайте полную производственную мощность в двух или более регионах с помощью DynamoDB Global Tables, Aurora Global Database и маршрутизации Route 53 по задержке.

Урок 4 из 413 шагов

«Активный режим в нескольких площадках с Global Tables и Route 53» — бесплатный урок Cloud & IT Cert Prep на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cloud & IT Cert Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cloud & IT Cert Prep содержит 4 уроков всего.

Определение Multi-Site Active-Active

Multi-Site Active-Active — это высший уровень аварийного восстановления, при котором приложение одновременно работает с полной производственной нагрузкой в двух или более регионах AWS. В отличие от active-passive, где резервная среда ожидает передачи управления, в режиме active-active оба региона постоянно обслуживают реальный пользовательский трафик. При отказе одного региона другой немедленно принимает на себя 100% трафика без задержки перехода в резервный режим. Этот шаблон также уменьшает задержку для пользователей по всему миру, обслуживая их из ближайшего региона.

# Active-Active traffic split (normal operation):
# us-east-1: serving ~50% of users (North America)
# eu-west-1: serving ~50% of users (Europe)

# Active-Active traffic split (us-east-1 failure):
# us-east-1: 0% (health check failed)
# eu-west-1: 100% (ASG scales up automatically)

# RTO: near-zero (DNS TTL propagation only)
# RPO: near-zero (with DynamoDB Global Tables)

Архитектура DynamoDB Global Tables

DynamoDB Global Tables — основа данных для архитектур active-active. Global Tables поддерживает репликацию с несколькими ведущими узлами между несколькими регионами: приложения в любом регионе могут локально читать и write в таблицу DynamoDB, а изменения примерно за 1 секунду реплицируются во все остальные регионы. Чтобы включить Global Tables, укажите регионы, в которых должна существовать таблица. AWS автоматически выполняет всю репликацию, разрешение конфликтов (побеждает последняя запись) и переход в резервный режим.

# Create DynamoDB table and add global regions
aws dynamodb create-table \
  --table-name UserSessions \
  --attribute-definitions AttributeName=userId,AttributeType=S \
  --key-schema AttributeName=userId,KeyType=HASH \
  --billing-mode PAY_PER_REQUEST \
  --region us-east-1

# Add replica regions for Global Table
aws dynamodb update-table \
  --table-name UserSessions \
  --replica-updates '[{"Create":{"RegionName":"eu-west-1"}},{"Create":{"RegionName":"ap-southeast-1"}}]' \
  --region us-east-1

Aurora Global Database для активной записи и чтения

Aurora Global Database поддерживает активное чтение, но пассивную запись. Все вторичные регионы обслуживают чтение с задержкой репликации менее 1 секунды, тогда как записи принимает только основной регион. Это идеальный вариант для приложений с преобладанием чтения, которым нужны чтения с низкой задержкой по всему миру и чётко определённый основной регион для записи. При региональном отказе основного региона можно повысить вторичный регион до основного менее чем за 1 минуту, обеспечив низкий RTO для уровня записи. Сравните это с DynamoDB Global Tables, которая поддерживает активную запись во всех регионах.

# Aurora Global Database read configuration
# Primary region (us-east-1): reads + writes
# Secondary region (eu-west-1): reads only
#   ~100ms replication lag, serves EU users low-latency reads

# Application reads from local Aurora endpoint
# Application writes to primary region Aurora endpoint

# Java connection string with region routing:
# readEndpoint=eu-west-1.cluster-ro-xxx.aurora.amazonaws.com
# writeEndpoint=us-east-1.cluster-xxx.aurora.amazonaws.com

Маршрутизация Route 53 для Active-Active

Route 53 — диспетчер трафика для архитектур active-active на нескольких площадках. Используйте маршрутизацию на основе задержки, чтобы направлять каждого пользователя в регион с наименьшей сетевой задержкой от его местоположения. Добавьте проверки работоспособности к записи каждого региона: когда регион не проходит проверку, Route 53 автоматически удаляет его из ответов DNS и направляет весь трафик в оставшиеся работоспособные регионы. Установите для DNS TTL 60 секунд или меньше, чтобы минимизировать время перехода пользователей в работоспособный регион.

# Route 53 latency routing with health checks
aws route53 change-resource-record-sets \
  --hosted-zone-id ZXXX \
  --change-batch '{
    "Changes": [
      {
        "Action": "UPSERT",
        "ResourceRecordSet": {
          "Name": "api.example.com",
          "Type": "A",
          "Region": "us-east-1",
          "SetIdentifier": "us-east-1",
          "HealthCheckId": "hc-us-east-1",
          "AliasTarget": {"DNSName": "alb-us-east-1.amazonaws.com", "EvaluateTargetHealth": false}
        }
      }
    ]
  }'

Auto Scaling для приёма трафика

Когда один регион выходит из строя в конфигурации active-active, выживший регион должен обрабатывать вдвое больший (или ещё больший) обычный трафик. Ваша Auto Scaling Group должна иметь достаточную максимальную ёмкость и политики масштабирования, которые быстро реагируют на нагрузку. Настройте масштабирование с отслеживанием целевого показателя на основе количества запросов ALB на целевой объект, чтобы ASG автоматически добавляла экземпляры при удвоении трафика. Также рассмотрите предварительный прогрев: во время тренировочных переходов в резервный режим наблюдайте, как быстро масштабируется ASG, и убедитесь, что она может достичь требуемой ёмкости в пределах целевого RTO.

# ASG target tracking for request count
aws autoscaling put-scaling-policy \
  --auto-scaling-group-name app-asg-eu-west-1 \
  --policy-name scale-on-requests \
  --policy-type TargetTrackingScaling \
  --target-tracking-configuration '{
    "TargetValue": 1000,
    "PredefinedMetricSpecification": {
      "PredefinedMetricType": "ALBRequestCountPerTarget",
      "ResourceLabel": "app/my-alb/xxx/targetgroup/my-tg/yyy"
    },
    "ScaleInCooldown": 60,
    "ScaleOutCooldown": 30
  }'

Управление сеансами в Active-Active

В одно-региональной архитектуре пользовательские сеансы можно хранить локально на серверах приложений. В многорегиональной конфигурации active-active пользователи при последующих запросах могут переключаться между регионами, из-за чего серверные сеансы перестают работать. Возможные решения: 1) сеансы без состояния — хранить данные сеанса в подписанном JWT или файле cookie, который может проверить любой сервер в любом регионе. 2) DynamoDB Global Tables для сеансов — централизованно хранить сеансы с доступом из любого региона за миллисекунды. 3) ElastiCache с Global Datastore — репликация Redis между регионами для хранения сеансов.

# DynamoDB Global Table for session storage
# Session item structure:
{
  'sessionId': 'sess-abc123',
  'userId': 'usr-456',
  'data': {'cart': [...], 'preferences': {}},
  'expiresAt': 1750000000,
  'lastUpdatedRegion': 'us-east-1'
}

# Application reads from local region DynamoDB
# Writes replicate to all regions within ~1 second
# No sticky sessions needed on the ALB

Конфликты записей и их разрешение

Главная проблема active-active с записью из нескольких ведущих узлов — это конфликты записей. Если два пользователя в разных регионах одновременно обновляют одну запись, какое обновление победит? DynamoDB Global Tables использует побеждает последняя запись, ориентируясь на время записи. Для большинства сценариев это работает хорошо, но может привести к потере данных при конкурирующих обновлениях (например, когда два пользователя одновременно увеличивают счётчик). Проектируйте модель данных так, чтобы избегать одновременных записей в один элемент из разных регионов: используйте условные записи или распределяйте владение данными между регионами.

# Avoid conflicts with conditional writes
aws dynamodb update-item \
  --table-name UserProfiles \
  --key '{"userId":{"S":"usr-123"}}' \
  --update-expression 'SET profileVersion = profileVersion + :inc, username = :name' \
  --condition-expression 'profileVersion = :expectedVersion' \
  --expression-attribute-values '{
    ":inc":{"N":"1"},
    ":name":{"S":"newname"},
    ":expectedVersion":{"N":"5"}
  }'
# If another region already updated version, this fails gracefully

Репликация S3 в Active-Active

Для объектного хранилища в конфигурации active-active используйте межрегиональную репликацию S3 с двунаправленной репликацией (доступна для корзин с включённым версионированием). В отличие от однонаправленной CRR, двунаправленная репликация поддерживает синхронность корзин обоих регионов: объекты, записанные в любом регионе, автоматически реплицируются в другой. Это критически важно для приложений, которые записывают загруженные пользователями файлы в локальную корзину S3, но должны обеспечить глобальный доступ к этим файлам. Включите Replication Time Control (RTC) S3, чтобы гарантировать репликацию 99,99% объектов в течение 15 минут.

# Bidirectional S3 replication
# Bucket A (us-east-1) replicates to Bucket B (eu-west-1)
# Bucket B (eu-west-1) replicates to Bucket A (us-east-1)

# Enable S3 RTC for guaranteed replication time
aws s3api put-bucket-replication \
  --bucket us-east-1-uploads \
  --replication-configuration '{
    "Rules": [{
      "Status": "Enabled",
      "ReplicationTime": {"Status": "Enabled", "Time": {"Minutes": 15}},
      "Metrics": {"Status": "Enabled", "EventThreshold": {"Minutes": 15}},
      "Destination": {"Bucket": "arn:aws:s3:::eu-west-1-uploads"}
    }]
  }'

CloudFront с источниками в нескольких регионах

Используйте CloudFront с группами источников, чтобы создать CDN active-active с автоматическим переходом в резервный режим. Настройте основной источник (ALB в us-east-1) и вторичный источник (ALB в eu-west-1). CloudFront автоматически переключается на вторичный источник, когда основной возвращает ошибки 5xx. Для статических ресурсов, предоставляемых из S3, настройте группы источников, указывающие на корзины S3 в нескольких регионах с двунаправленной репликацией. Это добавляет уровень устойчивости на уровне CDN поверх маршрутизации active-active в Route 53.

# CloudFront origin group for multi-region failover
aws cloudfront create-distribution \
  --distribution-config '{
    "Origins": {
      "Quantity": 2,
      "Items": [
        {"Id": "us-east-1", "DomainName": "alb-us-east-1.amazonaws.com"},
        {"Id": "eu-west-1", "DomainName": "alb-eu-west-1.amazonaws.com"}
      ]
    },
    "OriginGroups": {
      "Items": [{
        "Id": "multi-region-group",
        "FailoverCriteria": {"StatusCodes": {"Items": [500,502,503,504]}},
        "Members": {"Items": [{"OriginId": "us-east-1"},{"OriginId": "eu-west-1"}]}
      }]
    }
  }'

Мониторинг работоспособности Active-Active

Архитектуры active-active требуют надёжного мониторинга, чтобы оба региона оставались работоспособными, а трафик распределялся ожидаемым образом. Ключевые метрики: Route 53 HealthCheckPercentageHealthy для каждого региона, DynamoDB ReplicationLatency для задержки Global Tables, ALB RequestCount для каждого региона — для проверки распределения трафика — и панели CloudWatch между аккаунтами и регионами для единого представления. Настройте оповещения, когда задержка репликации превышает порог RPO или распределение трафика становится существенно неравномерным.

# CloudWatch alarm for DynamoDB Global Table replication lag
aws cloudwatch put-metric-alarm \
  --alarm-name 'GlobalTable-ReplicationLag-eu-west-1' \
  --metric-name ReplicationLatency \
  --namespace AWS/DynamoDB \
  --dimensions Name=TableName,Value=UserSessions Name=ReceivingRegion,Value=eu-west-1 \
  --period 60 \
  --evaluation-periods 3 \
  --threshold 5000 \
  --comparison-operator GreaterThanThreshold \
  --alarm-actions arn:aws:sns:us-east-1:123:ops-alerts

Когда стоит выбирать Active-Active

Active-active подходит, когда пользователи распределены по всему миру, а задержка при обращении к одному региону неприемлема; RTO должен быть близок к нулю и бизнес не может допустить даже нескольких минут простоя; высокая пропускная способность записи требует распределения записей между регионами; нормативные требования предписывают обрабатывать данные внутри страны. Стоимость существенно выше, чем у других уровней DR, поэтому выбирайте active-active только тогда, когда бизнес-требования и экономика явно это оправдывают. Для многих нагрузок достаточно Warm Standby, который обходится значительно дешевле.

# Active-Active justification checklist:
# [ ] Users in 2+ continents with latency SLAs
# [ ] RTO requirement < 5 minutes
# [ ] Revenue impact of downtime justifies 2x+ cost
# [ ] Data must remain within specific regions (regulations)
# [ ] Write throughput exceeds single-region capacity

# If fewer than 2-3 boxes checked:
# Consider Warm Standby instead (lower cost, adequate RTO)

Быстрая проверка

Проверьте, насколько хорошо Вы усвоили концепции AWS Solutions Architect (SAA-C03) из этого урока.

Итоги урока

В этом уроке Вы узнали, что DynamoDB Global Tables поддерживает запись с несколькими ведущими узлами между регионами для настоящей конфигурации active-active, маршрутизация Route 53 на основе задержки с проверками работоспособности направляет пользователей в ближайший работоспособный регион, а управление сеансами в active-active должно быть без состояния или использовать глобально реплицируемое хранилище. Active-active обеспечивает почти нулевые RTO и RPO, но требует значительно больших затрат. Далее мы рассмотрим Operational Excellence и Security — принципы Well-Architected Framework.

Можно начать бесплатно

Изучай Cloud & IT Cert Prep с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
150
Уроки
600

Часто задаваемые вопросы

Урок «Активный режим в нескольких площадках с Global Tables и Route 53» бесплатный?

Да — полный текст урока «Активный режим в нескольких площадках с Global Tables и Route 53» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cloud & IT Cert Prep, подпишись на CoddyKit PRO. Курс Cloud & IT Cert Prep содержит 4 уроков всего.

Чему я научусь в уроке «Активный режим в нескольких площадках с Global Tables и Route 53»?

Одновременно поддерживайте полную производственную мощность в двух или более регионах с помощью DynamoDB Global Tables, Aurora Global Database и маршрутизации Route 53 по задержке. Ты практикуешь Cloud & IT Cert Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cloud & IT Cert Prep?

Предыдущий опыт не требуется. Cloud & IT Cert Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Активный режим в нескольких площадках с Global Tables и Route 53»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cloud & IT Cert Prep?

Да. Каждый урок Cloud & IT Cert Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. RTO, RPO и уровни DR
  2. Резервное копирование и восстановление
  3. Режим минимального ядра и тёплый резерв
  4. Активный режим в нескольких площадках с Global Tables и Route 53
← Назад к Cloud & IT Cert Prep