Это шаблон для решения проектной работы. Структура этого файла повторяет структуру заданий. Заполняйте его по мере работы над решением.
Чтобы составить документ с описанием текущей архитектуры приложения, можно часть информации взять из описания компании и условия задания. Это нормально.
1. Описание функциональности монолитного приложенияУправление отоплением:
- Пользователи могут удалённо включать/выключать отопление в своих домах
- Система поддерживает управление отоплением через web-интерфейс
- Подключение к системе происходит с помощью выезда специалиста
- Самостоятельное подключение к системе пользователям не доступно
Мониторинг температуры:
- Пользователи могут просмартивать текущую температуру в своих домах через web-интерфейс
- Система поддерживает синхронную передачу данных
- Система получает данные о температуре с датчиков, установленных в домах
- Подключение датчиков происходит с помощью выезда специалиста
- Самостоятельное подключение датчиков к системе пользователям не доступно
- Язык программирования: Go
- База данных: PostgreSQL
- Архитектура: Монолитная, все компоненты системы (обработка запросов, бизнес-логика, работа с данными) находятся в рамках одного приложения.
- Взаимодействие: Синхронное, запросы обрабатываются последовательно.
- Масштабируемость: Ограничена, так как монолит сложно масштабировать по частям.
- Развертывание: Требует остановки всего приложения.
- Домен "Управление устройствами", контекст "Включение/выключение системы отопления"
- Домен "Мониторинг температуры", контекст "Просмотр данных о температуре"
- Домен "Подключение устройств", контекст "Подключение нового устройства к системе"
- Масштабируемость ограничена
- Развертывание требует остановки всего приложения
- Разработка замедлена
- Высокий риск ошибок
В этом задании вам нужно предоставить только диаграммы в модели C4. Мы не просим вас отдельно описывать получившиеся микросервисы и то, как вы определили взаимодействия между компонентами To-Be системы. Если вы правильно подготовите диаграммы C4, они и так это покажут.
Диаграмма контейнеров (Containers)
Диаграмма компонентов (Components)
Диаграмма кода (Code)
Async API имеет следующие преимущества:
- уменьшение нагрузки на сервер
- хорошая масштабируемость
- лучше подходит для работы с умными устройствами
Перейдите в apps.
Там находится приложение-монолит для работы с датчиками температуры. В README.md описано как запустить решение.
Вам нужно:
- сделать простое приложение temperature-api на любом удобном для вас языке программирования, которое при запросе /temperature?location= будет отдавать рандомное значение температуры.
Locations - название комнаты, sensorId - идентификатор названия комнаты
// If no location is provided, use a default based on sensor ID
if location == "" {
switch sensorID {
case "1":
location = "Living Room"
case "2":
location = "Bedroom"
case "3":
location = "Kitchen"
default:
location = "Unknown"
}
}
// If no sensor ID is provided, generate one based on location
if sensorID == "" {
switch location {
case "Living Room":
sensorID = "1"
case "Bedroom":
sensorID = "2"
case "Kitchen":
sensorID = "3"
default:
sensorID = "0"
}
}
-
Приложение следует упаковать в Docker и добавить в docker-compose. Порт по умолчанию должен быть 8081
-
Кроме того для smart_home приложения требуется база данных - добавьте в docker-compose файл настройки для запуска postgres с указанием скрипта инициализации ./smart_home/init.sql
Для проверки можно использовать Postman коллекцию smarthome-api.postman_collection.json и вызвать:
- Create Sensor
- Get All Sensors
Должно при каждом вызове отображаться разное значение температуры
Ревьюер будет проверять точно так же.