forked from Alexey/DAS_2024_1
90 lines
6.9 KiB
Markdown
90 lines
6.9 KiB
Markdown
|
# Отчет по лабораторной работе №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)
|