Supera i limiti con Kubernetes: il progetto di un’infrastruttura cloud

Scopri come Tidycode ha ottimizzato Kubernetes e le API SMS per massimizzare efficienza, scalabilità, sicurezza e CI/CD in un caso di successo.

Supera i limiti con Kubernetes: il progetto di un'infrastruttura cloud

Nel panorama digitale attuale, garantire la stabilità, la sicurezza e la scalabilità di un’infrastruttura IT è essenziale per offrire un servizio efficiente e affidabile.

Un recente progetto ha visto l’ottimizzazione di un ecosistema tecnologico basato su Kubernetes, Laravel, Angular e vari servizi cloud di Amazon Web Services (AWS).

Gli interventi hanno riguardato l’aggiornamento delle tecnologie, la gestione delle API SMS, il miglioramento delle performance e l’ottimizzazione della scalabilità del sistema.

Supera i limiti con Kubernetes: il progetto di un'infrastruttura cloud

Per garantire un ambiente di sviluppo coerente con la produzione, è stato predisposto un ambiente locale con Warden, includendo customizzazioni specifiche:

  • Database PostgreSQL e MongoDB per la gestione dati.
  • Personalizzazioni PHP-FPM per ottimizzare le prestazioni backend.
  • Deploy su Kubernetes per garantire scalabilità e affidabilità.

Questa configurazione ha permesso ai team di sviluppo di lavorare in un contesto identico alla produzione, riducendo le discrepanze tra le fasi di sviluppo e rilascio.

L’invio massivo di SMS generava errori 5xx dovuti alla saturazione della RAM del singolo pod Kubernetes. Due approcci sono stati adottati:

  • Soluzione applicativa: Implementazione di un endpoint API dedicato per l’invio bulk di SMS, riducendo il numero di chiamate simultanee e ottimizzando l’uso delle risorse.
  • Soluzione sistemistica: Scalabilità orizzontale con aumento dei pod Kubernetes, migliorando la gestione del carico.

Grazie a queste ottimizzazioni, il sistema ora gestisce in modo più efficiente i picchi di traffico, riducendo gli errori e migliorando la consegna dei messaggi.

Le migrazioni del database risultavano corrotte, impedendo rollback affidabili. Per risolvere il problema, è stato utilizzato un dev-kit per la ricostruzione delle migrations a ritroso, garantendo una gestione più strutturata e affidabile della storicità dei dati.

Il cluster Kubernetes utilizzava immagini Docker obsolete, con personalizzazioni che rendevano difficile la manutenzione. L’intervento ha previsto:

  • Aggiornamento delle immagini con versioni pubbliche e mantenibili.
  • Upgrade obbligatori delle tecnologie per garantire sicurezza e prestazioni:
    • PHP 8.1 per Laravel.
    • Node.js 20 per il frontend Angular.
    • Nginx 1.23 per migliorare la gestione delle richieste.
    • MongoDB 7.0, RabbitMQ 3.12, Redis 7.2 e PostgreSQL 12.17 per migliorare la stabilità del database.

L’infrastruttura su AWS utilizzava un cluster Kubernetes distribuito su EC2 con 6 nodi:

  • 3 nodi dedicati all’applicativo (API Laravel, frontend Angular, Redis, RabbitMQ, worker per code di esecuzione).
  • 3 nodi per servizi accessori (Ingress, DB Proxy, Prometheus e Grafana per il monitoraggio).

Tuttavia, il nodo Grafana non era configurato correttamente, impedendo la visualizzazione dei dati storici oltre l’ultima ora. L’intervento ha ripristinato i moduli mancanti, migliorando il monitoraggio e la reportistica.

Per garantire la stabilità dell’infrastruttura, sono stati eseguiti test di carico con Gatling. Le azioni intraprese:

  1. Creazione di un ambiente parallelo per simulare la produzione.
  2. Sviluppo di API di test per la gestione delle code SMS senza invio effettivo.
  3. Analisi del bilanciamento del carico per ottimizzare la replica dei pod Kubernetes.

Dopo i test, l’ambiente parallelo è stato convertito in ambiente di sviluppo, eliminando istanze demo su produzione e riducendo il carico sui server live.

L’assenza di un sistema di Continuous Integration/Continuous Deployment (CI/CD) rallentava il ciclo di rilascio e aumentava il rischio di errori. L’intervento ha previsto:

  • Introduzione di un sistema CI/CD automatizzato per test, build e deploy.
  • Implementazione dell’autoscaling Kubernetes con Horizontal Pod Autoscaler (HPA), permettendo al sistema di adattarsi automaticamente ai carichi di lavoro.

L’analisi dell’infrastruttura su AWS ha evidenziato diversi punti di miglioramento:

  • Database MongoDB su istanza EC2: sottoutilizzato, ottimizzato per ridurre costi e migliorare le performance.
  • Amazon S3: revisione dello storage (187 GB) per migliorare la gestione dei file.
  • Database RDS Aurora (PostgreSQL 12.12): ottimizzato per garantire performance elevate con master e replica in sola lettura.
Supera i limiti con Kubernetes: il progetto di un'infrastruttura cloud

L’intervento ha portato significativi miglioramenti in termini di:

  • Scalabilità: Kubernetes ora gestisce dinamicamente il carico grazie all’autoscaling.
  • Performance: Riduzione degli errori 5xx grazie all’ottimizzazione delle API SMS e del database.
  • Sicurezza: Upgrade delle tecnologie per eliminare dipendenze obsolete.
  • Efficienza: Implementazione di CI/CD per rilasci più rapidi e affidabili.

Queste ottimizzazioni hanno permesso di rendere il sistema più robusto, affidabile e pronto a gestire le esigenze future con maggiore efficienza.

Vuoi ottimizzare la tua infrastruttura cloud, migliorare la scalabilità del tuo eCommerce o ridurre i costi operativi? Contattaci oggi stesso e scopri come possiamo trasformare il tuo progetto digitale!