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