bondarenko_max_lab_3

This commit is contained in:
maxnes3 2024-11-25 02:23:32 +04:00
parent 9ff5b267bc
commit 287fb33386
3 changed files with 129 additions and 2 deletions

View File

@ -1,2 +1,108 @@
# Лабораторная работа 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.
2. 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

View File

@ -6,12 +6,18 @@ services:
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
@ -19,3 +25,12 @@ services:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- authors
- books
networks:
- app-network
networks:
app-network:
driver: bridge

View File

@ -16,10 +16,16 @@ http {
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;
}
}
}