Как микросервисы общаются с базой данных

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

Ответ

Микросервисы обычно взаимодействуют с БД через отдельный слой доступа к данным (DAL), изолируя бизнес-логику от деталей работы с хранилищем. Основные подходы:

  1. Прямое подключение (чаще для SQL):
db, err := sql.Open("postgres", "connection_string")
row := db.QueryRow("SELECT * FROM users WHERE id=$1", userID)
  1. ORM (GORM, ent):
var user User
db.First(&user, userID)
  1. Реализация Repository pattern:
type UserRepository interface {
    GetByID(id int) (*User, error)
}

type PGUserRepo struct {
    db *sql.DB
}

Ключевые моменты:

  • Каждый сервис имеет свою БД (или схему)
  • Транзакции ограничены одним сервисом
  • Для распределенных операций используют Saga pattern
  • Кэширование (Redis) для снижения нагрузки
  • Миграции управляются самим сервисом

Важно избегать shared database между сервисами, чтобы сохранить слабую связанность.