Cinimex Development Tool имеет сложную многоуровневую SaaS-архитектуру, представленную слоем интерфейсов пользователей (Frontend), слоем бизнес-логики, вычислительными и аналитическими сервисами (включая модели ML и AI), слоем хранения файлов и данных.
Frontend Платформы состоит из web-приложения пользователя, включающего многофункциональный личный кабинет с панелями управления, обеспечивающий доступ различным ролям пользователей (архитекторы, разработчики, DevOps-инженеры, менеджмент, техническая поддержка и т.д.).
Разработка Frontend ведется на функциональных компонентах с применением технологий JavaScript, включая библиотеки и фреймворки React.js, Redux, Redux Saga, HTML5, CSS, BEM. Дизайн макетов интерфейсов производится в редакторе Figma.
Backend-слой разделен на 2 подслоя: слой бизнес-логики, маршрутизации запросов и слой вычислительных, аналитических и предиктивных сервисов.
Разработка Backend слоя ведется на базе стека технологий Django, Fast API на языке Python и Java, включающего компоненты Apache Camel, Spring и Spring Boot. В основе Backend слоя заложена микросервисная архитектура, при которой весь функционал модулей и подсистем разделяется на микросервисы - узкоспециализированные программные модули, выполняющие ограниченный набор манипуляций с данными (сохранение, выборка, агрегация, вычисления, передача, запросы по API и т.д.). Взаимодействие между микросервисами происходит посредством обмена сообщениями через распределенный и масштабируемый брокер очередей Apache Kafka. При таком подходе достигается высокая скорость разработки нового функционала несколькими командами разработки, легкая интеграция новых сервисов и масштабируемость.
Слой хранения файлов и данных включает кластера файловых хранилищ на базе Amazon S3 (поверх применяется обертка Minio) и кластера СУБД с PostgreSQL для хранения пользовательских данных и ClickHouse для хранения неструктурированных данных большого объема. Для защиты и несанкционированного доступа, отделения баз данных от пользователей применяется универсальный Database API.
Организация кэширования данных при отдельных запросах и вычислениях осуществляется с помощью технологии Redis.
Основной язык разработки в микросервисах Платформы - Python. Все сервисы реализуются с поддержкой очередей управления задачами на обработку данных, исключая пропуски запросов. При недостаточной пропускной способности сервисы автоматически масштабируются (создаются дополнительные узлы для распределения нагрузки).
Реализация моделей, алгоритмов машинного обучения и искусственного интеллекта осуществляется посредством применения собственных сервисов Cinimex Forecast (библиотека прогнозирования временных рядов), Cinimex AutoML (библиотека для автоматизированного машинного обучения) и Cinimex TACO (решение для классификации текстов), работающие под управлением Kubeflow. Внутри указанные сервисы разработаны с применением библиотек TensorFlow, Keras, Pytorch, NLTK, Scikit-Learn и других.
Для развертывания всех компонентов системы на виртуальных серверах облачной инфраструктуры применяется стек технологий Kubernetes, Docker-compose, реализованных на нашей платформе Cinimex Integration Platform. Запуск приложений осуществляется с помощью Apache Airflow. Для балансировки нагрузки применяется Nginx. Сбор, хранение и визуализация метрик работы системы осуществляется посредством ElasticSearch, Kibana, Prometheus, Grafana.
Разработка Платформы ведется по современным принципам гибких методологий SCRUM (применяются инструменты JIRA, Confluence, TestRail, Open Policy Agent, Cucumber, Gherkin, SonarQube). Хранение и версионирование кода осуществляется с помощью GitLab.
Для разработки создана инфраструктура, включающая среды разработки (development), тестирования (stage) и промышленной эксплуатации (production). Разработчики не имеют доступа к production среде (доступ имеют только devops-инженеры и служба технической поддержки), что позволяет гибко организовывать процесс, включая удаленную работу.
Для развертывания всего программного обеспечения Платформы применяются виртуальные машины в облачной инфраструктуре с операционной системой Linux (RedHat).
Отдельно разрабатываются Desktop приложения-клиенты для операционных систем Windows, MacOS и Linux для трекинга времени работы сотрудников на своих АРМ, позволяющие отслеживать активность разработчиков для последующей оценки эффективности. Разработка ведется на языках программирования C++ (фреймворк Qt5) и Objective C.