История о том, почему архитектурная «красота» не всегда означает практическую пользу

Всем привет! Хочу поделиться историей своего архитектурного провала. Началось с простой задачи: парсинг 3 ГБ текстовых данных. Звучит как работа для скрипта? Я же решил, что это отличный повод построить «идеальную» систему на микросервисах. Результат: 4 сервиса, 8 ГБ ОЗУ и 15 ГБ на диске для решения элементарной задачи.

Что пошло не так: хронология переусложнения

Вот архитектура, которую я создал:

  1. nodehistj-download-service — отдельный сервис для загрузки файлов

  2. nodehistj-newest-nodelists — сервис для работы с актуальными данными

  3. nodehistj-historic-nodelists — сервис для хранения исторических данных

  4. nodehistj-history-diff — сервис для сравнения версий

Каждый сервис — полноценное Spring Boot-приложение со своей базой PostgreSQL. Единой точки входа не было — клиент должен был общаться с каждым API отдельно.

Цена архитектурных решений

Система потребляла неадекватные ресурсы:

  • Память: 6-8 ГБ ОЗУ в простое

  • Диск: 15+ ГБ вместо исходных 3 ГБ

  • Процессор: 4 ядра для фоновых задач

При этом функциональность оставалась базовой: парсинг текстовых файлов и отображение истории изменений.

Почему это стало проблемой

  1. Сложность отладки — поиск ошибок в четырёх независимых сервисах

  2. Ресурсоёмкость — высокие требования к инфраструктуре

  3. Затраты на развитие — даже простые изменения требовали правки в нескольких сервисах

Выводы, которые я сделал

  1. Микросервисы ≠ панацея — они решают конкретные проблемы масштабирования

  2. Spring Boot добавляет накладные расходы — каждый модуль имеет свою цену

  3. Архитектура должна соответствовать задаче — не стоит создавать распределённую систему для локальной проблемы

  4. Интеграционная сложность — отсутствие единого API усложняет клиентскую часть

Этот опыт научил меня трезво оценивать необходимость использования сложных архитектурных паттернов. Теперь я начинаю с простых решений и усложняю систему только при появлении реальных потребностей.

А вы сталкивались с подобными ситуациями? Интересно узнать ваши истории про оптимальный выбор архитектуры для разных задач.

Комментарии (0)


  1. urvanov
    26.09.2025 07:30

    Ну что тут сказать. Не всем нужен очередной AbstractSingletonProxyFactoryBean


  1. iowanker
    26.09.2025 07:30

    Сложность отладки — поиск ошибок в четырёх независимых сервисах

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

    Ресурсоёмкость — высокие требования к инфраструктуре

    Опять же - если сервис для полутора инвалидов, и даже мысли нет, что понадобится делать более одной ноды для сервиса - ресурсы утекают, да. Вот только что делать, когда твой монолит под нагрузкой не влезает на одну доступную ноду вообще?))

    Затраты на развитие — даже простые изменения требовали правки в нескольких сервисах

    B снова - когда что-то пишешь для себя "на коленке", это простительно. Появилась идея - реализовал, не получилось - откатил, дело одного-двух вечеров. Вот только когда детский сад заканчивается, разработчиков становится больше пары друзей, встаёт вопрос планирования и согласования фич, уже нельзя просто взять и что-то сделать, особенно, когда твоя фича может помножить на ноль работу десятка людей. И тогда как раз трата некоторого времени на документирование, согласование, планирование - обеспечит отсутствие проблем.

    В целом какой-то детский пост, "мне для домашней работы оно не понадобилось, значит оно не нужно"...


  1. benjik
    26.09.2025 07:30

    А вот взял бы go/rust и SQLite/DuckDB - смог бы в пару ГБ оперативки запихнуть 15-20 таких микросервисов, ещё бы и на nats/rabbitmq осталось, с графаной и Прометеем.


  1. panzerfaust
    26.09.2025 07:30

    ChatGPT, напиши историю о том, почему архитектурная «красота» не всегда означает практическую пользу.
    Скоро люди отучатся выражать мнение своими словами даже в вопросе "который час?".


    1. oldzoomer Автор
      26.09.2025 07:30

      Я ИИшницами пользуюсь для редактирования статьи. Большая часть текста - моя.