mpfmorawski / git-to-know-me

3 stars 1 forks source link

Zaprojektować architekturę aplikacji #1

Closed mpfmorawski closed 2 years ago

mpfmorawski commented 2 years ago

TODO

pktiuk commented 2 years ago

Wstępny diagram architektury systemu

System_architecture_v2 drawio

Spis elementów

pktiuk commented 2 years ago

Jest to wstępny projekt, jeszcze nie uwzględnia decyzji projektowych, które muszą być podjęte w ramach #3 #4 oraz #2

mpfmorawski commented 2 years ago

Na ten moment nie mam uwag.

pktiuk commented 2 years ago

Projekt architektury poprawiony.
Naniosłem poprawki dotyczące serwowania frontendu.

Oraz uszczegółowiłem agregację i serwowanie danych. Mam tutaj jednak pewien dylemat.

Czy w kontekście zdobywania i agregowania danych lepiej jest:

I zbierać interesujące nas dane do bazy, z której są potem pobierane i agregowane.

obraz

II pobierać dane z githuba i gitlaba na bieżąco i od razu je agregować

obraz

Wydaje mi się, że podejście I jest lepsze, bo te zagregowane dane nie tracą zbyt szybko na świeżości i nic się nie stanie jeśli nie uwzględniają dzisiejszego dnia.
@jprokopczuk warto, żebyś ty się wypowiedział, bo dotyczy to twojej części.

mpfmorawski commented 2 years ago

Odpowiadając na Twój dylemat:

Przyznam, że ciekawiło mnie, jakie podejście wybierzesz i trochę już na ten temat myślałem.

Również uważam, że podejście numer I bardziej pasuje do naszej aplikacji. W razie ewentualnych problemów z pobieraniem danych "na żywo" mamy backup w postaci zagregowanych danych. W związku z tym zabezpieczamy się przed niezależnymi od nas błędami - wyświetlając po prostu mniej aktualne dane.

pktiuk commented 2 years ago

Możliwe jest jeszcze trzecie podejście. łączące 2 poprzednie.

obraz

Mikroserwis agregujący wysyła zapytania do serwisów fetchujących dane, te sprawdzają, czy są w bazie świee dane na ten temat i jeśli nie ma to sobie je pobiera.
To podejście byłoby chyba najlepsze, bo łączyłoby zalety obu podejść i zapewniało dużą niezależność usług. Agregator nie musi wiedzieć czy te dane są w bazie, czy w repo etc.

mpfmorawski commented 2 years ago

Bardzo mi się podoba to podejście!

jprokopczuk commented 2 years ago

tl;dr Po wczorajszej rozmowie z @pktiuk, doszliśmy do wniosku, że najlepsze będzie podejście trzecie, czyli połączenie dwóch poprzednich.

Podczas zabawy z GitHubowym API okazało się, że część informacji trzeba wyciągać "na około", czyli nie ma podanych bezpośrednio danych dotyczących któregoś z elementów. Z tego powodu, czas agregacji danych znacząco się wydłuża. Podejście pierwsze ma tą wadę, że za każdym razem nie sprawdzamy tego, czy w pewnym ustalonym czasie użytkownik wykazał się aktywnością. natomiast drugie podejście ma tą wadę, że czas agregacji danych może być bardzo długi. W trzecim podejściu, pobieramy dane do bazy danych, ale przed każdą aktualizacją sprawdzana jest aktywność użytkownika np. poprzez endpoint /events. Wtedy w razie potrzeby, aktualizujemy dane w bazie danych, ale nie pobieramy tych danych, które nadal są aktualne (np. aktualizujemy informacje nt. jednego repozytorium).

pktiuk commented 2 years ago

Ostateczny diagram architektury systemu

System_architecture_v2 drawio

Spis elementów

mpfmorawski commented 2 years ago

Spotkanie 14.04.2022 - Plan:

W tym issue wypisane będą wszystkie endpointy pod każdym serwisem (Spis elementów). Potem zamykamy issue.

pktiuk commented 2 years ago

Issue https://github.com/mpfmorawski/git-to-know-me/issues/7 można traktować jako praktyczną realizację tego, co tu zostało przedstawione