Thời gian đã hết cho chúng ta. Đó là một sự ràng buộc kỹ thuật định hình mọi quyết định của chúng ta. Khi toàn bộ công việc làm ăn của bạn hoạt động trên một nền tảng, thời gian xuống dốc không phải là một sự bất tiện. Hết chỗ rồi. Trách nhiệm đó là một cái gì đó chúng tôi nghiêm túc, và nó được phản ánh trong mỗi lớp của kiến trúc KamoCRM, từ cơ sở dữ liệu đến bộ cân bằng tải trọng.
Tại quỹ, chúng tôi điều hành YugabyteDB như là kho dữ liệu chính. YugabyteDB là một cơ sở dữ liệu được phân phối để sao chép dữ liệu qua nhiều nút có lỗi tự động. Nếu nút giảm, cụm tiếp tục hoạt động mà không mất dữ liệu hoặc can thiệp bằng tay. Trên hết, lớp ứng dụng của chúng tôi bao gồm hơn 64 dịch vụ vi phân không có tiểu bang đang chạy trên Kubernetes thông qua RKE2. Bởi vì mỗi dịch vụ là không có quốc gia, bất cứ trường hợp nào có thể được thay thế hoặc quy mô mà không ảnh hưởng đến người khác.
Giao tiếp thời gian thực thêm một lớp phức tạp khác. Tất cả các cuộc gọi điện thoại và video đều đòi hỏi sự kết nối bền bỉ và độ nhiễu thấp. Chúng tôi xử lý vấn đề này với Janus WebTTC cho truyền thông và NATS JetStream để giao dịch thông điệp, cả hai đều được triển khai trong các cấu hình có sẵn ở khắp nơi. Thậm chí cả lớp lưu trữ tập tin của chúng tôi, được cấp năng lượng bởi MinAO, được cấu hình với mã hóa bảo mật dữ liệu bền vững.
Kết quả là một hệ thống mà không có thành phần nào là điểm thất bại. Chúng tôi triển khai cập nhật nhiều lần mỗi ngày bằng cách sử dụng các cuộc triển khai lăn đảm bảo thời gian dừng. Theo dõi của chúng tôi xếp chồng theo dõi hàng ngàn mét trong thời gian thực, và đội ngũ kỹ thuật trực tuyến của chúng tôi được cảnh báo trong vòng vài giây bất thường. Đây là kỹ thuật đằng sau 99.9% số giờ tăng lên, và chúng tôi liên tục thúc đẩy để làm cho nó thậm chí tốt hơn.