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 senza un singolo componente il cui fallimento abbatte il resto. Gli aggiornamenti spediscono più volte al giorno come distribuzioni di rotolamento, quindi il rilascio non costa la disponibilità. Migliaia di metriche sono rintracciate dal vivo, e l'ingegnere on-call sente circa un'anomalia in pochi secondi. Ecco cosa si trova dietro la cifra del 99,9%.
