Раскрытие силы принципа «активный-активный»: изучение нескольких методов повышения устойчивости системы

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

Что такое архитектура «активный-активный»?
Архитектура «активный-активный» предполагает одновременное развертывание нескольких экземпляров системы или приложения на разных узлах или центрах обработки данных. В отличие от традиционного подхода «активный-пассивный», при котором один экземпляр остается бездействующим в качестве резервной копии, метод «активный-активный» гарантирует, что все экземпляры активно обрабатывают входящие запросы. Распределяя рабочую нагрузку между несколькими экземплярами, архитектура «активный-активный» повышает производительность, масштабируемость и отказоустойчивость системы.

Метод 1. Балансировка нагрузки
Балансировка нагрузки — это фундаментальный метод в архитектуре «активный-активный», который равномерно распределяет входящий трафик между несколькими экземплярами. Это обеспечивает оптимальное использование ресурсов и предотвращает перегрузку любого отдельного экземпляра. Давайте рассмотрим пример с использованием NGINX:

http {
    upstream myapp {
        server instance1.example.com;
        server instance2.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://myapp;
        }
    }
}

Метод 2. Репликация данных
Репликация данных имеет решающее значение для обеспечения согласованности и синхронизации между активными-активными экземплярами. Он предполагает копирование и обновление данных в реальном времени или почти в реальном времени между несколькими узлами. Одним из популярных подходов является использование репликации базы данных. Вот пример использования MySQL:

-- On the primary node
CHANGE MASTER TO MASTER_HOST='primary_node_ip',
MASTER_USER='replication_user',
MASTER_PASSWORD='replication_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=123456;
-- On the secondary node
CHANGE MASTER TO MASTER_HOST='secondary_node_ip',
MASTER_USER='replication_user',
MASTER_PASSWORD='replication_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=123456;
-- Start replication
START SLAVE;

Метод 3: обмен активными-активными сообщениями
Обмен активными-активными сообщениями обеспечивает обмен данными и сообщениями между экземплярами в распределенной системе. Это обеспечивает связь и координацию между узлами в режиме реального времени. Apache Kafka — популярная система обмена сообщениями, поддерживающая архитектуру «активный-активный». Вот упрощенный фрагмент кода:

// Producer
Properties properties = new Properties();
properties.setProperty("bootstrap.servers", "instance1:9092,instance2:9092");
Producer<String, String> producer = new KafkaProducer<>(properties);
producer.send(new ProducerRecord<>("my_topic", "Hello, Kafka!"));
// Consumer
Properties properties = new Properties();
properties.setProperty("bootstrap.servers", "instance1:9092,instance2:9092");
properties.setProperty("group.id", "my_group");
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(properties);
consumer.subscribe(Collections.singletonList("my_topic"));
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));

Метод 4: Active-Active DNS
Active-active DNS позволяет распределять входящие запросы между несколькими IP-адресами, связанными с разными экземплярами. Он обеспечивает автоматическое переключение при сбое и балансировку нагрузки на уровне DNS. Amazon Route 53 — это широко используемый сервис DNS, поддерживающий архитектуру «активный-активный». Вот упрощенный пример:

# Route 53 API call
aws route53 change-resource-record-sets \
    --hosted-zone-id Z1234567890 \
    --change-batch '{
        "Changes": [
            {
                "Action": "UPSERT",
                "ResourceRecordSet": {
                    "Name": "example.com",
                    "Type": "A",
                    "SetIdentifier": "instance1",
                    "MultiValueAnswer": true,
                    "TTL": 60,
                    "ResourceRecords": [
                        { "Value": "instance1_ip" },
                        { "Value": "instance2_ip" }
                    ]
                }
            }
        ]
    }'

Архитектура «активный-активный» предлагает надежное решение для достижения высокой доступности, отказоустойчивости и масштабируемости в современных системах. Используя такие методы, как балансировка нагрузки, репликация данных, обмен сообщениями «активный-активный» и DNS «активный-активный», предприятия могут обеспечить бесперебойное предоставление услуг даже в случае сбоев. Использование активно-активной архитектуры позволяет организациям оправдывать ожидания клиентов, улучшать качество обслуживания пользователей и сохранять конкурентные преимущества в цифровой среде.