Skip to content

Архитектура

Архитектура системы

Общая архитектура

АИС реализована как клиент-серверное приложение с разделением на клиентскую (frontend) и серверную (backend) части, взаимодействующие через REST API.

┌─────────────────┐
│   Web Browser   │
│   (Frontend)    │
└────────┬────────┘
         │ HTTP/HTTPS
         │ REST API
┌────────▼────────┐
│  Backend Server │
│   (Node.js)     │
└────────┬────────┘
    ┌────┴────┐
    │         │
┌───▼───┐ ┌──▼────┐
│PostgreSQL│ │ Redis │
│   (БД)   │ │(Кэш) │
└─────────┘ └───────┘

Клиентская часть

Технологический стек

  • React 18.3 — библиотека для построения пользовательского интерфейса
  • TypeScript 5.8 — типизированный язык программирования
  • Vite 5.4 — инструмент сборки и dev-сервер
  • React Router 6.30 — маршрутизация
  • TanStack Query 5.83 — управление серверным состоянием и кэширование
  • React Hook Form 7.61 — управление формами
  • Zod 3.25 — валидация данных
  • shadcn/ui — компоненты пользовательского интерфейса на базе Radix UI
  • Tailwind CSS 3.4 — фреймворк для стилизации

Особенности

  • Single Page Application (SPA)
  • Адаптивный дизайн для различных размеров экранов
  • Поддержка темной и светлой темы
  • Режим для слабовидящих

Серверная часть

Технологический стек

  • Node.js — среда выполнения JavaScript
  • Express 4.18 — веб-фреймворк
  • Sequelize 6.37 — ORM для работы с PostgreSQL
  • PostgreSQL — реляционная система управления базами данных
  • Redis 4.7 — система кэширования (опционально)
  • JWT — механизм аутентификации
  • Winston 3.15 — система логирования
  • Swagger — документация API

Особенности

  • Stateless архитектура (без сохранения состояния сессии на сервере)
  • RESTful API
  • Транзакционная обработка данных
  • Асинхронная обработка операций через паттерн Outbox

Слои архитектуры

Система следует принципам многослойной архитектуры (Layered Architecture) с четким разделением ответственности:

1. Presentation Layer (Слой представления)

  • HTTP-маршруты (Routes)
  • Обработка HTTP-запросов и ответов
  • Валидация входных данных
  • Аутентификация и авторизация на уровне маршрутов

2. Application Layer (Слой приложения)

  • Бизнес-логика (Services)
  • Оркестрация операций
  • Валидация бизнес-правил
  • Координация между репозиториями

3. Data Access Layer (Слой доступа к данным)

  • Репозитории (Repositories)
  • Абстракция работы с базой данных
  • Реализация паттернов Repository и CQRS

4. Domain Layer (Доменный слой)

  • Модели данных (Models)
  • Определение структуры данных
  • Валидация на уровне модели

Используемые паттерны проектирования

Repository Pattern

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

CQRS (Command Query Responsibility Segregation)

Разделение операций чтения (queries) и записи (commands) для оптимизации производительности и упрощения логики.

Service Layer Pattern

Выделение бизнес-логики в отдельный слой сервисов.

Outbox Pattern

Обеспечение надежной асинхронной обработки событий (например, продвижение очереди при освобождении книги) через таблицу исходящих событий.

Idempotency

Обеспечение идемпотентности операций для предотвращения дублирования при повторных запросах.

Transaction Pattern

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

База данных

PostgreSQL 14+

Реляционная СУБД для хранения всех данных системы.

Основные таблицы:

  • users — пользователи системы
  • book_titles — книги (названия)
  • book_copies — экземпляры книг
  • operations — операции выдачи/возврата/списания/продления
  • bookings — бронирования
  • booking_queue — очередь на книги
  • outbox_events — события для асинхронной обработки
  • Справочные таблицы: авторы, жанры, издательства, полки, языки, состояния, категории пользователей

Индексы и оптимизация

База данных содержит множество индексов для оптимизации запросов:

  • Индексы на часто используемые поля
  • Составные индексы для сложных запросов
  • GIN индексы для полнотекстового поиска (pg_trgm)
  • Уникальные индексы для предотвращения дубликатов

Триггеры и ограничения

  • Триггеры для предотвращения множественных активных выдач
  • Предотвращение списания с активными выдачами
  • Предотвращение изменения book_copy_id после создания операции

Масштабируемость

Stateless Backend

Серверная часть реализована как stateless-приложение, не сохраняющее состояние сессии на сервере. Это позволяет:

  • Горизонтальное масштабирование через запуск нескольких экземпляров сервера
  • Использование балансировщиков нагрузки
  • Отказоустойчивость при выходе из строя одного из экземпляров

Транзакционность

  • Все операции изменения данных выполняются в транзакциях базы данных
  • Обеспечение ACID-свойств (Atomicity, Consistency, Isolation, Durability)
  • Откат изменений при возникновении ошибок

Асинхронная обработка

  • Использование паттерна Outbox для асинхронной обработки событий
  • Обработка очередей на книги через фоновые задачи
  • Очистка просроченных бронирований через cron-задачи
  • Возможность масштабирования обработки через запуск нескольких воркеров

Идемпотентность операций

  • Критические операции (выдача, возврат, списание) реализованы как идемпотентные
  • Повторный запрос с теми же параметрами не приводит к дублированию операции
  • Использование уникальных идентификаторов для предотвращения дублирования

Кэширование

  • Опциональное использование Redis для кэширования часто запрашиваемых данных
  • Кэширование справочной информации (авторы, жанры, издательства)
  • Настраиваемое время жизни кэша

Надежность

Мониторинг и диагностика

  • Health check endpoint для проверки работоспособности системы
  • Логирование производительности запросов
  • Возможность интеграции с системами мониторинга (Prometheus, Grafana)

Обработка ошибок

  • Централизованная обработка ошибок
  • Структурированное логирование (Winston)
  • Корректные HTTP статус коды
  • Откат изменений при ошибках через транзакции

Главная | О системе | Информационная безопасность | Внедрение и сопровождение