DAS_2024_1/putilin_pavel_lab_3/README.md
2024-12-02 23:57:46 +04:00

4.9 KiB
Raw Blame History

Лабораторная работа №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:

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