Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sprint 1 #111

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
176 changes: 176 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
# Задание1. Микрофронтенды

Выбором фреймворка для микрофронтендов станет Webpack Module Federation. Для этого несколько причин:

- в этом приложении будет разумно использовать общие компоненты в приложении
- нам не нужны возможности single spa в использовании разных фреймворков, т.к. нет планов использовать другие фреймворки в приложении
- нам подходит build time компоновка

```
.

├── auth // микрофронтенд, отвечающий за авторизацию

│   ├── blocks

│   │   ├── auth-form // стили микрофронтенда

│   │   └── login

│   └── components

│   ├── InfoTooltip.js // окна логина и регистрации и попап с сообщением об успешной авторизации

│   ├── Login.js

│   └── Register.js

│   └── utils // код обращения к бэку для авторизации

│   ├── api.js

├── host // микрофронтенд, выступает в роли хоста для остальных микрофреймворков

│   ├── blocks

│   │   ├── footer

│   │   ├── header

│   │   └── page

│   ├── components // вынесли компоненты, которые не подходят под определение конкретной доменной области

│   │   ├── App.js. // файл отвечает за маршрутизацию. Нужно будет его настроить для использования с микрофронтендами

│   │   ├── Footer.js

│   │   ├── Header.js

│   │   └── ProtectedRoute.js

│   ├── contexts

│   │   └── CurrentUserContext.js

│   ├── images

│   │   └── logo.svg

│   ├── public

│   │   ├── favicon.ico

│   │   ├── index.html

│   │   ├── logo192.png

│   │   ├── logo512.png

│   │   ├── manifest.json

│   │   └── robots.txt

│   └── utils

│   ├── api.js // в файле находит логика для всех наших микрофронтендов. В текущем состоянии я бы использовал его как shared dependency. По мере развития

// приложения можно разбить файл на составляющие.

├── photos // микрофронтенд, отвечающий за отображение картинок на странице

│   ├── blocks

│   │   ├── card

│   │   ├── places

│   │   └── popup

│   ├── components // компоненты, связанные с добавлением и изменением картинок

│   │   ├── AddPlacePopup.js

│   │   ├── ImagePopup.js

│   │   └── PopupWithForm.js

│   │   └── Card.js

│   └── images

│   ├── add-icon.svg

│   ├── card_1.jpg

│   ├── card_2.jpg

│   ├── card_3.jpg

│   ├── close.svg

│   ├── like-active.svg

│   └── like-inactive.svg

│   ├── like-active.svg

│   └── like-inactive.svg

└── profile // микрофронтенд, отвечающий за профиль пользователя. Редактирование аватарки и информации о себе.

├── blocks

│   └── profile

├── components

│   ├── EditAvatarPopup.js

│   └── EditProfilePopup.js

└── images

├── avatar.jpg

├── edit-icon.svg

├── error-icon.svg

└── success-icon.svg

```

# Задание 2. Разделение монолита на микросервисы

Схема draw.io (файл): [arch_template_task2.drawio](arch_template_task2.drawio)


### Проектирование

Бэкенд монолита предлагаю разбить на микросервисы в соответствии с их бизнес функциями.

- Сервис авторизации пользователей - сервис управляет авторизацией, определяет роль пользователя в системе, сохраняет данные о пользователе.
- Сервис заказов - сервис собирает данные о товарах и услугах, которые приобретает пользователь. Предоставляет информацию о товарах сервису оплаты и аналитики.
- Сервис аукционов - отвечает за функционал аукционов
- Сервис товаров и услуг - хранит информацию о товарах и услугах. Позволяет пользователям редактировать эту информацию.
- Сервис оплат - занимается интеграцией с платежными системами
- Сервис поддержки пользователей - отвечает за взаимодействие пользователей и техподдержки.
- Сервис аналитики - отвечает за сбор информации от различных сервисов, нужно для генерации аналитических отчетов. Здесь пригодится специализированное решение для бд. Как предложение, можно использовать ClickHouse как БД, оптимизарованную под аналитические задачи.

На время разработки микросервисов, нам пригодится старый монолит, доступ к которому будет обеспечиваться через ACL.

Фронтенд приложения можно разбить на микрофронтенды. Здесь тоже можно применить разделение по бизнес функциям.

Для маршрутизации к микросервисам будем использовать обратный прокси сервер nginx.


### Межсервисные взаимодействия

1 - Сервис заказов получает информацию о товарах и услугах по внешнему id товаров и услуг.

2, 3, 4, 5 - Сервисы заказов, авторизации, товаров и услуг, оплат отправляют информацию в сервис аналитики.

6 - Сервис оплат запрашивает информацию о стоимости заказа для создания транзакции в платежном сервисе.

7, 8 - Взамодействие с внешними платежными сервисами - создание и подтверждение платежа, отмена платежа
Loading