Ответ
Микросервисы обычно взаимодействуют с БД через отдельный слой доступа к данным (DAL), изолируя бизнес-логику от деталей работы с хранилищем. Основные подходы:
- Прямое подключение (чаще для SQL):
db, err := sql.Open("postgres", "connection_string")
row := db.QueryRow("SELECT * FROM users WHERE id=$1", userID)
- ORM (GORM, ent):
var user User
db.First(&user, userID)
- Реализация Repository pattern:
type UserRepository interface {
GetByID(id int) (*User, error)
}
type PGUserRepo struct {
db *sql.DB
}
Ключевые моменты:
- Каждый сервис имеет свою БД (или схему)
- Транзакции ограничены одним сервисом
- Для распределенных операций используют Saga pattern
- Кэширование (Redis) для снижения нагрузки
- Миграции управляются самим сервисом
Важно избегать shared database между сервисами, чтобы сохранить слабую связанность.