Обсуждение архитектуры: ROS2-Django-Webinterface [закрыто]
В настоящее время я разрабатываю интерфейс управления cobot /robot arm и инструмент планирования рабочего процесса. В настоящее время я обдумываю все варианты своей архитектуры, поскольку чувствую, что архитектура плохо масштабируется и может выйти из строя при больших нагрузках. Поэтому я должен спросить сообщество...
Общий обзор архитектуры
Вся архитектура - это то, что я бы назвал основанным на микросервисах (поправьте меня, если я ошибаюсь). У меня есть несколько автономных компонентов (в данном случае автономный означает контейнерный, а также со своей собственной функциональностью. Например, контроллер камеры, контроллер робота, контроллер захвата и т.д.). Все эти компоненты используют ROS2 для обмена данными и реализованы на соответствующих языках, в основном на C++ и Python. Далее, есть основное приложение, которое является серверной частью для подключения всей информации и управления компонентами. Это своего рода мозг. У этого мозга также есть пользовательский интерфейс. Для стека ядра/пользовательского интерфейса я выбрал Python Django + ReactJS. Я выбрал этот стек, потому что: Я свободно владею Python и React, быстрое создание прототипа для первого прототипа, прямая интеграция ROS2 в Python, Django имеет хороший ORM и поддерживает асинхронные операции, так что я могу подключить ROS2 (как мост для пользовательского интерфейса) и хранить данные через ORM в База ДАННЫХ PostgreSQL. Я использую Django Channels ASGI для взаимодействия с Websocket и управляю обоими способами. Например:
- Приходит сообщение журнала подписанных на ROS2 тем от компонента (подписчик запускается в отдельном контейнере, чтобы не блокировать основной поток своим исполнителем, основанным на ожидании. Публикация, действия и сервисы в настоящее время выполняются путем однократного вращения узла или до завершения)
- Я сохраняю лог-сообщение в базе данных
- Запускается сигнал Django
- Приемник Django обрабатывает сигнал и отправляет отправленное сообщение Websocket Кстати, я использую Redis в качестве посредника сообщений.
Проблема
Чем больше становится приложение, тем сложнее поддерживать текущую архитектуру, и я не уверен, что этой архитектуры будет достаточно при более высоких нагрузках. Я планирую реализовать узел ROS2, который подписывается на поток с камеры. Вы можете себе представить, сколько это данных. Это определенно не может быть отправлено через Redis, и я не могу просто создавать новый контейнер каждый раз, когда мне нужен подписчик... И даже тогда у меня все еще есть проблема, связанная с тем, что мне нужно отправить данные через мой контейнер в мой серверный интерфейс ...
Я никогда не разрабатывал такую сложную архитектуру (и мне не приходилось ее реализовывать), и я не знаю, как действовать дальше. Кроме того, я впервые использую ROS2, поэтому я не совсем знаком с расширенными разделами ROS, такими как асинхронные функции...
Есть ли у кого-нибудь знания в этой области или какие-нибудь советы? Спасибо!