Ответ
В микросервисной архитектуре действует принцип «Database per Service»: каждый сервис владеет своей собственной базой данных, и только он имеет к ней прямой доступ.
Ключевые моменты:
- Изоляция: Изменение схемы БД одного сервиса не ломает другие.
- Независимое масштабирование: Каждую БД можно масштабировать отдельно.
- Разнообразие технологий: Разные сервисы могут использовать разные СУБД (SQL, NoSQL).
Пример конфигурации (Spring Boot):
# application.yml для сервиса 'orders'
spring:
datasource:
url: jdbc:postgresql://localhost:5432/orders_db
username: orders_user
password: orders_pass
jpa:
hibernate:
ddl-auto: validate
Важные нюансы и антипаттерны:
- Shared Database: Использование одной БД несколькими сервисами считается антипаттерном, так как нарушает границы сервисов и создает сильную связность.
- Согласованность данных: Обеспечивается через асинхронную коммуникацию (события, message brokers) или паттерны (Saga).
- Дополнительные хранилища: Сервис может использовать несколько хранилищ для разных целей (основная БД + кеш Redis + поиск Elasticsearch).
Количество физических инстансов БД обычно равно количеству сервисов, но может быть больше за счет репликации или шардинга.