itmo-microservice's People
itmo-microservice's Issues
Проектная часть 4 lab - Проектирование API Gateway
- Описание последовательности действий (в виде соответствующий UML диаграммы) взаимодействия сервисов через API Gateway для каждой из заданных в условии операций, вовлекающих в исполнение более одного сервиса.
- Описание должно включать как позитивные сценарии, так и покрывать случаи исключительных ситуаций
- Проектирование как минимум одного запроса, требующего получать и агрегировать (создавать новую структуру данных на основе полученных данных) данные из более чем одного сервиса
Docker swarm
- Запуск системы в Docker Swarm.
- Проверка работоспособности системы при наличии нескольких работающих экземпляров каждого из сервисов.
- Проверка работоспособности (здесь речь скорее о правильной обработке частичных падений и т.д.) при отсутствии работающих экземпляров каждого из сервисов.
Swagger на микросервисах и проброс endpointа через API Gateway
Требуется для упрощения сдачи 4 лабы. Если у нас будет простой инструмент для показа возможностей сервисов, то и сдавать будет проще
Добавить swagger-ui для каждого из микросервисов и просмотреть доступность странички с описанием по эндпоинту [сервис]/swagger-ui.html
Реализация сервиса склада
Ориентируемся на ER и описание из лабы:
Публичное API:
-
Name: Get items
Method: GET
Path: api/warehouse/items
Parameters: -
Input: -
Returns: коллекцию объектов представляющих товар (ItemDto), обязательные поля: идентификатор (id: integer), наименование (name: string), количество доступных для
заказа (amount: integer), цена (price: money)
Invariants: - -
Name: Get item by id
Method: GET
Path: api/warehouse/items/{item_id}
Parameters: not null {item_id} - идентификатор товара
Input: -
Returns: ItemDto {id, name, amount, price}
Invariants: - -
Name: Create item
Method: POST
Path: api/warehouse/items
Parameters: -
Input: ItemCreationDto {name, amount, price}
Returns: ItemDto {id, name, amount, price}
Invariants: До вызова объект не существует в базе данных, после вызова количество товаров с данным идентификатором становится равно amount -
Name: Add existing items
Method: PUT
Path: api/warehouse/items/{id}/addition/{amount}
Parameters: id - идентификатор товара, 0 > amount > 10_000 - количество добавляемых товаров
Input: -
Returns: ItemDto {id, name, amount} - обновленное состояние объекта
Invariants: - -
Name: Reserve items
Method: POST
Path: api/warehouse/items/{id}/reserve/{amount}
Parameters: id - идентификатор товара, 0 > amount > 10_000 - количество резервируемого товаров
Input: -
Returns: ReserveItemDto {id, name, amount} - зарезервированная продукция
Invariants: Если количество резервируемого товара больше чем на складе, то резервируется весь товар, который есть -
Name: Unreserve items
Method: POST
Path: api/warehouse/items/{id}/unreserve/{amount}
Parameters: id - идентификатор товара, 0 > amount > 10_000 - количество добавляемых товаров
Input: -
Returns: ItemDto {id, name, amount} - обновленное состояние объекта
Invariants: -
Проектная часть 2 lab
Нужно расписать как сервисы взаимодействуют, частично это сделано
Но стоит проверить корректность и полноту описания, поменять асинхронную диаграмму по требованиям Юрия и добавить еще парочку диаграмм(т.к. сказали, что как-то мало)
Реализация API Gateway
- Реализация роутинга (направления) запросов к целевым сервисам.
- Интегрирование механизма балансировки нагрузки (client size / service side). Поддержание его при развертывании с помощью Docker-compose
- Использование паттерна circuit breaker
blocked by #14
Реализация сервиса заказа
Ориентируемся на ER и описание из лабы:
Публичное API:
Name: Get orders
Method: GET
Path: api/orders
Parameters: -
Input: -
Returns: коллекцию объектов представляющих заказ (OrderDto), обязательные поля: идентификатор (id: integer), статус заказа (status {COLLECTING, PAYED, SHIPPING, COMPLETE, FAILED, CANCELLED} : string/enum ), суммарная стоимость (totalCost: money), количество товаров в заказе (totalAmount: integer), идентификатор пользователя (username: string), коллекция объектов представляющих (ItemDto[]).
Invariants: -
Name: Get order by id
Method: GET
Path: api/orders/{order_id}
Parameters: not null {order_id} - идентификатор заказа
Input: -
Returns: OrderDto {id, status, username, totalCost, totalAmount, ItemDto[]} - актуальное состояние объекта.
Invariants: -
Name: Add item to order
Method: POST
Path: api/orders/{order_id}/item
Parameters: nullable {order_id} - идентификатор заказа
Input: not null ItemAdditionParametersDto {id, 0< amount < 100, username}
Returns: -
OrderDto { id } - как минимум идентификатор заказа, которому была добавлена деталь.
Invariants: -
если переданный идентификатор заказа null, то в результате вызова в базе данных создается новый заказ и его идентификатор возвращается клиенту после вызова заказ содержит товары, которые содержал до вызова и новый товар с характеристиками, переданными в ItemAdditionParametersDto после вызова количество доступных товаров с данным дентификатором становится меньше на amount, но не может стать меньше нуля.
Name: Change order status
Method: PUT
Path: api/orders/{order_id}/status/{status}
Parameters: not null {order_id} - идентификатор заказа, not null {status} - {COLLECTING, PAID, SHIPPING, COMPLETE, FAILED, CANCELLED} - статус, в который переводится заказ.
Input: -
Returns: OrderDto {id, status} - как минимум идентификатор и статус заказа
Invariants: статус заказа меняется в соответствии с машиной состояний в зависимости от результата вызова в случае перевода в состояния {FAILED, CANCELLED} количество доступных товаров, которые были включены в данный заказ, увеличивается на количество их в заказе
Deploy в AWS облако, CI/CD
Нужно сделать PR для https://github.com/microservices-course-itmo/designing_microservices_course
Deploy обвязка
Контейнеризация, регистрация и обнаружение сервисов (service discovery), проверки жизнеспособности (health check)
- Создание Docker контейнеров для каждого из сервисов (микросервисов и инфраструктурных сервисов) на базе образов из общедоступных репозиториев
- Создание Docker-compose файла, способного запустить всю систему в работоспособном состоянии
- Интегрирование механизма service discovery (client side / service side). Поддержание его при развертывании с помощью Docker-compose.
Ручное тестирование
Подергать endpoint в нормальных режимах, с граничными значениями и некорректными входными данными
Поведение должно соответсовать описанному в API
ACID Транзакциии
Разобраться как там это делается в Hibernate, нужно ли нам это и где именно
Реализация межсервисного взаимодействия
OpenFeign, RabbitMQ
https://github.com/OrangeFlag/itmo-microservice/tree/service/labs/lab2
Реализация сервиса оплаты
Ориентируемся на ER и описание из лабы:
Публичное API:
- Name: Perform payment
Method: PUT
Path: api/payment/{order_id}
Parameters: not null {order_id} - идентификатор заказа
Input: UserDetailsDto {username, cardAuthorizationInfo {AUTHORIZED, UNAUTHORIZED}: string/enum} - оплата производится в зависимости от статуса карты.
Returns: OrderDto { id } - как минимум идентификатор заказа.
Invariants: статус заказа меняется в соответствие с машиной состояний в зависимости от результата вызова в случае неуспешной попытки количество доступных товаров, которые были включены в данный заказ, увеличивается на количество их в заказе
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.