Что такое подход Monolith First?

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

Ответ

Monolith First — это стратегия проектирования архитектуры, при которой разработка начинается с создания единого монолитного приложения, и только по мере роста и появления четких границ доменов оно может быть разбито на микросервисы.

Принципы и обоснование (по Мартину Фаулеру):

  1. Снижение начальной сложности: Микросервисы вводят значительную операционную и коммуникационную сложность (сеть, обнаружение сервисов, распределенные транзакции). Монолит позволяет сосредоточиться на бизнес-логике.
  2. Простота рефакторинга: В монолите легче изменять границы модулей, так как все компоненты находятся в одной кодовой базе и процессе.
  3. Выявление границ сервисов: Только в процессе разработки становятся видны естественные границы между модулями, которые позже можно превратить в микросервисы.
  4. Быстрый старт: Упрощает развертывание, отладку и сквозное тестирование на ранних этапах проекта.

Пример эволюции:

// 1. Монолит: все в одном приложении
@Service
public class OrderService {
    @Autowired
    private PaymentProcessor paymentProcessor;
    @Autowired
    private InventoryService inventoryService;
    @Autowired
    private NotificationService notificationService;

    public void placeOrder(Order order) {
        inventoryService.reserveItems(order);
        paymentProcessor.charge(order); // Простой вызов метода
        notificationService.sendConfirmation(order);
    }
}

// 2. Со временем PaymentProcessor выделяется в отдельный микросервис.
// В монолите остается клиент для вызова этого сервиса по HTTP/gRPC.

Когда НЕ использовать Monolith First:

  • Команда уже имеет большой опыт работы с микросервисами и DevOps-культурой.
  • Требования к масштабированию отдельных компонентов сильно различаются с самого начала.
  • Существуют заранее известные, стабильные и изолированные бизнес-домены.

Вывод: Monolith First — это прагматичный подход, который признает, что «преждевременное разбиение на сервисы может быть так же вредно, как и преждевременная оптимизация».