Tempo de trabalho não é uma métrica de marketing para nós. É uma restrição de engenharia que molda cada decisão que tomamos. Quando todo o seu negócio opera em uma única plataforma, o tempo de inatividade não é um inconveniente. É uma paragem total. Essa responsabilidade é algo que levamos a sério, e é refletida em cada camada da arquitetura KamoCRM, desde o banco de dados até o balanceador de carga.
Na fundação, executamos o YugabyteDB como nossa principal loja de dados. YugabyteDB é um banco de dados SQL distribuído que replica dados em vários nós com failover automático. Se um nó cair, o cluster continua operando sem perda de dados ou intervenção manual. Além disso, nossa camada de aplicação consiste em mais de 64 microservices sem estado rodando em Kubernetes via RKE2. Como cada serviço é apátrida, qualquer instância pode ser substituída ou escalonada sem afetar os outros.
A comunicação em tempo real adiciona outra camada de complexidade. As videoconferências, mensagens e telefonemas requerem conexões persistentes e baixa latência. Lidamos com isso com Janus WebRTC para mídia e NATS JetStream para corretagem de mensagens, ambas implantadas em configurações altamente disponíveis em nosso cluster. Mesmo nossa camada de armazenamento de arquivos, alimentada pela MinIO, é configurada com codificação de apagamento para durabilidade de dados.
O resultado é um sistema sem componente único cuja falha derruba o resto. Atualiza o envio várias vezes por dia como implantações em andamento, então liberar não custa disponibilidade. Milhares de métricas são monitoradas ao vivo, e o engenheiro de plantão ouve sobre uma anomalia em segundos. É isso que está por trás do número 99,9%.
