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β
| Servizio | Chiama (Interno) | Chiama (Esterno) | Meccanismo | Risoluzione URL |
|---|---|---|---|---|
| Auth | - | - | - | - |
| Devices | Auth, Billing | - | Internal HTTP (httpx) | AUTH_SERVICE_URL, BILLING_SERVICE_URL |
| Billing | Auth | Stripe, Apple, Google | Internal HTTP (httpx) | AUTH_SERVICE_URL |
| Positions | Auth, Devices | - | HTTP + Redis Stream | AUTH_SERVICE_URL, DEVICES_SERVICE_URL, REDIS_URL |
| Events | Auth, Devices | - | HTTP + Redis Stream | AUTH_SERVICE_URL, DEVICES_SERVICE_URL, REDIS_URL |
| Notifications | Auth, Devices | Firebase, Email | HTTP + Redis Stream | AUTH_SERVICE_URL, DEVICES_SERVICE_URL, REDIS_URL |
| Websocket | Auth, Devices | - | Internal HTTP (httpx) | AUTH_SERVICE_URL, DEVICES_SERVICE_URL |
| Commands | Auth, Devices | 1NCE (SMS) | HTTP + Redis Stream | AUTH_SERVICE_URL, DEVICES_SERVICE_URL |
| Sharing | Auth, Devices | - | Internal HTTP (httpx) | AUTH_SERVICE_URL, DEVICES_SERVICE_URL |
| Geofences | Auth, Devices | - | Internal HTTP (httpx) | AUTH_SERVICE_URL, DEVICES_SERVICE_URL |
| Client-Logs | - | Grafana Loki | Push HTTP | LOKI_URL |
| Decoder | - | - | Redis Stream | REDIS_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.
decoderpubblicazione supositions:raw->positionspositionspubblicazione sueventseventspubblicazione sunotifications(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_URLDEVICES_SERVICE_URLBILLING_SERVICE_URLREDIS_URL
Questa astrazione permette di spostare i servizi tra diversi container o orchestratori (Docker Compose -> Nomad) senza modificare il codice.