Ответ
В последнем проекте использовалась кластерная архитектура базы данных на основе PostgreSQL с репликацией streaming replication (master-slave).
Цели и преимущества такого подхода:
- Отказоустойчивость (High Availability): При сбое master-узла можно выполнить failover на одну из реплик.
- Масштабирование чтения (Read Scaling): Нагрузка операций
SELECTраспределяется между репликами, разгружая master, который обрабатывает операцииINSERT/UPDATE/DELETE. - Резервное копирование: Резервные копии можно создавать с реплик, не нагружая основной узел.
Реализация на уровне приложения (Spring Boot):
- Настройка двух источников данных:
spring: datasource: master: url: jdbc:postgresql://master-host:5432/db username: admin password: master_pass replica: url: jdbc:postgresql://replica-host:5432/db username: reader password: replica_pass hikari: read-only: true # Важно для реплик - Использование
AbstractRoutingDataSource: Создаётся роутер, который определяет, к какомуDataSource(master или replica) направить запрос, обычно на основе флага "только для чтения" в контексте транзакции (@Transactional(readOnly = true)).
Альтернативы: Для более сложных сценариев рассматривались решения вроде Citus (горизонтальное шардирование) или облачные managed-сервисы (Amazon RDS Multi-AZ, Google Cloud SQL с high-availability).