Связь между веб-приложением Django и внешним сервером, на котором выполняются скрипты python
В настоящее время я работаю над веб-страницей с использованием Django. Цель этого сайта - отображение результатов различных симуляций. Я не могу использовать код некоторых симуляций непосредственно в моем бэкенде Django. Но владельцы кода позволяют мне сделать симуляцию "черного ящика", используя их собственные серверы. Идея заключается в том, чтобы сначала отправить на сервер некий запрос с данными. Данные были введены пользователем ранее и сохранены в базе данных django. Затем сервер получает данные и выполняет симуляцию (скрипт python), используя эти данные. После завершения симуляции данные отправляются обратно на мой django backend, таким образом, мой django backend получает некий ответ. Я много исследовал по этой теме, но не смог найти ничего, что я мог бы использовать. Я видел такие вещи, как python sockets, socket.io, websockets, django rest framework и django channels, но я не очень понял, как я могу применить одну из этих библиотек в моем случае. Как мне достичь того, что было описано ранее? Как я могу подключить мой django проект к удаленному серверу (в другом городе)? С чего мне начать?
Я пытался реализовать сервер и клиент, используя сокеты python, но это не имело связи с django. Я изучил каналы Django, но не понял, как можно подключиться к удаленному серверу вместо множества клиентов.
Есть много способов достичь того, что вам нужно, и вот как я бы это сделал. Во-первых, сервер симуляции должен публиковать результаты симуляции в общепринятом формате, предпочтительно JSON, в шину событий. Далее, ваше приложение django будет слушать события из шины и создавать записи в базе данных, если они должны быть постоянными, в противном случае просто храните их в кэше, используя redis. Оттуда, через websockets, симуляции передаются на фронтенд-клиент и отображаются. Я прилагаю небольшую диаграмму того, как будет выглядеть этот процесс. Весь этот стек может быть довольно перегружен для разработки и поддержки одним разработчиком без какой-либо поддержки DevOPs, поэтому было бы полезно и дешево использовать некоторые из управляемых сервисов AWS для шины и вебсокетов.
Если весь проект заключается в этом, то django даже не требуется, вы можете использовать безсерверный подход, используя chalice. Лямбда-функция (написанная на python), срабатывающая всякий раз, когда новое событие было опубликовано на шине, может сохранять записи в dynamodb, а также публиковать в aws websockets, и если вам нужно получить доступ позже или при обновлении тех же симуляций, вы можете разработать другую лямбду как REST API поверх dynamodb.
Вместо dynamoDB вы можете использовать любую базу данных, но в вашем случае это самая простая в работе и легкодоступная.
Причины, по которым стоит использовать eventbus в промежутке:
- события могут быть использованы несколько раз, так что даже если не удалось сохранить один раз, данные могут быть получены снова и процесс перезапущен .
- низкая связанность, вы не привязаны к ошибкам сети http, нагрузке на сервер и т.д.

