67 lines
4.9 KiB
Markdown
67 lines
4.9 KiB
Markdown
|
# Лабораторная работа №3 - REST API, шлюз и синхронный обмен данными между микросервисами
|
|||
|
|
|||
|
## Задание
|
|||
|
|
|||
|
### Цель:
|
|||
|
Изучение принципов проектирования с использованием паттерна шлюза, организации синхронной передачи данных между микросервисами и применения архитектурного стиля RESTful API.
|
|||
|
|
|||
|
### Задачи:
|
|||
|
1. Создание двух микросервисов, которые реализуют операции CRUD для связанных сущностей (клиенты и заказы).
|
|||
|
2. Реализация механизма синхронного обмена данными между микросервисами.
|
|||
|
3. Настройка шлюза на базе Nginx в качестве прозрачного прокси-сервера.
|
|||
|
|
|||
|
### Микросервисы:
|
|||
|
1. **client_service** — сервис, который управляет информацией о клиентах.
|
|||
|
2. **order_service** — сервис, который обрабатывает данные о заказах, сделанных клиентами.
|
|||
|
|
|||
|
### Связь между микросервисами:
|
|||
|
- Один клиент может иметь множество заказов (соотношение 1 ко многим).
|
|||
|
|
|||
|
### Как запустить проект:
|
|||
|
Для запуска приложения необходимо выполнить команду:
|
|||
|
```
|
|||
|
docker-compose up
|
|||
|
```
|
|||
|
|
|||
|
## Описание работы:
|
|||
|
|
|||
|
Для разработки микросервисов был выбран язык программирования Python с использованием фреймворка Flask. Каждый микросервис реализует стандартные операции CRUD (создание, чтение, обновление и удаление) для своей сущности.
|
|||
|
|
|||
|
### Синхронный обмен данными
|
|||
|
Микросервис `order_service` отправляет HTTP-запросы к сервису `client_service` для получения актуальной информации о клиентах, с которыми связаны заказы. Это позволяет создавать заказ с привязкой к конкретному клиенту, а также обновлять или удалять данные о заказах, учитывая информацию о клиенте.
|
|||
|
|
|||
|
### Docker Compose
|
|||
|
Конфигурационный файл `docker-compose.yml` представляет собой многоконтейнерное приложение, которое включает в себя три сервиса: `client_service`, `order_service` и `nginx`. С помощью Docker Compose можно запустить все три контейнера одновременно. Функция маршрутизации запросов возложена на сервер Nginx, который управляет входящими запросами и перенаправляет их на соответствующие микросервисы.
|
|||
|
|
|||
|
### Nginx
|
|||
|
Конфигурационный файл Nginx (`nginx.conf`) управляет маршрутизацией входящих запросов. В зависимости от URL, запросы перенаправляются на сервисы:
|
|||
|
|
|||
|
- Запросы по пути `/client/` перенаправляются на сервис `client_service`.
|
|||
|
- Запросы по пути `/order/` перенаправляются на сервис `order_service`.
|
|||
|
|
|||
|
Пример конфигурации Nginx:
|
|||
|
```nginx
|
|||
|
server {
|
|||
|
listen 80;
|
|||
|
|
|||
|
location /client/ {
|
|||
|
proxy_pass http://client_service:8000;
|
|||
|
}
|
|||
|
|
|||
|
location /order/ {
|
|||
|
proxy_pass http://order_service:8001;
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### Взаимодействие между микросервисами
|
|||
|
- **client_service**: Этот сервис управляет информацией о клиентах (например, имя клиента, номер и дата выдачи).
|
|||
|
- **order_service**: Этот сервис управляет заказами и хранит информацию о каждом заказе, связанном с конкретным клиентом. Заказы могут быть созданы, обновлены или удалены через RESTful API.
|
|||
|
|
|||
|
Когда заказ создается или обновляется в `order_service`, он отправляет запрос к `client_service`, чтобы получить подробную информацию о клиенте (например, имя, номер и дата выдачи абонемента).
|
|||
|
|
|||
|
### ВИДЕО
|
|||
|
|
|||
|
https://cloud.mail.ru/public/oG1Y/GXywRodDN
|
|||
|
|