Техническая архитектура
Содержание
Аббревиатуры, сокращения и термины
API - Application Programming Interface - интерфейс программирования приложений
AMQP - Advanced Message Queuing Protocol - протокол брокера сообщений
DB - Database - база данных
Kubernetes - Платформа для оркестрации контейнеров
Docker - Платформа для контейнеризации приложений
RabbitMQ - Сервер сообщений, использующий AMQP
Microservices - Микросервисы. Это подход к разработке приложений как набора независимых, мелких, модульных сервисов, которые могут быть развернуты независимо друг от друга.
ReactJS - JavaScript-библиотека для создания пользовательских интерфейсов. Позволяет разработчикам создавать большие веб-приложения, которые используют данные, которые могут меняться без перезагрузки страницы.
Node.js - Среда выполнения JavaScript на сервере. Это платформа, созданная на движке JavaScript V8 Chrome, которая позволяет разрабатывать быстрые и масштабируемые сетевые приложения.
FAISS - Библиотека для эффективного поиска ближайших соседей и кластеризации высокомерных данных.
HTTPS - HyperText Transfer Protocol Secure - расширение HTTP, поддерживающее шифрование данных с помощью SSL/TLS.
REST - Representational State Transfer. Это архитектурный стиль взаимодействия компонентов компьютерной системы.
NGINX - Высокопроизводительный HTTP-сервер и обратный прокси-сервер.
SSL/TLS - Secure Sockets Layer / Transport Layer Security. Это криптографические протоколы для обеспечения защищенного соединения в сети Интернет.
Назначение документа
Данный документ в первую очередь ориентирован на команду технических специалистов и архитекторов Заказчика. В документе описывается техническая архитектура Системы.
Сетевая архитектура
В этом разделе будет представлена схема расположения и взаимодействия компонентов платформы НейроВижн™.
Общая архитектура системы
Платформа НейроВижн™ представляет собой микросервисную архитектуру, что обеспечивает высокую масштабируемость, устойчивость и модульность системы.
Используемые технологии
Docker и Kubernetes: для контейнеризации и оркестрации микросервисов.
Cassandra и PostgreSQL: в качестве баз данных.
RabbitMQ: для асинхронного взаимодействия между микросервисами с использованием очередей сообщений.
Микросервисы и их взаимодействие
1. Backend API (Nodejs):
Принимает изображения через HTTPS.
Координирует взаимодействие между другими микросервисами.
Сохраняет и извлекает данные из баз данных.
2. Frontend (ReactJS):
Предоставляет пользовательский интерфейс для взаимодействия с системой.
Отображает результаты анализа изображений.
3. DB Cassandra и DB PostgreSQL:
Хранят информацию, необходимую для работы платформы.
4. AMQP RabbitMQ:
Обеспечивает асинхронное взаимодействие между микросервисами.
5. Микросервисы с нейронными сетями:
PPS (детектор лиц): находит лица на изображениях.
Embedding: создает векторы лиц.
FAISS: осуществляет поиск в индексах векторов и сравнивает лица.
Mask, Gender, Mood, Race, Glasses, Age: анализируют лица на различные атрибуты, такие как наличие маски, пол, настроение, раса, наличие очков и возраст.
Взаимодействие микросервисов
Изображение загружается через Backend API.
Backend API отправляет изображение в PPS для обнаружения лиц.
Обнаруженные лица анализируются с помощью других микросервисов (Embedding, FAISS, Mask и др.).
Результаты анализа отправляются обратно в Backend API, который агрегирует их и предоставляет для отображения через Frontend.
Отказоустойчивость
1. Репликация и Кластеризация Баз Данных:
Базы данных Cassandra и PostgreSQL настроены на работу в режиме кластера. Это обеспечивает высокую доступность и отказоустойчивость, так как данные реплицируются на нескольких узлах.
2. Кластер Kubernetes:
Все микросервисы запущены в кластере Kubernetes, который обеспечивает автоматическое восстановление от сбоев (автоматический перезапуск контейнеров при их падении).
3. Балансировка нагрузки:
Входящий трафик распределяется с помощью балансировщика нагрузки (NGINX), что позволяет равномерно распределять нагрузку между инстанциями микросервисов и обеспечивает отказоустойчивость при выходе из строя отдельных инстанций.
Масштабирование
1. Горизонтальное масштабирование:
Все микросервисы, включая базы данных, могут быть горизонтально масштабированы путем добавления новых инстанций (контейнеров) в кластер. Kubernetes может автоматически масштабировать количество инстанций микросервисов в зависимости от нагрузки.
2. Автоматическое Масштабирование в Kubernetes:
Kubernetes поддерживает автоматическое масштабирование на основе CPU и памяти, что позволяет динамически адаптировать систему под изменяющуюся нагрузку.
3. Распределенное Хранение Данных:
Использование Cassandra и PostgreSQL в режиме кластера позволяет масштабировать хранение данных, добавляя новые узлы в кластер.
Last updated