Skip to content

👩🏻‍💻ℹ Информационные системы: Лабораторные работы №1, №2, №3

License

Notifications You must be signed in to change notification settings

maxbarsukov-itmo/information-systems-labs

Repository files navigation

Лабораторная работа 3

Вариант 331501

anime

There are only two hard problems in two-phase distributed transactions:
2. Exactly-once delivery
1. Guaranteed order of messages
2. Exactly-once delivery

Made with: Spring Made with: Spring Boot Made with: Spring Security
Made with: Java Made with: MinIO Made with: Flyway
Made with: PostgreSQL Made with: Docker
Made with: React Made with: Redux Made with: MUI Made with: JSS

.pdf .docx
report report

Команда

  • Группа: P3315
  • Студенты:
    • @maxbarsukov: Барсуков Максим Андреевич 367081;
    • @pmpknu: Горляков Даниил Петрович 367165.

Задание

Доработать ИС из ЛР2 следующим образом:

  • Реализовать сохранение загруженных на сервер файлов, используемых для импорта данных, в файловом хранилище MinIO (можно взять любое другое S3-совместимое хранилище). Поднять и настроить MinIO требуется самостоятельно. Загруженные файлы должны быть доступны для скачивания из таблицы с логом импорта.
  • Сохранение загруженных файлов в файловом хранилище должно быть реализовано транзакционно по отношению к операциям, реализующим непосредственную вставку объектов в БД при импорте.
  • Для реализации распределенной транзакции из пункта 2 разрешается использовать любые инструменты. Рекомендуется решать задачу при помощи собственной реализации двух фазного коммита.
  • Необходимо на защите быть готовым продемонстрировать корректность реализованной распределенной транзакции в следующих условиях:
    • отказ файлового хранилища (БД продолжает работать)
    • отказ БД (файловое хранилище продолжает работать)
    • ошибка в бизнес-логике сервера (работают и БД, и файловое хранилище, однако в коде сервера вылетает RuntimeException между запросами в разные источники данных)
  • Необходимо на защите быть готовым продемонстрировать корректность работы распределенной транзакции в условиях параллельных запросов от нескольких пользователей (реализованный в ЛР2 сценарий для Apache JMeter, тестирующий функцию импорта, должен продолжать корректно отрабатывать).

Содержание отчёта:

  1. Текст задания.
  2. UML-диаграммы классов и пакетов разработанного приложения.
  3. Исходный код системы или ссылка на репозиторий с исходным кодом.
  4. Выводы по работе.

Вопросы к защите лабораторной работы:

  1. Java Transaction API. Основные принципы и программные интерфейсы. Работа с JTA в приложениях на базе Spring.
  2. Двухфазная фиксация в распределенных транзакциях (two-phase commit protocol).
  3. Распределенные транзакции, спецификация XA. Реализация в приложениях на базе Jakarta EE и Spring.
  4. Менеджеры транзакций. Использование менеджера транзакций в приложениях на базе Spring.

Как запустить?

Экспорт переменных окружения:

export $(cat .env | xargs)

База данных и MinIO:

docker compose up

Запуск back-end:

./gradlew bootRun

Запуск front-end:

cd frontend
yarn install
yarn start

Лицензия

Проект доступен с открытым исходным кодом на условиях Лицензии MIT.
Авторские права 2024 Max Barsukov

Поставьте звезду ⭐, если вы нашли этот проект полезным.