← Назад к вопросам
Приведи пример использования монолитной архитектуры
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 человек)
- Приложений с предсказуемой нагрузкой
- Когда скорость разработки критична
Когда нужны микросервисы:
- Высокая нагрузка на разные части
- Разные команды разрабатывают разные функции
- Нужны разные технологии для разных модулей