Ответ
Master-Slave — это архитектурный паттерн для распределения задач, в котором один центральный узел (Master) управляет работой одного или нескольких подчиненных узлов (Slave).
Принцип работы:
- Master принимает входящие запросы, разбивает работу на задачи и распределяет их между Slave.
- Slave выполняют полученные задачи и возвращают результаты Master.
- 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.