Vai al contenuto
Prodotto SaaS Enterprise

Piattaforma ERP Multi-Tenant

Un ERP a microservizi progettato fin dal primo giorno per l'isolamento dei tenant, il deploy indipendente e una scalabilità ingegneristica onesta.

Anno 2025
Durata 14 mesi
Team 4 ingegneri
Stato Live · primi clienti

Uno sguardo al prodotto.

Volevamo costruire un ERP moderno che non costringesse le piccole e medie imprese nella classica trappola «monolite o niente». Sistemi pronti all'uso come SAP o Odoo portavano con sé costi di licenza enterprise o richiedevano mesi di personalizzazione per adattarsi ai flussi di lavoro reali.

La nostra tesi era semplice: scomporre il problema in servizi piccoli e distribuibili in modo indipendente fin dal primo giorno — anche quando ogni istinto di un piccolo team dice di rilasciare un monolite modulare ed estrarre dopo. Quattordici mesi dopo, questo impegno ha plasmato ogni decisione tecnica e operativa da allora.

Sfida

Aziende di retail, servizi e distribuzione hanno tutte bisogno di CRM, modulo contabile e gestione magazzino — ma regole, campi e flussi divergono nettamente. Un monolite tradizionale gestisce questa divergenza accumulando flag di configurazione finché il codice diventa un museo di casi speciali.

I nostri vincoli erano più stringenti: isolamento completo dei dati per tenant (nessuno schema condiviso), cadenza di deploy indipendente per modulo (il CRM rilascia senza bloccare il Magazzino), consistenza sotto il secondo tra servizi e una UI coerente nonostante un backend frammentato — il tutto su un'infrastruttura che una PMI possa permettersi.

Approccio

Abbiamo scelto il polyrepo al posto del monorepo per l'indipendenza di deploy. 41 repository in totale: 16 servizi backend, 10 microfrontend Vue 3, una libreria UI condivisa, un SDK di autenticazione JWT e moduli di infrastruttura. Ogni servizio backend è un'app Laravel focalizzata con il proprio schema PostgreSQL.

I servizi comunicano esclusivamente tramite NATS JetStream — nessuna chiamata HTTP diretta tra servizi. Le richieste sincrone dal browser attraversano un API Gateway Kong che instrada al servizio giusto e gestisce la validazione JWT. La UI viene assemblata a runtime con Rsbuild Module Federation, quindi CRM e Magazzino possono rilasciare nuove funzionalità in modo indipendente senza ricostruire la shell.

L'isolamento dei tenant è imposto a livello di database tramite Row-Level Security di PostgreSQL, provvisto per tenant da CloudNativePG. Un tenant ID viaggia nell'header di ogni messaggio NATS. Se un servizio dimentica di filtrare una query, la RLS lo intercetta — non la vigilanza umana.

Ci siamo impegnati sui microservizi fin dal primo giorno — anche quando ogni istinto di un piccolo team dice di rilasciare un monolite ed estrarre dopo.

Capacità chiave rilasciate.

  • 16 servizi Laravel focalizzati che coprono CRM, Contabilità, Magazzino, HR, Workflow, Ticketing, Reportistica e altro
  • Schemi PostgreSQL isolati per tenant, con row-level security applicato
  • Event bus NATS JetStream con consegna garantita tra servizi
  • 10 microfrontend Vue 3 federati a runtime — rilasciati in modo indipendente
  • Deployment Kubernetes basati su Helm su cluster RKE2
  • SDK JWT condiviso, utilizzato da ogni servizio e microfrontend
  • Stack di osservabilità completo: metriche Prometheus, log Loki, trace Tempo
  • Provisioning automatico dei tenant, database dedicato per cliente

Risultati concreti, misurati in produzione.

Deploy Time
2–3 min
Git push alla produzione, per servizio
p95 Latency
< 180ms
Sotto test di carico realistici
Tenant Leaks
Zero
6 mesi di pen-testing, nessun accesso tra tenant
Scale
41 repo
Confini chiari, responsabilità chiara per servizio

La piattaforma supporta tenant illimitati senza contaminazione incrociata. Ogni servizio viene distribuito in modo indipendente tramite chart Helm su Kubernetes RKE2, con osservabilità completa tramite Prometheus, Grafana, Loki e Tempo. Tempo medio di deploy: meno di 3 minuti per servizio.

Tecnologie utilizzate, raggruppate per ruolo.

Backend
Laravel 12 PostgreSQL NATS JetStream Valkey CloudNativePG
Frontend
Vue 3 TypeScript Rsbuild Module Federation
Infrastruttura e osservabilità
Kubernetes (RKE2) Helm Prometheus Grafana Loki Tempo