Ответ
В архитектуре репликации Master-Slave (или Source-Replica) Slave-база выполняет ключевую роль для масштабирования и повышения отказоустойчивости, разделяя операции чтения и записи.
Основные функции Slave:
-
Масштабирование чтений (Read Scaling):
- Все запросы на запись (INSERT, UPDATE, DELETE) идут на Master.
- Запросы на чтение (SELECT) распределяются по одному или нескольким Slave-узлам.
- Результат: Значительное снижение нагрузки на Master-узел и увеличение общей пропускной способности системы для операций чтения.
-
Повышение доступности и аварийное восстановление:
- Slave служит «горячей» резервной копией данных Master.
- В случае сбоя Master-узла, один из Slave может быть повышен (promoted) до роли нового Master, минимизируя время простоя.
-
Выполнение ресурсоемких задач:
- На Slave можно безопасно запускать тяжелые аналитические запросы или создавать бэкапы, не влияя на производительность основного Master-узла, обслуживающего транзакции.
Техническая реализация и важные нюансы:
- Репликационный лаг (Replication Lag): Изменения с Master на Slave передаются асинхронно. Это означает, что данные на Slave могут быть немного устаревшими (на миллисекунды или секунды). Приложения, требующие строгой консистентности чтения, должны обращаться к Master.
-
Пример настройки в Spring: Используется абстракция
AbstractRoutingDataSourceдля маршрутизации запросов.@Bean @Primary public DataSource dataSource() { Map<Object, Object> targetDataSources = new HashMap<>(); targetDataSources.put("master", masterDataSource()); targetDataSources.put("slave", slaveDataSource()); RoutingDataSource routingDataSource = new RoutingDataSource(); routingDataSource.setTargetDataSources(targetDataSources); routingDataSource.setDefaultTargetDataSource(masterDataSource()); return routingDataSource; }
Итог: Slave-база — это не просто копия, а активный компонент для горизонтального масштабирования операций чтения и построения отказоустойчивой системы.