L'uptime non è una metrica di marketing per noi. È un vincolo di ingegneria che plasma ogni decisione che prendiamo. Quando tutta la vostra attività opera su una singola piattaforma, i tempi di fermo non sono un disagio. E' una fermata completa. Questa responsabilità è qualcosa che prendiamo sul serio, e si riflette in ogni strato dell'architettura KamoCRM, dal database al bilanciatore di carico.
Alla fondazione, eseguiamo YugabyteDB come nostro archivio dati primario. YugabyteDB è un database SQL distribuito che replica i dati su più nodi con failover automatico. Se un nodo va giù, il cluster continua a funzionare senza perdita di dati o intervento manuale. Oltre a questo, il nostro strato di applicazione è costituito da oltre 64 microservizi senza stato in esecuzione su Kubernetes tramite RKE2. Poiché ogni servizio è senza stato, qualsiasi istanza può essere sostituita o scalata senza influenzare gli altri.
La comunicazione in tempo reale aggiunge un altro livello di complessità. Videoconferenze, messaggistica e telefonate richiedono connessioni persistenti e bassa latenza. Lo gestiamo con Janus WebRTC per i media e NATS JetStream per il brokeraggio dei messaggi, entrambi distribuiti in configurazioni altamente disponibili in tutto il nostro cluster. Anche il nostro strato di archiviazione di file, alimentato da MinIO, è configurato con codifica di cancellazione per la durata dei dati.
Il risultato è un sistema in cui nessun singolo componente è un punto di fallimento. Utilizziamo gli aggiornamenti più volte al giorno utilizzando le implementazioni di rotolamento che garantiscono zero tempi di fermo. Il nostro stack di monitoraggio traccia migliaia di metriche in tempo reale, e il nostro team di ingegneria on-call viene avvisato in pochi secondi di qualsiasi anomalia. Questo è l'ingegneria dietro il numero di uptime del 99,9%, e stiamo continuamente spingendo per renderlo ancora meglio.