Projekt to proof of concept sklepu opartego o rozproszoną architekturę i komunikację poprzez Kafkę. Bardziej precyzyjny opis znajduje się na blogu.
W sklepie mogą się pojawić przykładowe zdarzenia:
- operator sklepu dodaje produkt do listy dostępnych w sklepie produktów
- klient rejestruje się w sklepie i od teraz może robić zakupy
- klient kupuje produkt i tym samym dodaje go listy posiadanych rzeczy
- Klonujemy repozytorium przez komendę
git clone https://github.com/prokulski/ClientFlow.git - Wchodzimy do głównego folderu repozytorium (komenda
cd client_flow) - Tworzymy środowisko wirtualne (Python 3.9+) np. przez
virtualenv venv - Aktywujemy środowisko wirtualne przez
source venv/bin/activate - Instalujemy potrzebne pakiety przez
pip install -r requirements.txt - Uruchamiamy potrzebne komponenty (Apache Kafka + MongoDB) przez
docker-compose up - Uruchamiamy w oddzielnym oknie konsoli konsumenta komunikatów przychodzących Kafką i przepisujących je do bazy danych przez
python tools/kafka_read.py - Otwieramy kolejne okno konsoli, w którym będzie można uruchamiać poniżej wymienione komendy.
- Konfiguracja jest w pliku
config.yaml- zmiana brokera Kafki, dostępu do bazy danych i tak dalej odbywa się tam. Warto jednak przejrzeć przed zmianamiutils/config.pyi zobaczyć co oznaczają poszczególne pola w YAMLu.
flowchart LR
PrepareClient[przygotowanie klienta] --> SaveClient[/zapisanie klienta/];
SaveClient --> BazaKlient[(Baza danych klientów)];
Na początek potrzebujemy przykładowych klientów. Tworzymy ich przez python tools/make_customers_db.py (bezpośrednio w bazie danych) lub przez python tools/make_customers_kafka.py (za pośrednictwem Kafki).
Listę klientów możemy podejrzeć przez python tools/list_customers.py - skrypt ten nie korzysta z Kafki, czyta bezpośrednio z bazy.
flowchart LR
LoadClient[przygotowanie produktu] --> SaveProduct[/dodanie produktu do listy produktów w sklepie/];
SaveProduct --> BazaProd[(Baza danych produktów)];
Podobnie tworzymy przykładowe produkty dostępne w sklepie python tools/make_products_db.py (od razu w bazie) lub python tools/make_products_kafka.py jeśli chcemy to puścić przez Apache Kafka.
Listę dostępnych produktów zobaczymy dzięki python tools/list_products.py. Skrypt - podobnie jak ten dla klientów - czyta bezpośrednio z bazy danych.
flowchart LR
BazaKlient[(Baza danych klientów)] --> LoadClient[/pobranie klienta/];
LoadClient --> UpdateClient[/dodanie produktu do listy produktów klienta/];
UpdateClient --> SaveClient[/zapisanie klienta/];
SaveClient --> BazaKlient;
Klienci mogą kupić produkty (losowi klienci kupują losowe produkty) - co wydarzy się kiedy uruchomimy python tools/customers_buys_products_db.py lub drogą Kafkową python tools/customers_buys_products_kafka.py.
Zmiany w posiadaniu produktów zobaczymy przez ponowne uruchomienie python tools/list_customers.py
flowchart
Sklep[Operator sklepu] --> NowyProdukt[/dodanie produktu/];
Klient[Klient sklepu] --> NowyKlient[/rejestracja klienta/];
Klient --> ZakupProduktu[/zakup produktu/];
NowyProdukt --> PreprocesingIn{Zdefiniowanie akcji}
NowyKlient --> PreprocesingIn;
ZakupProduktu --> PreprocesingIn;
PreprocesingIn --> Kafka{{pas transmisyjny - Apache Kafka}};
Kafka --> PreprocesingOut{Rozpoznanie akcji};
PreprocesingOut --> DodanieKlienta[/nowy klient/];
PreprocesingOut --> DodanieProduktu[/nowy produkt w sklepie/];
PreprocesingOut --> UpdateProduktu[/zakup produktu/];
DodanieKlienta --> BazaKlient[(Baza danych klientów)];
UpdateProduktu --> BazaKlient
DodanieProduktu --> BazaProd[(Baza danych produktów)];