Что такое архитектурный паттерн Master-Slave?

«Что такое архитектурный паттерн Master-Slave?» — вопрос из категории Архитектура, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Master-Slave — это архитектурный паттерн для распределения задач, в котором один центральный узел (Master) управляет работой одного или нескольких подчиненных узлов (Slave).

Принцип работы:

  1. Master принимает входящие запросы, разбивает работу на задачи и распределяет их между Slave.
  2. Slave выполняют полученные задачи и возвращают результаты Master.
  3. Master агрегирует результаты и отправляет итоговый ответ.

Пример на Java (упрощенный):

// Master-узел
class Master {
    private List<Slave> slaves = new ArrayList<>();

    public void addSlave(Slave slave) {
        slaves.add(slave);
    }

    public List<Result> processTasks(List<Task> tasks) {
        List<Result> results = new ArrayList<>();
        // Распределение задач по Slave (например, по кругу)
        for (int i = 0; i < tasks.size(); i++) {
            Slave slave = slaves.get(i % slaves.size());
            results.add(slave.execute(tasks.get(i)));
        }
        return results;
    }
}

// Slave-узел
class Slave {
    public Result execute(Task task) {
        // Выполнение конкретной задачи
        return new Result("Done: " + task.getId());
    }
}

Области применения:

  • Репликация баз данных: Master принимает запись, Slave-копии реплицируют данные.
  • Распределенные вычисления: Master координирует параллельную обработку (например, MapReduce).
  • Параллельная обработка данных: Master управляет пулом воркеров.

Недостатки:

  • Единая точка отказа (SPOF): Выход из строя Master останавливает всю систему.
  • Проблемы масштабирования: Пропускная способность Master ограничивает общую производительность.
  • Задержки синхронизации: Необходимость координации между Master и Slave.

Современная альтернатива: Терминология Master-Slave считается устаревшей из-за негативных коннотаций. Вместо нее используют Primary-Replica, Leader-Follower или Controller-Worker.