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

90 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Отчет по лабораторной работе №3
## Поставленные задачи
1. Создать 2 микросервиса, реализующих CRUD на связанных сущностях.
2. Реализовать механизм синхронного обмена сообщениями между микросервисами.
3. Реализовать шлюз на основе прозрачного прокси-сервера nginx.
## Предметная область
Проект основан на системе управления стримами (трансляциями) и сообщениями.
Каждый стрим представляет собой событие с такими параметрами, как название,
время начала и окончания (окончание может быть null).
Сообщения связаны с конкретными стримами и содержат следующие атрибуты: содержание,
дата публикации, идентификатор стрима, к которому имеет отношение комментарий. Связь между сущностями один ко многим
Два микросервиса выполняют раздельные функции: один управляет стримами, другой — сообщениями.
Взаимодействие между ними происходит через HTTP-запросы.
## Запуск работы
1. Убедиться, что установлены необходимые технологии:
- Docker: Платформа для контейнеризации приложений.
- Docker Compose: Инструмент для запуска многоконтейнерных приложений на основе `docker-compose.yaml`. Обычно поставляется вместе с Docker. Чтобы проверить, установлена ли утилита, нужно запустить команду:
```bash
docker-compose --version
```
2. В директории, где находится файл `docker-compose.yaml`, выполнить следующую команду для запуска всех сервисов:
```bash
docker-compose up --build
```
Эта команда сначала выполнит сборку, а затем запустит контейнеры.
3. После успешного запуска можно перейти к Swagger UI:
- Message Swagger UI: [http://localhost/message-service/swagger/index.html](http://localhost/message-service/swagger/index.html#/).
- Stream Swagger UI: [http://localhost/stream-service/swagger/index.html](http://localhost/message-service/swagger/index.html#/).
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](https://vk.com/video193898050_456240870)