DAS_2023_1/savenkov_alexander_lab_3/README.md

168 lines
9.1 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 - REST API, Gateway и синхронный обмен между микросервисами
Цель: изучение шаблона проектирования gateway, построения синхронного обмена между микросервисами и архитектурного стиля RESTful API.
Задачи:
Создать 2 микросервиса, реализующих CRUD на связанных сущностях.
Реализовать механизм синхронного обмена сообщениями между микросервисами.
Реализовать шлюз на основе прозрачного прокси-сервера nginx.
# Создание микросервисов
1-й микросервис - video-conferencing-application для сущности Приложение для видеоконференций
2-й микросервис - webcam-application для сущности Веб-камера
Сущность: Веб-камера (Webcam):
1. УИД (Уникальный идентификатор): Уникальный номер или код, идентифицирующий конкретную веб-камеру.
2. Модель (Model): Название и модель веб-камеры.
3. Разрешение (Resolution): Максимальное разрешение видеозаписи, которое может предоставить веб-камера.
4. Интерфейс (Interface): Тип интерфейса для подключения к компьютеру (USB, Wi-Fi и т.д.).
5. УИД видеоконференции (subscriptionUuid): УИД видеоконференции, с которым данная веб-камера связана. Это поле устанавливает связь "1-ко-многим" между веб-камерой и приложением.
6. Информация о видеоконференции (subscriptionInfo): Информация полученная по subscriptionUuid и УИД видеоконференций о приложении для видеоконференции. Хранит в себе информацию об Приложение для видеоконференций (Name, Supported Platforms, Maximum Participants)
Сущность: Приложение для видеоконференций (Video Conferencing Application):
1. УИД (Уникальный идентификатор): Уникальный номер или код, идентифицирующий конкретное приложение для видеоконференций.
2. Название (Name): Название приложения для видеоконференций.
3. Поддерживаемые платформы (Supported Platforms): Операционные системы и устройства, на которых работает приложение (Windows, macOS, iOS, Android и др.).
4. Максимальное количество участников (Maximum Participants): Максимальное количество пользователей, которое может присоединиться к одной видеоконференции.
Связь "1-ко-многим" между этими сущностями реализуется через поле "УИД приложения" в сущности "Веб-камера". Каждая веб-камера связывается с конкретным приложением для видеоконференций через УИД этого приложения, и это позволяет одному приложению быть связанным с несколькими веб-камерами.
Вот примеры моделей для запросов:
Пример модели "Приложение для видеоконференций" для списка:
{
"uuid": "8f036445-a5bd-401c-926e-840f9de795cd",
"Name": "Zoom",
"Supported Platforms": "Windows, macOS, iOS, Android",
"Maximum Participants": 500
}
Пример модели "Приложение для видеоконференций" для создания или изменения:
{
"uuid": "8f036445-a5bd-401c-926e-840f9de795cd",
"Name": " Zoom",
"Supported Platforms": "Windows, macOS, iOS, Android",
"Maximum Participants": 500
}
Пример модели "Веб-камера" для списка:
{
"uuid": "8740d660-b251-4272-8535-be7ec3748d4b",
"Model": "Logitech C920",
"Resolution": "Full HD 1080p",
"Interface": "USB",
"subscriptionUuid": "8f036445-a5bd-401c-926e-840f9de795cd"
}
Пример модели "Веб-камера" для создания или изменения:
{
"Model": " Logitech C920",
"Resolution": " Full HD 1080p ",
"Interface": "USB",
"subscriptionUuid": "8f036445-a5bd-401c-926e-840f9de795cd"
}
Пример модели "Веб-камера" для подробностей:
{
"uuid": "8740d660-b251-4272-8535-be7ec3748d4b",
"Model": "Logitech C920",
"Resolution": "Full HD 1080p",
"Interface": "USB",
"subscriptionUuid": "8f036445-a5bd-401c-926e-840f9de795cd",
"subscriptionInfo": {
"Name": "Zoom",
"Supported Platforms": "Windows, macOS, iOS, Android",
"Maximum Participants": 500
}
}
<p>
<div>Структура 1-го микросервиса</div>
<img src="screens/img1.png" width="650" title="Структура 1-го микросервиса">
</p>
<p>
<div>Структура 2-го микросервиса</div>
<img src="screens/img2.png" width="650" title="Структура 2-го микросервиса">
</p>
- контроллеры для обработка запросов, дтошки для выбора что изображать в сваггере при запросах, модели для сущностей, репозитории для отправки данных, сервисы для бизнес-логики
# Докер файлы, докер компоус, nginx
<p>
<div>Докер файл для 1-го микросервиса</div>
<img src="screens/img3.png" width="650" title="Докер файл для 1-го микросервиса">
</p>
<p>
<div>Докер файл для 2-го микросервиса</div>
<img src="screens/img4.png" width="650" title="Докер файл для 2-го микросервиса">
</p>
-Использования базового образа, установка рабочий директории, копирования джар файла, экспорт порта, запуск приложения при запуске контейнера
<p>
<div>Докер компоус</div>
<img src="screens/img5.png" width="650" title="Докер компоус">
</p>
-создания общей сети для всех сервисов, запуск образов сервисов, проброска портов, копирования конфигурационного файла nginx и запуск этого сервиса после запуска других сервисов
<p>
<div>nginx</div>
<img src="screens/img6.png" width="650" title="nginx">
</p>
установка количества одновремменных подключений, прослушка запросов по 80 порту, серверное имя локалхост, адрес для переадресации запросов по нему, url переадрусации
<p>
<div>Скрин созданых образов</div>
<img src="screens/img7.png" width="650" title="Скрин созданых образов">
</p>
<p>
<div>Скрин созданых контейнеров</div>
<img src="screens/img8.png" width="650" title="Скрин созданых контейнеров">
</p>
<p>
<div>Swagger 1-го микросервиса</div>
<img src="screens/img9.png" width="650" title="Swagger 1-го микросервиса">
</p>
<p>
<img src="screens/img10.png" width="650">
</p>
<p>
<img src="screens/img11.png" width="650">
</p>
<p>
<img src="screens/img12.png" width="650">
</p>
<p>
<img src="screens/img13.png" width="650">
</p>
<p>
<img src="screens/img14.png" width="650">
</p>
<p>
<img src="screens/img15.png" width="650">
</p>
<p>
<img src="screens/img16.png" width="650">
</p>
<p>
<div>Swagger 2-го микросервиса</div>
<img src="screens/img17.png" width="650" title="Swagger 2-го микросервиса">
</p>
<p>
<img src="screens/img18.png" width="650">
</p>
<p>
<img src="screens/img19.png" width="650">
</p>
<p>
<img src="screens/img20.png" width="650">
</p>
<p>
<img src="screens/img21.png" width="650">
</p>
<p>
<img src="screens/img22.png" width="650">
</p>
<p>
<img src="screens/img23.png" width="650">
</p>
<p>
<img src="screens/img24.png" width="650">
</p>
# Видео
Видео с разбором лабораторной работы - https://youtu.be/FpiSDxH4FSU