PurpleSchool — курсы программирования онлайн
  • Пути
    • Frontend React разработчик
    • Frontend Vue разработчик
    • Backend разработчик Node.js
    • Fullstack разработчик React / Node.js
    • Mobile разработчик React Native
    • Backend разработчик Golang
    • Devops инженер
    • Backend разработчик Python
  • AI для кодаНовое
  • О нас
    • Отзывы
    • Реферальная программа
    • О компании
    • Контакты
  • Иконка открытия меню
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
PurpleSchool — платформа бесплатных roadmap и курсов для разработчиков
ютуб иконка
Telegram иконка
VK иконка
VK иконка
Курсы
ГлавнаяКаталог курсовFrontendBackendFullstack
Практика
КарьераПроектыPurpleПлюс
Материалы
БлогБаза знаний
Документы
Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
Реквизиты
ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

PurpleSchool © 2020 -2026 Все права защищены

  • Курсы
    • FrontendИконка стрелки
    • AI разработкаИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    Иконка слояПерейти в каталог курсов
  • Бесплатно
    • Курсы
    • JavaScript Основы разработкиPython Основы PythonCSS CSS FlexboxКарта развития
    • База знанийИконка стрелки
    • Новостные рассылкиИконка стрелки
  • PurpleSchool — курсы программирования онлайн
    • AI для кодаНовое
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
    Главная
    Сообщество
    Микросервисы vs монолит: как выбрать архитектуру проекта

    Микросервисы vs монолит: как выбрать архитектуру проекта

    Аватар автора Микросервисы vs монолит: как выбрать архитектуру проекта

    Антон Ларичев

    Иконка календаря10 июня 2026
    архитектурамикросервисымонолитbackendsystem designmiddleИконка уровня middle
    Картинка поста Микросервисы vs монолит: как выбрать архитектуру проекта

    Введение

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

    Главная ошибка — думать, что микросервисы это всегда «современно и правильно», а монолит — устаревший подход. На самом деле обе архитектуры активно используются крупными компаниями, и выбор зависит от размера команды, зрелости продукта и конкретных бизнес-задач.

    Что такое монолит

    Монолитное приложение — это единая кодовая база, которая собирается и деплоится как одно целое. Все модули (аутентификация, заказы, оплата, уведомления) живут в одном процессе и обращаются друг к другу через прямые вызовы функций.

    // Пример монолитного сервиса заказов
    class OrderService {
      constructor(
        private userService: UserService,
        private paymentService: PaymentService,
        private emailService: EmailService,
      ) {}
    
      async createOrder(userId: string, items: Item[]) {
        // Все вызовы внутри одного процесса
        const user = await this.userService.findById(userId);
        const payment = await this.paymentService.charge(user, items);
        await this.emailService.sendConfirmation(user.email);
        return { user, payment };
      }
    }
    

    Плюсы монолита: простой деплой, низкая задержка вызовов, лёгкая отладка, понятная транзакционность через одну БД. Минусы: при росте кодовой базы любое изменение требует пересборки и регресс-тестирования всего приложения, а команды начинают мешать друг другу.

    Что такое микросервисы

    Микросервисы — это набор независимых сервисов, каждый из которых отвечает за свою бизнес-область и общается с другими через сеть (HTTP, gRPC, очереди сообщений).

    // Сервис заказов вызывает другие сервисы по HTTP
    class OrderService {
      async createOrder(userId: string, items: Item[]) {
        // Сетевой вызов вместо прямого
        const user = await fetch(`http://users-service/api/users/${userId}`)
          .then((r) => r.json());
    
        // Платёжный сервис — отдельный процесс
        const payment = await fetch('http://payments-service/api/charge', {
          method: 'POST',
          body: JSON.stringify({ userId, items }),
        }).then((r) => r.json());
    
        // Уведомления — асинхронно через очередь
        await this.queue.publish('order.created', { userId, items });
    
        return { user, payment };
      }
    }
    

    Плюсы: независимый деплой команд, изоляция отказов, возможность использовать разные технологии для разных сервисов, горизонтальное масштабирование под нагрузку. Минусы: сложность распределённых транзакций, необходимость в наблюдаемости (трейсинг, логи, метрики), сетевые задержки и стоимость инфраструктуры.

    Когда выбирать монолит

    Монолит — оптимальный выбор для большинства новых проектов и стартапов. Если команда меньше 10 человек, бизнес-домен ещё не устоялся и нагрузка предсказуема — микросервисы создадут больше проблем, чем решат.

    // Модульный монолит — компромисс между подходами
    // Каждый модуль имеет чёткие границы, но живёт в одном процессе
    import { OrdersModule } from './modules/orders';
    import { UsersModule } from './modules/users';
    import { PaymentsModule } from './modules/payments';
    
    const app = new Application();
    app.register(UsersModule);
    app.register(OrdersModule);
    app.register(PaymentsModule);
    

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

    Когда выбирать микросервисы

    Микросервисы оправданы, когда команда выросла до 50+ человек и разные части продукта развиваются независимыми темпами. Например, поиск нужно масштабировать сильнее, чем профиль пользователя, а команда уведомлений хочет переписать всё на Go.

    # docker-compose для микросервисной системы
    services:
      users-service:
        image: users:latest
        # Собственная база данных
        depends_on: [users-db]
    
      orders-service:
        image: orders:latest
        depends_on: [orders-db, message-broker]
    
      api-gateway:
        image: gateway:latest
        # Единая точка входа для клиентов
        ports: ['80:80']
    

    Ключевой признак готовности к микросервисам — наличие DevOps-культуры, CI/CD и инструментов наблюдаемости. Без этого микросервисы превращаются в распределённый хаос.

    Частые ошибки

    Первая ошибка — выбор микросервисов «потому что модно». Команда из пяти человек тратит месяцы на инфраструктуру вместо разработки продукта.

    Вторая ошибка — неправильные границы сервисов. Если для одной бизнес-операции нужно вызвать пять сервисов, это не микросервисы, а распределённый монолит с худшими свойствами обоих подходов.

    Третья ошибка — игнорирование распределённых транзакций. В монолите транзакция БД защищает от частичных сбоев, а в микросервисах нужны паттерны Saga или outbox.

    // Outbox-паттерн: событие сохраняется в той же транзакции,
    // что и бизнес-данные, а отправляется отдельным процессом
    async function createOrder(data: OrderData) {
      await db.transaction(async (trx) => {
        const order = await trx('orders').insert(data);
        // Событие в той же транзакции — гарантия согласованности
        await trx('outbox').insert({
          event: 'order.created',
          payload: JSON.stringify(order),
        });
      });
    }
    

    Четвёртая ошибка — отсутствие версионирования API между сервисами. Изменение контракта ломает соседние команды.

    Заключение

    Не существует «правильной» архитектуры — есть подходящая для конкретной задачи. Начинайте с модульного монолита: он быстрее в разработке и проще в поддержке. Переходите на микросервисы только когда упрётесь в реальные ограничения: организационные, технические или нагрузочные.

    Главный принцип — архитектура должна следовать за командой и продуктом, а не наоборот. Лучше иметь работающий монолит, чем сломанные микросервисы.

    Иконка глаза4

    Комментарии

    0

    Постройте личный план изучения Основы Git до уровня Middle — бесплатно!

    Основы Git — часть карты развития Frontend, Backend, DevOps

    • step100+ шагов развития
    • lessons30 бесплатных лекций
    • lessons300 бонусных рублей на счет

    Бесплатные лекции

    Лучшие курсы по теме

    изображение курса

    Основы JavaScript

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.8
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    Продвинутый JavaScript

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.8
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    TypeScript с нуля

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.8
    3 999 ₽ 6 990 ₽
    Подробнее

    Похожие статьи

    Картинка поста PostgreSQL vs MongoDB: что выбрать для проекта в 2025
    Иконка аватараАнтон
    Иконка календаря06 июня 2026
    postgresqlmongodbdatabases+ 1middleИконка уровня middle

    PostgreSQL vs MongoDB: что выбрать для проекта в 2025

    PostgreSQL vs MongoDB в 2025: сравниваем производительность, схемы данных, транзакции и масштабирование. Разбираем, какую БД выбрать под ваш проект.

    Иконка чипа0
    Иконка глаза101
    Иконка комментариев0
    Картинка поста Docker для разработчика: полный гайд с нуля до продакшена
    Иконка аватараАнтон
    Иконка календаря03 июня 2026
    dockerdevopsконтейнеризация+ 1juniorИконка уровня junior

    Docker для разработчика: полный гайд с нуля до продакшена

    Docker для разработчика — полный гайд с нуля: образы, контейнеры, Dockerfile, docker-compose и работа с продакшеном простыми словами.

    Иконка чипа0
    Иконка глаза216
    Иконка комментариев0
    Картинка поста Микрофронтенды и Module Federation: когда применять и как внедрить
    Иконка аватараАнтон
    Иконка календаря28 мая 2026
    микрофронтендыmodule federationwebpack+ 2seniorИконка уровня senior

    Микрофронтенды и Module Federation: когда применять и как внедрить

    Микрофронтенды и Module Federation: разбираем когда нужна такая архитектура, как настроить host и remote приложения и избежать типичных ошибок.

    Иконка чипа0
    Иконка глаза185
    Иконка комментариев0
    Иконка чипа0