Architettura MagoCloud

Poiché Mago Cloud è un software basato su architettura distribuita su microservizi, abbiamo disegnato e nominato i componenti ispirandoci a una sorta di topografia logica.

Abbiamo organizzato lo spazio topografico in due differenti entità: Domini (puri metadati) e Istanza (installazione concreta di servizi software).

Il Dominio è un metadato che ha lo scopo di raggruppare diverse Istanze del prodotto. Questo raggruppamento può avvenire in base a caratteristiche commerciali o tecniche delle varie Istanze che ne fanno parte. Ad esempio, potremmo avere un Dominio a cui appartengono tutte le istanze simili per configurazione, come tutte le istanze enterprise, o tutte le istanze destinate a small business.

L’istanza è un insieme di microservizi che costituiscono il prodotto MagoCloud. L’istanza è percepita dall’utente come un singolo prodotto, ma al suo interno è composta da una famiglia di servizi isolati e comunicanti fra loro.

Concetto chiave su cui vogliamo soffermarci è l’istanza, che rappresenta un’installazione di MagoCloud delocalizzata su una piattaforma cloud, questa può essere gestita da Zucchetti oppure inserita in un cloud privato.

L’istanza è composta da più microservizi, una suite di servizi ciascuno in esecuzione nel proprio processo e in comunicazione con gli altri microservizi. Questi possono essere deployati in modo indipendente e in modalità automatizzata, non necessitano di un linguaggio di programmazione specifico e permettono una serie di differenti tecnologie di Storage.

I microservizi sono contenuti in Container, appositi spazi che ricordano in approssimazione una macchina virtuale, ma che limitano il livello di astrazione al solo sistema operativo e sono gestiti da Container engine come Docker.

L’istanza di MagoCloud si compone di un frontend e di un backend composto da più microservizi, il cui deploy è effettuato con tecnologia Docker.

Frontend

SPA (Single Page Application) Angular, comunica con il backend tramite API REST e websocket.

Backend

È composto dai seguenti microservizi:

  • Traefik: Api gateway e load balancer di istanza. Un proxy di questo tipo viene attivato come componente di sicurezza aggiuntivo a protezione dei web server, per accettare al loro posto le richieste provenienti da Internet e inoltrarle al backend. Consente di controllare il traffico dati in entrata, di mettere a disposizione diversi server con lo stesso URL, di distribuire equamente le richieste su più server e di accelerare l’apertura dei dati tramite il processo di caching.
  • TbGate: Load balancer, monitor e gestore del ciclo di vita di istanze TbServer. Istanzia un TbServer per ogni utente di MagoCloud (anche headless), gestendo l’handshake per la creazione di un canale websocket tra client e TbServer. È inoltre aggregatore delle metriche e dei log dei TbServer, esponendoli rispettivamente a Prometheus e LOKI.
  • TbServer: Backend gestionale, cuore di MagoCloud.
  • AccountManager: È il servizio di autenticazione e autorizzazione di istanza. Si interfaccia con il servizio provisioning Cloud Consolein fase di login, per poi condividere le informazioni con gli altri microservizi di istanza tramite Redis.
  • MenuService: Fornisce dinamicamente la struttura dei menu al frontend.
  • ReportService: Si occupa della reportistica.
  • DataService: Fornisce API di accesso ai dati gestionali.
  • ErpWebApi: Fornisce API gestionali.
  • Scheduler: Gestisce la schedulazione ed esecuzione di job.
  • MicroDms: Sistema di gestione dei documenti.
  • LogService:Aggrega i log del frontend per redirezionarli a LOKI.
  • My Mago Studio: Consente di apportare modifiche all’interfaccia e ai documenti di MagoCloud.
  • ESP: Integrazione dati tra sistemi.
  • MicroMessaging: Gateway per messaggistica (e.g. mail). Riceve messaggi via RabbitMQ e si interfaccia direttamente con un server SMTP.

Interazione tra servizi

I servizi comunicano tra di loro utilizzando una mappa di nomi logici/url.

L’interazione avviene attraverso API REST e RabbitMQ un Message Broker middleware che ha lo scopo di mediare/gestire la comunicazione asincrona tra i microservizi. Questo sistema asincrono dà la possibilità ai microservizi di continuare a operare anche se non c’è un’immediata risposta. ​​​​​​

Scalabilità e Alta affidabilità

I servizi sono scalabili orizzontalmente (anche su più macchine) sfruttando docker swarm.

In caso di problemi rilevati tramite monitoring, il frontend viene redirezionato verso un’istanza clone.

User Gateway

User Gateway è il punto di accesso unico a MagoCloud. È una web application che ti permette di autenticarti tramite credenziali, scegliere una subscription e accedere al prodotto.

User Gateway è un endpoint globale. È un unico URL disponibile su Internet ed è valido per tutti gli utenti, di qualsiasi area geografica. Grazie a User Gateway hai a disposizione un URL univoco per accedere alla tua subscription e istanza di MagoCloud.

Consideriamo questo componente dal punto di vista della user experience. User Gateway è il primo frontend che incontri quando esegui l’accesso a MagoCloud. La prima operazione che devi effettuare è l’inserimento delle credenziali (nome utente e password). Se l’autenticazione va a buon fine, puoi accedere alla tua subscription (oppure selezionare tra le disponibili quella di interesse) e cominciare a lavorare con MagoCloud.

Ora vediamo il processo sotto una prospettiva tecnica per capire cosa succede dietro le quinte, e quali microservizi sono coinvolti in questo processo.

Siamo a tua disposizione! Parlaci del tuo problema, noi ti offriamo la soluzione.