middle
Что такое 12-Factor App?
12-Factor App — это методология разработки SaaS-приложений, описанная инженерами Heroku, определяющая 12 принципов создания облачных приложений. Особенно актуальна для микросервисов.
| Фактор | Принцип | Пример в Spring Boot |
|---|---|---|
| 1. Codebase | Один репозиторий, много деплоев | Git repo -> dev, staging, prod |
| 2. Dependencies | Явное объявление зависимостей | pom.xml, build.gradle |
| 3. Config | Конфигурация в переменных окружения | @Value("${DATABASE_URL}") |
| 4. Backing Services | БД, брокеры — подключаемые ресурсы | Смена БД через конфиг |
| 5. Build, Release, Run | Разделение этапов | Maven build -> Docker image -> Run |
| 6. Processes | Stateless-процессы | Состояние в Redis/БД |
| 7. Port Binding | Самодостаточность через порт | Встроенный Tomcat/Netty |
| 8. Concurrency | Горизонтальное масштабирование | Запуск дополнительных реплик |
| 9. Disposability | Быстрый запуск, graceful shutdown | server.shutdown: graceful |
| 10. Dev/Prod Parity | Минимальные различия окружений | Docker, Testcontainers |
| 11. Logs | Логи в stdout | Сбор через Docker/K8s |
| 12. Admin Processes | Одноразовые задачи в том же окружении | Flyway-миграции |
Ключевые примеры
Пример
// Фактор 3: Config — конфигурация через переменные окружения
@Value("${DATABASE_URL}")
private String databaseUrl;
// НЕ правильно:
// private String databaseUrl = "jdbc:postgresql://prod-db:5432/payments";
Пример
# Фактор 9: Disposability — graceful shutdown
server:
shutdown: graceful
spring:
lifecycle:
timeout-per-shutdown-phase: 30s
На собеседовании: не нужно перечислять все 12 факторов. Выделите 3-4 самых важных (Config, Processes/Statelessness, Disposability, Logs) и объясните их на примерах. Покажите, что Spring Boot «из коробки» соответствует большинству факторов.