Как организуется работа с базами данных в микросервисной архитектуре?

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

Ответ

В микросервисной архитектуре действует принцип «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).

Количество физических инстансов БД обычно равно количеству сервисов, но может быть больше за счет репликации или шардинга.