Skip to main content

Comunicazione Inter-Service

In un'architettura a microservizi come quella di Visla, i vari componenti devono interagire in modo efficiente e sicuro. Questa pagina documenta come avviene lo scambio di dati tra i servizi.

Tabella di Comunicazione​

ServizioChiama (Interno)Chiama (Esterno)MeccanismoRisoluzione URL
Auth----
DevicesAuth, Billing-Internal HTTP (httpx)AUTH_SERVICE_URL, BILLING_SERVICE_URL
BillingAuthStripe, Apple, GoogleInternal HTTP (httpx)AUTH_SERVICE_URL
PositionsAuth, Devices-HTTP + Redis StreamAUTH_SERVICE_URL, DEVICES_SERVICE_URL, REDIS_URL
EventsAuth, Devices-HTTP + Redis StreamAUTH_SERVICE_URL, DEVICES_SERVICE_URL, REDIS_URL
NotificationsAuth, DevicesFirebase, EmailHTTP + Redis StreamAUTH_SERVICE_URL, DEVICES_SERVICE_URL, REDIS_URL
WebsocketAuth, Devices-Internal HTTP (httpx)AUTH_SERVICE_URL, DEVICES_SERVICE_URL
CommandsAuth, Devices1NCE (SMS)HTTP + Redis StreamAUTH_SERVICE_URL, DEVICES_SERVICE_URL
SharingAuth, Devices-Internal HTTP (httpx)AUTH_SERVICE_URL, DEVICES_SERVICE_URL
GeofencesAuth, Devices-Internal HTTP (httpx)AUTH_SERVICE_URL, DEVICES_SERVICE_URL
Client-Logs-Grafana LokiPush HTTPLOKI_URL
Decoder--Redis StreamREDIS_URL

Meccanismi di Trasporto​

1. HTTP Interno (Sincrono)​

Utilizzato per operazioni di richiesta-risposta che richiedono dati immediati (es. verifica di un token o recupero dei dettagli dell'utente).

  • Libreria: La maggior parte dei servizi Python usa httpx.
  • Autenticazione: Le chiamate interne sono protette dall'header X-Internal-Key.
  • Naming: Gli URL puntano ai nomi dei servizi Docker/Nomad (es. http://auth:8081).

2. Redis Streams (Asincrono)​

Utilizzato per flussi di dati ad alta frequenza ed elaborazione asincrona.

  • decoder pubblicazione su positions:raw -> positions
  • positions pubblicazione su events
  • events pubblicazione su notifications (per l'invio di notifiche push/email)

Architettura dei Flussi​

Risoluzione degli Endpoint​

Gli endpoint non sono hard-coded nel codice sorgente. Vengono risolti tramite variabili d'ambiente iniettate durante il runtime:

  • AUTH_SERVICE_URL
  • DEVICES_SERVICE_URL
  • BILLING_SERVICE_URL
  • REDIS_URL

Questa astrazione permette di spostare i servizi tra diversi container o orchestratori (Docker Compose -> Nomad) senza modificare il codice.