Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/capcom6-learning/otus-python-basic-project
https://github.com/capcom6-learning/otus-python-basic-project
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/capcom6-learning/otus-python-basic-project
- Owner: capcom6-learning
- License: apache-2.0
- Created: 2022-08-10T15:03:44.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2024-06-18T23:23:04.000Z (7 months ago)
- Last Synced: 2024-11-20T16:59:46.607Z (about 2 months ago)
- Language: Python
- Size: 57.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Серверная часть погодного портала для метеостанций
Приложение предназначено для сбора информации о текущей погоде с метеостанций и предоставления погодной информации клиентам.
## Требования
### Функциональные требования
- получение данных с нескольких метеостанций;
- получение данных в нескольких форматах;
- работа как минимум с 3 измерениями: температура воздуха, скорость ветра, направление ветра;
- предоставление информации о текущей погоде;
- предоставление информации о погоде за период в виде графиков;
- предоставление информации о прогнозе погоды (за счет внешних сервисов);
- наличие веб-интерфейса пользователя с анонимным доступом;
- наличие API для мобильных приложений;
- наличие административного интерфейса для управления списком метеостанций.### Нефункциональные требования
- хранение погодных данных не менее 5 лет;
- возможность горизонтального масштабирования и шардирования хранилища.### Оценка нагрузки
1. 1_000 метеостанций.
2. Измерения каждые 5 секунд -> 1_000 запросов на 5 секунд -> 200 RPS.
3. 100_000 пользователей в сутки.
4. Среднее время сессии 5 минут.
5. Автоматическое обновление страницы каждые 10 секунд -> 30 запросов на пользователя -> 3_000_000 запросов в сутки -> 35 RPS.С учетом неравномерности нагрузки от пользователей - 200 RPS + 3 * 35 RPS = 305 RPS.
### Оценка хранилища
1. Одна запись - 512 байт.
2. 17_280 измерений в сутки с каждой метеостанции -> 17_280_000 записей в сутки с 1_000 метеостанций -> 8 ГБ в сутки.
3. Прогнозные данные: 1_000 метеостанций каждые 2 часа 1 запись -> 6МБ в сутки.
4. За 5 лет - 15 ТБ данных.
5. + индексы.### Оценка кэша
1. Кэширование сформированных графиков.
2. Один график - 64 кб.
3. 1_000 метеостанций x 3 графика x 64 кб -> 188 МБ ОЗУ.### Оценка пропускной способности
1. Получение данных с метеостанций: 200 RPS * 1_024 байта (данные + заголовки) = 200 кб/с.
2. Предоставление данных пользователям: 3_000_000 запросов в сутки, 50% - текущая погода (1_024 байта), 30% - массив данных (100 кб), 20% - графики (192 кб) = 1,43 ГБ + 85,83 ГБ + 109,86 ГБ = 197,12 ГБ в сутки -> 2_392 кб/с.С учетом неравномерности нагрузки - 10 МБ/с.
## Минимальная реализация
В рамках MVP планируется реализовать:
- [x] API администратора:
- [x] Basic авторизация;
- [x] добавление, редактирование и удаление метеостанций.
- [x] получение данных от метеостанций в одном формате;
- [x] сохранение данных в БД;
- [x] API клиентов:
- [x] список метеостанций;
- [x] текущие погодные данные;
- [x] массив данных за период по выбранным измерениям;
- [x] графики изменения параметров.
- [x] страница состояния метеостанций.### Технологии
Планируется использовать следующее ПО, библиотеки и технологии:
* Nginx, Gunicorn, Uvicorn, FastAPI - HTTP-доступ;
* MongoDB, Motor - хранение данных и доступ к ним;
* Matplotlib - построение графиков;
* Jinja2 - шаблонизатор для страницы состояния.## Рабочие заметки
Ссылка запроса прогноза. Время отстает на ~ -17 часов.
https://www.windguru.net/int/iapi.php?q=forecast&id_model=3&rundef=2022082018x0x240x0x240&initstr=2022082018&id_spot=233638&WGCACHEABLE=21600&cachefix=54.643x90.165x369