Открыть сервис

Active-Active

Active-Active — это архитектурный подход к построению отказоустойчивых и высокопроизводительных компьютерных систем, при котором все узлы (серверы, контроллеры, дата-центры) находятся в активном состоянии и одновременно обрабатывают рабочие нагрузки. В отличие от схемы «активный-пассивный» (Active-Passive), где резервный узел простаивает до момента отказа основного, в конфигурации Active-Active нагрузка распределяется между всеми участниками кластера, что позволяет повысить общую производительность и обеспечить непрерывность обслуживания даже при выходе из строя одного или нескольких компонентов.

История и предпосылки

Потребность в архитектуре Active-Active возникла с ростом требований к отказоустойчивости критически важных информационных систем — банковских, телекоммуникационных, государственных. Традиционная схема Active-Passive, хотя и обеспечивала резервирование, не позволяла эффективно утилизировать дорогостоящие ресурсы: резервные узлы простаивали большую часть времени, а переключение на них (failover) занимало от нескольких секунд до десятков минут. Кроме того, при пиковых нагрузках одного активного узла могло не хватать для обработки всех запросов.

Первые реализации Active-Active появились в 1990-х годах в сфере кластеризации баз данных и веб-серверов. Компании Oracle, IBM и Microsoft внедрили поддержку таких конфигураций в свои продукты (Oracle RAC, IBM DB2 pureScale, Microsoft SQL Server Always On). С развитием облачных технологий, микросервисной архитектуры и контейнеризации принцип Active-Active стал стандартом де-факто для большинства высоконагруженных веб-сервисов (поисковые системы, социальные сети, CDN).

Принцип работы и ключевые механизмы

Балансировка нагрузки

Для распределения запросов между активными узлами используются балансировщики нагрузки — программные (NGINX, HAProxy) или аппаратные (F5, Citrix ADC). Балансировщик анализирует текущую загрузку узлов, время отклика и доступность, направляя каждый новый запрос к наименее загруженному серверу.

Репликация данных

Синхронная или асинхронная репликация данных между узлами обеспечивает целостность информации. В синхронной модели (например, 5G сетях) транзакция считается завершённой только после подтверждения записи на всех узлах, что гарантирует нулевую потерю данных (RPO=0). Асинхронная репликация допускает некоторую задержку, но обеспечивает более высокую производительность и терпимость к задержкам сети.

Обнаружение сбоев (Failure Detection)

Каждый узел периодически отправляет сигналы «heartbeat» (сердцебиение) соседним узлам. Если от узла не поступает ответ в течение заданного тайм-аута, он считается отказавшим. В современных системах также применяются протоколы консенсуса (Raft, Paxos) для согласования состояния кластера при сбоях.

Автоматический фейловер

При обнаружении отказа балансировщик автоматически перенаправляет трафик от неисправного узла к остальным. В идеальном случае этот процесс занимает миллисекунды и остаётся незаметным для пользователя. После восстановления отказавшего узла он синхронизирует пропущенные данные и снова включается в пул активных серверов.

Типовые реализации

Кластеры баз данных

СУБД с поддержкой Active-Active (например, Oracle Real Application Clusters, MySQL Cluster, Cassandra) позволяют нескольким серверам одновременно обрабатывать записи в одну базу данных. Это даёт возможность масштабировать производительность горизонтально (добавляя новые узлы) и обеспечивать доступность при отказе одного из серверов. В таких системах критически важна синхронизация кэшей и блокировок.

Геораспределённые системы

Многие крупные компании размещают свои дата-центры в разных географических регионах, объединяя их в Active-Active кластер. Например, сервисы Google и Amazon обрабатывают запросы пользователей одновременно из нескольких центров обработки данных (ЦОД), что позволяет снизить задержки для удалённых клиентов и выдерживать отключение целого региона (например, из-за стихийного бедствия).

Сети доставки контента (CDN)

CDN — это распределённая сеть серверов, каждый из которых хранит копии статического контента (изображений, видео, файлов). Все серверы CDN находятся в активном состоянии и отвечают на запросы пользователей из ближайшего к ним узла. При недоступности одного сервера запрос перенаправляется к следующему по географической близости.

Приложения с микросервисной архитектурой

В контейнерных средах (Kubernetes, Docker Swarm) экземпляры каждого микросервиса запускаются в нескольких контейнерах на разных хостах. Оркестратор автоматически распределяет запросы между всеми экземплярами и перезапускает отказавшие поды.

Преимущества и недостатки

Преимущества

Недостатки

Критика и ограничения

Несмотря на очевидные преимущества, архитектура Active-Active не является универсальным решением. Для приложений, где критична строгая консистентность данных (например, системы онлайн-бронирования авиабилетов), синхронизация между распределёнными узлами может приводить к значительным задержкам. В таких случаях часто выбирают компромиссные схемы — Active-Passive с географическим дублированием или каскадную репликацию.

Кроме того, в системах с Active-Active усложняется разрешение конфликтов одновременных изменений. Например, если два пользователя одновременно редактируют один и тот же документ на разных узлах, требуется либо механизм оптимистичных блокировок (с последующим разрешением коллизий), либо синхронизация на уровне приложения.

Примеры применения

Источники и литература

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →