ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 29.11.2023
Просмотров: 51
Скачиваний: 8
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Практическая работа № 01
ЗАДАЧА.
Построить диаграмму развертывания Full-stack приложения, определяя требования к развертыванию микросервисной архитектуры (MSA). Среда разработки приложения: PyCharm (язык программирования: Python), среда выполнения кода: Интернет-браузер на платформе Firefox (табл. 1).
Таблица 1
Исходные данные (вариант 33) для установления требований к MSA
Значение | По цифре y | По цифре z | ||||||
Цифры (yz) | Типовые операции 2 | Интерфейсы (API) | Разрешенные типовые операции для заданных ролей | Условие изменения роли User | Мессенджер | Браузер для тестирования в Selenium | Доступ к контенту БД | |
3 | CQRS | RESTful / HTTP | Guest: CQ; User: CQR; IgnUser: C; Admin: CQRS | IgnUser, если не пытался ответить на 4 вопроса подряд | – | – | – | |
3 | – | – | – | – | | Firefox | API token |
решение
Решение задачи определения требований к MSA для варианта № 33 (табл. 1) приводится по следующим исходным данным:
-
типовые операции: CQRS; доступ к типовым операциям:-
Guest: CQ; -
User: CQR -
; IgnUser: C; -
Admin: CQRS;
-
-
условие изменения роли User: становится IgnUser, , если не пытался ответить на 4 вопроса подряд; -
интерфейсы: RESTful / HTTP; -
мессенджер: WhatsApp; -
драйвер тестирования Selenium: для Интернет-браузеров на платформе Chromium; -
доступ к контенту БД: по API-токену.
Соответствующая диаграмма развертывания представлена на рис. 1.
Ориентируясь на рис. 1, необходимо установить следующие требования при построении Full-stack приложения на основе MSA:
-
соответствие драйвера Selenium для задач автоматизированного тестирования: для установленного на компьютере Интернет-браузера Firefox (версия 109.0.1 для 64-разрядной Windows 10) выбрана предшествующая версия архива firefox_109.0.1.exe (версия 109.0.1 для операционной системы, совместимой с 32-разрядной Windows);
Рис. 1. Диаграмма развертывания для определения требований к MSA
-
взаимодействие с веб-сервером, используя Python, может осуществляться с помощью Spyne (выполняет RPC на языке Python): входной протокол HTTP, выходной протокол RESTful; -
должен быть сформирован токен API, доступ к которому есть только у администратора (роль Admin); -
СУБД должна быть типа ключ-значение, поскольку доступ задан с помощью HTTP; -
если пользователь не отвечает на 4 отправленных запроса, пользователь, имеющий роль User, получает роль IgnUser.
Исходный код PlantUML-диаграммы:
@startuml
left to right direction
title Full-stack приложение на основе микросервисной архитектуры
node nPythonIDE as "Интегрированная среда разработки на Python\n{IDE=__PyCharm 2022.0.3__}\n{OS=__Windows x64__}"{
node nChecking as "Модуль проверки\nлогин-пароля\n{ API token}"{
artifact aKey as "API Token"
artifact aLogin as "Логин"
artifact aPassword as "Пароль"
}
node nService as "Сервис обработки сообщений WhatsApp"{
}
node nRole as "Модуль управления ролью \n{ Operations = __CQRS__ }"{
node Guest as "Гостевой пользователь\n __{Command, Query}__"
node User as "Зарегестрированный пользователь\n __{Command, Query, Responsibility}__"
node IgnUser as "Игнорируемый пользователь\n __{Command}__"
node Admin as "Администратор\n __{Command, Query, Responsibility,Segregation}__"
}
}
node nPythonRPC as "Сервер обработки RPC"{
node nDatabase as "Хранилище типа ключ-значение \n{Database = __{Google AppEngine Data Store,__\n __Microsoft: SQL Data Services, CouchDB}__}"{
artifact aMessages as "Число проигнорированных вопросов\n{MinCount = __4__}"
}
node nSpyne as "Веб-cервис Spyne"{
}
}
node nWebServer as "Веб-сервер"{
artifact aSelenium as "WebDriver Selenium\n{Version = __90.0.4430.24__}\n{OS = __Windows x86__}"
artifact aBrowser as "Firefox\n{Version = __109.0.1__}\n{OS = __Windows x64__}"
}
User .> IgnUser : manifest
Admin ..> nDatabase : deploy
Admin ..> nPythonRPC : manifest
nPythonIDE --> nPythonRPC : "\n__HTTP__"
nPythonRPC -> nWebServer : " __RESTful API__\n"
aLogin .left.> aKey : \nmanifest
aPassword .right.> aKey : \nmanifest
@enduml