4.9 KiB
Лабораторная работа №3 - REST API, шлюз и синхронный обмен данными между микросервисами
Задание
Цель:
Изучение принципов проектирования с использованием паттерна шлюза, организации синхронной передачи данных между микросервисами и применения архитектурного стиля RESTful API.
Задачи:
- Создание двух микросервисов, которые реализуют операции CRUD для связанных сущностей (клиенты и заказы).
- Реализация механизма синхронного обмена данными между микросервисами.
- Настройка шлюза на базе Nginx в качестве прозрачного прокси-сервера.
Микросервисы:
- client_service — сервис, который управляет информацией о клиентах.
- 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:
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
, чтобы получить подробную информацию о клиенте (например, имя, номер и дата выдачи абонемента).