Каковы преимущества и недостатки монолитной архитектуры?

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

Ответ

Преимущества:

  • Простота разработки и развертывания: Одна кодовая база, одна база данных, один процесс развертывания.
  • Простота тестирования: Все компоненты находятся в одном процессе, что упрощает модульное и интеграционное тестирование, минимизирует необходимость в моках.
  • Производительность: Отсутствуют накладные расходы на сетевые вызовы между компонентами, так как взаимодействие происходит через вызовы методов в памяти.
  • Согласованность данных: Проще обеспечить ACID-транзакции, так как обычно используется одна база данных.

Недостатки:

  • Сложность масштабирования: Масштабируется только вся система целиком, нельзя увеличить ресурсы для отдельного модуля.
  • Высокая связность: Изменения в одном модуле могут неожиданно сломать другие, система становится "хрупкой".
  • Медленный цикл разработки: Любое изменение, даже незначительное, требует полной пересборки и повторного развертывания всего приложения.
  • Препятствия для технологического обновления: Сложно внедрить новые технологии или фреймворки в рамках всего монолита.

Пример монолитного процесса:

# Все функции бизнес-логики в одном модуле
class OrderProcessor:
    def process_order(self, order):
        # Высокая связность: изменение в любом из этих шагов может повлиять на другие
        self.validate(order)          # Валидация
        self.charge_payment(order)    # Оплата
        self.update_inventory(order)  # Склад
        self.ship_order(order)        # Доставка
        self.send_notification(order) # Уведомление
        # Если send_notification() упадёт, весь заказ может остаться в несогласованном состоянии

Монолит хорошо подходит для небольших проектов или стартапов на ранней стадии, где важна скорость выхода на рынок, но с ростом проекта его поддержка становится всё сложнее.