Время безотказной работы не является для нас маркетинговым показателем. Это инженерное ограничение, которое формирует каждое решение, которое мы принимаем. Когда весь ваш бизнес работает на одной платформе, простои не являются неудобством. Это полная остановка. К этой ответственности мы относимся серьезно, и она отражается в каждом уровне архитектуры KamoCRM, от базы данных до балансировщика нагрузки.
В качестве основного хранилища данных мы используем YugabyteDB. YugabyteDB - это распределенная база данных SQL, которая копирует данные в нескольких узлах с автоматическим отказом. Если узел падает, кластер продолжает работать без потери данных или ручного вмешательства. Кроме того, наш уровень приложений состоит из более чем 64 безгосударственных микросервисов, работающих на Kubernetes через RKE2. Поскольку каждая услуга не имеет статуса, любой экземпляр можно заменить или масштабировать, не затрагивая другие.
Общение в реальном времени добавляет еще один уровень сложности. Видеоконференции, обмен сообщениями и телефонные звонки требуют постоянных подключений и низкой задержки. Мы работаем с Janus WebRTC для медиа и NATS JetStream для брокерской работы с сообщениями, которые развернуты в высокодоступных конфигурациях в нашем кластере. Даже наш уровень хранения файлов, работающий на MinIO, настроен с кодированием стирания для долговечности данных.
Результатом является система, в которой ни один компонент не является точкой отказа. Мы развертываем обновления несколько раз в день, используя развертывание, которое обеспечивает нулевое время простоя. Наш стек мониторинга отслеживает тысячи показателей в режиме реального времени, и наша команда инженеров по вызову предупреждается в течение нескольких секунд после любой аномалии. Это технология, стоящая за 99,9% безотказной работы, и мы постоянно стремимся сделать ее еще лучше.