← Назад к вопросам

Приведи пример использования монолитной архитектуры

2.0 Middle🔥 171 комментариев
#Архитектура и паттерны

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

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Монолитная архитектура в Node.js

Что это такое

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

Структура монолитного приложения

Типичная папочная структура:

src/
├── routes/           # Express/Koa маршруты
│   ├── users.js
│   ├── products.js
│   └── orders.js
├── controllers/      # Обработчики запросов
├── services/         # Бизнес-логика
├── repositories/     # Работа с БД
├── models/          # Модели данных
├── middleware/      # Express middleware
├── utils/           # Вспомогательные функции
└── app.js           # Главный файл приложения

Практический пример

Вот простое монолитное приложение на Express:

// app.js — главное приложение
const express = require('express');
const userRoutes = require('./routes/users');
const productRoutes = require('./routes/products');
const orderRoutes = require('./routes/orders');

const app = express();
app.use(express.json());

// Все маршруты регистрируются в одном месте
app.use('/api/users', userRoutes);
app.use('/api/products', productRoutes);
app.use('/api/orders', orderRoutes);

app.listen(3000, () => console.log('Server running on port 3000'));
// routes/users.js
const express = require('express');
const router = express.Router();
const userController = require('../controllers/userController');

router.get('/', userController.getAll);
router.get('/:id', userController.getById);
router.post('/', userController.create);
router.put('/:id', userController.update);
router.delete('/:id', userController.delete);

module.exports = router;
// controllers/userController.js
const userService = require('../services/userService');

async function getAll(req, res) {
  const users = await userService.getAllUsers();
  res.json(users);
}

async function getById(req, res) {
  const user = await userService.getUserById(req.params.id);
  res.json(user);
}

module.exports = { getAll, getById };
// services/userService.js
const userRepository = require('../repositories/userRepository');

async function getAllUsers() {
  return await userRepository.findAll();
}

async function getUserById(userId) {
  return await userRepository.findById(userId);
}

module.exports = { getAllUsers, getUserById };
// repositories/userRepository.js
const db = require('../database');

async function findAll() {
  return await db.query('SELECT * FROM users');
}

async function findById(id) {
  return await db.query('SELECT * FROM users WHERE id = $1', [id]);
}

module.exports = { findAll, findById };

Преимущества монолитной архитектуры

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

Недостатки

  • Сложно масштабировать — при росте нужно масштабировать всё сразу
  • Тесная связь — изменение в одном модуле может сломать другой
  • Сложно вводить новые технологии — один стек на всех
  • **Монолит со временем становится "большим болотом"

Когда использовать

Монолитная архитектура хороша для:

  • Стартапов и MVP
  • Небольших команд (до 10 человек)
  • Приложений с предсказуемой нагрузкой
  • Когда скорость разработки критична

Когда нужны микросервисы:

  • Высокая нагрузка на разные части
  • Разные команды разрабатывают разные функции
  • Нужны разные технологии для разных модулей
Приведи пример использования монолитной архитектуры | PrepBro