Skip to content

fifthleaf/infra-sys

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Projekt: Aplikacja forecastowa

Korzystając z wygenerowanych przez siebie przykładowych danych historycznych, trenuje prosty model z rodziny ARIMA oraz przewiduje zachowanie szeregu czasowego wskazaną ilość dni do przodu. Umożliwia określenie horyzontu oraz podgląd wykresu na stronie internetowej.

Kontenery / Pody

W każdym podzie znajduje się pojedynczy kontener. Własne obrazy bazują na uv, które jest nowoczesnym systemem zarządzania zależnościami w Pythonie, jako system wykorzystuje Debian Trixie. Obrazy dostępne są na DockerHub.

database

Wykorzystuje bazę TimescaleDB, pochodną PostgreSQL zoptymalizowaną pod pracę z szeregami czasowymi. Deployment umożliwia konfigurację nazwy bazy, katalog danych, użytkownika oraz jego hasła. Skalowanie baz przez replikację raczej nie jest rekomendowane, aczkolwiek dane trafiają do wolumenu.

model

Endpoint serwujący model wykorzystuje FastAPI. Posiada /predict oraz /health. W tym kontenerze także tworzona jest tabela w bazie wraz z danymi. Specyfika obrazu TimescaleDB bardzo utrudniała przeniesienie tego kroku na stronę bazy. Skalowany domyślnie na 3 repliki.

webapp

Udostępnia stronę internetową do wysyłania zapytań oraz wyświetlania wykresu predykcji. Gradio pozwala szybko budować aplikacje oparte na danych, dzięki czemu nie ma potrzeby implementacji interfejsu od podstaw. Docker Compose nie oferuje domyślnie LoadBalancer'a, więc skalowanie możliwe jedynie w Kubernetes.

Uruchamianie

Wykonywałem testy jedynie na linuxie, nie posiadam Windowsa na prywatnych urządzenaich.

Docker Compose

Należy przejść do katalogu docker i wykonać polecenie:

# aby nie zaciągnęło model i webapp z repozytorium
docker build
docker compose up

Później można usunąć z tego samego katalogu:

docker compose down
docker rmi fifthleaf/infra-sys:fastapi-model-1.0 \
           fifthleaf/infra-sys:gradio-webapp-1.0 \
           timescale/timescaledb:2.24.0-pg18

Kubernetes

Należy przejść do katalogu kubernetes lub wykorzystać flagę -f kubernetes:

kubectl apply -f .

Następnie można usunąć w tożsami sposób:

kubectl delete -f .
docker rmi fifthleaf/infra-sys:fastapi-model-1.0 \
           fifthleaf/infra-sys:gradio-webapp-1.0 \
           timescale/timescaledb:2.24.0-pg18

Weryfikacja

Strona internetowa domyślnie będzie dostępna pod adresem http://127.0.0.1:80/. W polu horyzont wybierz liczbę dni. Lepiej nie zbyt dużą, np. 5-30, gdyż to model autoregresywny. Po kliknięciu submit i odczekaniu paru chwil powinien pojawić się interaktywny wykres po prawej stronie.

Znane problemy

Zdarzało się przy uruchamianiu na Kubernetes, że pody API potrzebowały restartu. Miało to miejsce, gdy pod bazy uruchamiał się dłużej, niż zwykle. Rozwiązałem problem implementując powtarzanie zapytań do bazy. W sytuacjach wyjątkowych zachowanie mogłoby się powtórzyć - wtedy po restarcie podów wraca do normalnej pacy.

About

Repozytorium na potrzeby projektu z przedmiotu Infrastruktura Systemowa

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages