DAS_2024_1/zhimolostnova_anna_lab_3/README.md
2024-10-05 21:14:57 +03:00

6.9 KiB
Raw Permalink Blame History

Отчет по лабораторной работе №3

Поставленные задачи

  1. Создать 2 микросервиса, реализующих CRUD на связанных сущностях.
  2. Реализовать механизм синхронного обмена сообщениями между микросервисами.
  3. Реализовать шлюз на основе прозрачного прокси-сервера nginx.

Предметная область

Проект основан на системе управления стримами (трансляциями) и сообщениями. Каждый стрим представляет собой событие с такими параметрами, как название, время начала и окончания (окончание может быть null). Сообщения связаны с конкретными стримами и содержат следующие атрибуты: содержание, дата публикации, идентификатор стрима, к которому имеет отношение комментарий. Связь между сущностями один ко многим Два микросервиса выполняют раздельные функции: один управляет стримами, другой — сообщениями. Взаимодействие между ними происходит через HTTP-запросы.

Запуск работы

  1. Убедиться, что установлены необходимые технологии:

    • Docker: Платформа для контейнеризации приложений.
    • Docker Compose: Инструмент для запуска многоконтейнерных приложений на основе docker-compose.yaml. Обычно поставляется вместе с Docker. Чтобы проверить, установлена ли утилита, нужно запустить команду:
        docker-compose --version
    
  2. В директории, где находится файл docker-compose.yaml, выполнить следующую команду для запуска всех сервисов:

        docker-compose up --build
    

    Эта команда сначала выполнит сборку, а затем запустит контейнеры.

  3. После успешного запуска можно перейти к Swagger UI:

  4. Stream сервис предоставляет следующие эндпоинты:

    • GET /streams — получить все стримы
    • POST /streams — создать новый стрим
    • GET /streams/{id} — получить стрим по ID
    • PUT /streams/{id} — обновить стрим по ID
    • DELETE /streams/{id} — удалить стрим по ID

    Message сервис предоставляет:

    • GET /messages — получить все сообщения
    • POST /messages — создать новое сообщение
    • GET /messages/{id} — получить сообщение по ID
    • GET /messages/all/{streamId} — получить все сообщения, которые относятся к streamId
    • PUT /messages/{id} — обновить сообщение по ID
    • DELETE /messages/{id} — удалить сообщение по ID

Технологии

  1. Golang: основной язык программирования для микросервисов.
  2. PostgreSQL: база данных для хранения данных о стримах и сообщениях.
  3. Docker & Docker Compose: для контейнеризации сервисов и удобного развертывания.
  4. Swagger UI: для документации и тестирования API.
  5. Nginx: для проксирования запросов между клиентом и микросервисами.
  6. Gorilla Mux: маршрутизация запросов в Go.
  7. Zerolog: логирование ошибок и действий.

Архитектура

Проект реализован на основе микросервисной архитектуры. Каждый сервис (Stream и Message) использует свою собственную базу данных (всего их две и в каждой БД по одной таблице) и предоставляет свои эндпоинты для работы с данными. Используются Docker и Docker Compose для управления окружением и запуска сервисов.

Ход работы

  1. Микросервисная архитектура: Проект разделен на два микросервиса: один для управления стримами, другой — для управления сообщениями. Каждый сервис имеет свой собственный набор функций, таблицы в базе данных и собственные эндпоинты для взаимодействия с клиентом.

  2. Реализация взаимодействия между микросервисами: Stream-сервис предоставляет заголовки для стримов, которые затем использует Message-сервис для работы с сообщениями, привязанными к стримам. Взаимодействие реализовано через HTTP-запросы между сервисами.

  3. Использование Swagger: Для каждого сервиса настроена Swagger-документация. Это позволяет визуализировать и тестировать API прямо в браузере, что упрощает разработку и тестирование.

  4. Докеризация проекта: Все микросервисы и вспомогательные сервисы, такие как база данных и Nginx, запускаются через Docker Compose. Это упрощает управление зависимостями и разворачивание проекта.

В коде присутствуют пояснительные комментарии.

Демонстрационное видео

Видеозапись доступна по адресу: https://vk.com/video193898050_456240870