Ajutor cu intelegere arhitectura


Salutare
Ca sa dau putin de context un profesor de la noi de la facultate ne-a zis ca daca facem doar teorie nu o sa ne ajute la fel de mult ca si cum am face un proiect asa ca ne-a dat o arhitectura si avem ca deadline luna aprilie numai ca nu este arhitectura basic monolit cu care eu am fost obisnuit pana acuma este una microservici si sunt anumite aspecte pe care nu le inteleg.
Ca si overview o sa facem un marketplace de unde pe baza de jetoane (in loc de bani ) o sa poti sa iei date pe care fie ca le afisezi sau faci ml pe ele . Pentru cazul de fata voi presupune ca folosim Java Spring Boot ( desi la punctul acesta poate tehnologia nu e atat de relevanta poate) si eu vreau sa lucrez pe partea de back-end.
Ce nu inteleg legat de aceasta schema este ca:

  1. Fiecare bucatica din aplicatie ( de exemplu connector , broker) va fii un program Java separat?
  2. Aceste bucatele din aplicatie , daca sunt separate va trebui sa le rulam in cloud sau fac ceva magie in Docker si cu o comanda mi le porneste pe toate?
  3. Toate aceste bucatele sunt practic programe scris in Spring Boot separat si in loc sa comunice intre ele prin a face api call-uri o sa comunice cu ajutorul Kafka? Sau pot sa am un Broker scris in NodeJs si altul scris in Django si sa comunice intre ele?
  4. De ce fel de unit tests are nevoie aplicatia?
  5. La partea de comunicare cu baza de date o sa am un modul care doar sa deserveasca cererile catre baza de date? Ce mi se pare confuz este ca deja eu am
    Jpa in java si daca ar fii sa creez un program doar sa returneze in json niste lucruri mi se pare prea mult.
  6. La ce se refera toata aceasta chestie cu Connector care comunica cu Broker?
  7. Ce rol isi are Docker in toata povestea aceasta?
  8. Ce alte aspecte ar mai trebui sa am in vedere legat de aceasta aplicatie si ce alte intrebari ar mai trebui adresate?
  9. Eu am fost asignat sa conduc grupul meu ( de 3 persoane eu inclusiv) care ne vom ocupa de o particica , inca nu stiu care, dar cum as putea sa desemnez sarcinile in mod eficient in cadrul grupului?
  10. Daca la firma la care lucrati ati primi un astfel de proiect va exista o persoana care va face brainstorming la greu ca sa dea sarcini dar cum se numeste acest rol? Si ce alt personal este implicat pe langa developeri in dezvoltarea unui astfel de proiect?

Sper ca nu v-au plictisit intrebarile mele si sper ca o sa ducem pana la capat cu colegii proiectul desi ne simtim coplesiti atat de numeroasele tehnologii cerute de catre domnul profesor ( Kafka, Grafana, Docker…) cat si de arhitectura ce difera cu mult de monolitul cu care am fost obisnuiti!

O seara frumoasa va doresc!

Felicitari domnului profesor pentru tema!

3 Likes

Mie mi se pare prea complexa tema ca sa o faci bine.

Eu inteleg ca se vrea o arhitectura pe baza de events/data stream. Ai servicii care îți emit event-uri pe canale si ai servicii care le preiau și fac ceva cu ele.

E lucrare de licenta sau mai rau. Grija mare, nu te baza pe tema pentru a trece, e un profesor nerealist.

Sugestia mea e sa reveniți si sa cereți ceva mai simplu.

La ce cere e ridicol de greu de testat si setat totul sa meargă consistent. Singurul mod in care e viabil e dacă vă da 80% din proiect deja configurat.

Punctul tau de pornire e Kafka si data streams. Docker e doar un mod de a rula tot ce îți trebuie în același timp în mașini virtuale cu configurația corecta indiferent pe ce rulează.

Stilul de programare recomandat ar fi programarea funcțională, reactiva. Dacă n-ai învățat asta la facultate e o problemă.

Tu ca coordonator incepe prin a clarifica cat mai mult cerintele la cele mai mici detalii, e.g. marimi maxime, numar consumatori in paralel, erori, criteriile de acceptare să fie 100% clare.

Java și Spring boot nu sunt tocmai ok fiindcă totul va fi asincron și mare grijă să nu faci totul sincron. De fapt singura diferență e să folosești numai colecții cu Future in nume…

1 Like

consideri nodejs o varianta mai buna?
Sau ce alta tehnologie ai recomanda?

Cercetează puțin, ai foarte multe opțiuni.

Inclusiv Spring e bun dar ai mai multă configurare abstracta. Probabil găsești multe exemple cu Kafka si Async. Dacă as fi pragmatic as zice ca poți face 80% din ce iti trebuie cu kafka, configurare si sql.

Probabil găsești tot proiectul deja făcut intr-o formă sau alta. Tot proiectul e mai multă configurare decât scris cod.