DAS_2024_1/bondarenko_max_lab_3/README.md
2024-11-25 02:23:32 +04:00

3.6 KiB
Raw Blame History

Лабораторная работа 3 - REST API, Gateway и синхронный обмен между микросервисами

ПИбд-42 || Бондаренко Максим

Цель: Изучение шаблона проектирования gateway, построения синхронного обмена между микросервисами и архитектурного стиля RESTful API.

Задачи:

  1. Создать 2 микросервиса, реализующих CRUD на связанных сущностях.
  2. Реализовать механизм синхронного обмена сообщениями между микросервисами.
  3. Реализовать шлюз на основе прозрачного прокси-сервера nginx.

Описание В данной лабораторной работе мы разворачиваем два микросервиса:

  1. Authors - микросервис для управления авторами.
  2. Books - микросервис для управления книгами.

Файлы-конфигурации

  1. docker-compose.yml
version: '3.7'

services:
  authors:
    build:
      context: ./authors
    ports:
      - "3000:3000"
    networks:
      - app-network

  books:
    build:
      context: ./books
    ports:
      - "3001:3001"
    networks:
      - app-network
    depends_on:
      - authors

  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - authors
      - books
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

authors: Микросервис, отвечающий за управление данными об авторах, доступный на порту 3000. books: Микросервис, отвечающий за управление данными о книгах, доступный на порту 3001. Зависит от микросервиса authors. nginx: Сервис, работающий как обратный прокси-сервер, маршрутизирующий запросы к другим сервисам authors и books, слушая на порту 80.

  1. nginx.conf
events {
    worker_connections 1024;
}

http {
    upstream authors_service {
        server authors:3000;
    }

    upstream books_service {
        server books:3001;
    }

    server {
        listen 80;

        location /authors {
            proxy_pass http://authors_service;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-Proto $scheme;
        }

        location /books {
            proxy_pass http://books_service;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

location /authors: Все запросы, начинающиеся с /authors, будут проксироваться к микросервису authors, который работает на порту 3000. location /books: Все запросы, начинающиеся с /books, будут проксироваться к микросервису books, который работает на порту 3001.

Шаги для запуска:

Переходим в корневую папку всего решения и пишем команду:

docker-compose up --build

Видео демонстрация работы https://cloud.mail.ru/public/hLWs/iuqweU92e