Skip to content
Germán Medina edited this page Jun 12, 2024 · 162 revisions

ITA Challenges

ITA-Challenges es una API que subministra reptes de programació(Challenges) per a estudiants, assignant puntuació a les solucions lliurades i facilitant mecanismes de seguiment per a que l’usuari pugui comprovar la seva millora tècnica i avaluar els coneixements. ITA-Challenges està patrocinat i impulsat per la IT Academy i creat per desenvolupadors Java prèviament formats a l’entitat.

La documentació complerta de la API (en desenvolupament) està disponible a : http://dev.ita-challenges.eurecatacademy.org:9080/swagger-ui/index.html


 

Estructura del projecte

A fi d’implementar suport tècnic als requeriments funcionals, es van seguir els següents passos:  

1. Descomposició funcional

L’aplicatiu ha de ser capaç de :

  • Mantenir un repositori de reptes amb informació que capaciti a l’usuari per a resoldre’ls.
  • Permetre als/les usuaris/es enregistrar solucions als reptes.
  • Validar les soluciones aportades.
  • Enregistrar usuaris i facilitar mecanismes de seguiment dels seu progrés.  

2. Definició de serveis necessaris

  • ¿Què és un servei?

Es el component de software independent i desplegable per si mateix que implementa alguna funcionalitat útil.

  • ¿Quin tipus d’operacions executa?

Dos tipus d’operacions: ordres i consultes (quèries).  

 

 

 

  • ¿Quina arquitectura utilitzar?

    • Arquitectura de Microserveis (alt nivell): es divideix el software en serveis específics i independent en les seves funcions i tasques.

    • Arquitectura Hexagonal: Implementada dins de cada microservei.

  • ¿Perquè arquitectura de microserveis? Atès  l’escenari tècnic del projecte, s’observen diversos avantatges importants:

    • Escalabilitat: Cada microservei pot escalar de forma independent pel que s’optimitzen els serveis
    • Desacoblament: S’accelera el desenvolupament, implementació i canvis de cada servei de forma independent.
    • Diversitat tecnològica: Permet que cada micorservei faci servir tecnologies i eines diferents.
    • Resiliència: Si falla un servei permet que els altres continuïn operant sense interrupció.  

3. Arquitectura interna dels microserveis

  • Hexagonal: Divideix la lògica en tres capes principals: domini, aplicació i infraestructura.

    • Capa de Domini: És la capacitat més interna, inclou la lògica de neogoci i les entitats de domini. Sense dependència cao a l'exterior.

    • Capa d'Aplicaicó: Dirigeix el flux de l'aplicació i coordina l'ús de la capa de domini i la capa d'infraestructura.

    • Capa d'Infraestructura: És la capa més externa i s'encarrega de totes les operacions d'entrada i sortida (persistència de dades, comunicaió amb els altres sistemes , interfícies d'usuari, etc..).

  • Spring Boot i Arquitectura Hexagonal:

    • Controller: Capa d’adaptadors primaris o d’entrada a l’arquitectura hexagonal. Es gestionen les sol.licituds entrants i les passa a la capa de serveis per al seu processament.

    • Service: Capa d’aplicació a l’arquitectura hexagonal. S’encarrega de la lògica de negoci i coordina les operacions entre la capa d’entrada (Controller) i la capa de sortida (Repository).

    • Repository**: Capa d’adaptadors secundaris o de sortida a l’arquitectura hexagonal. Es responsabilitza de la persistència de dades i qualsevol operació de sortida del sistema.

4. Definició dels microserveis d’ITA-Challenges

  • Challenge: Subministra la informació relativa dels reptes. El microservei es comunicarà amb Score que es qui atorgarà la puntuació.
  • User: Permet assignar reptes predilectes i solucions noves.
  • Document: Es fa servir per conectar-se a la documentació de cadascun dels microserveis restants. Implementa Circuit Breaker Pattern per a la tolerància d’errors.
  • Auth: Rep el token d’autenticació desde l’API Gateway i comunica si és vàlid o no. La resta de funcionalitats relacionades amb l’autenticitat es gestionen amb un SSO (Single Sign On).
  • Score: Conté el nucli de la lògica de negoci del projecte: compilar, executar (en un entorn segur) i assignar una puntuació a les solucions lliurades per els/les uauaris/es de l’aplicatiu.
  • API Getaway: Proporciona un únic punt d’entrada per al client, redirigint cada petició al microservei que correspongui (consulteu http://microservices.io/patterns/apigateway.html).  


DiagramaBackend drawio (1)



5. Definició de Col·laboració entre Microserveis

Per tractar aquest punt clau, es va decidir utilitzar ZeroMQ per la seva facilitat d’ús. El seu ús a la comunicació entre microserveis és fonamental degut a la seva capacitat per proporcionar patrons de missatgeria asincrònica, que permet als diferents microserveis interactuar sense necessitat d’estar constantment connectats. ZeroMQ permet diferents models de transport, incloent TCP, IPC i multicast, que facilita la configuració de la comunicació entre microserveis independentment de la seva ubicació. A més, proporciona una sèrie de característiques que son essencials en un entorn de microserveis, com la tolerància d’errors, la capacitat de dominar grans volums de tràfic i la possibilitat d’establir patrons de missatgeria complexos, com sol.licituds de resposta, publicació-subscripció i push-pull.   L’aplicació, implementa patrons de missatgeria REQ-REP, actualment s’utilitzen 3 servidors i 3 clients per dur a terme aquestes sol.licituds.