Проблема : создание серверной службы для веб-приложения, которое выполняет физическое моделирование.Во внешнем интерфейсе некоторые параметры могут быть установлены и отправлены на сервер, который запустит симуляцию.Результаты моделирования отправляются клиенту для анализа.
Вопрос : Что такое хорошая архитектура для решения этой проблемы?«Хороший» означает надежный и простой в настройке, обслуживании и масштабировании.Я пришел из научных вычислений и, следовательно, не так много опыта с такими архитектурными вопросами.Я думал о:
All-In-One : реализовать веб-сервер на том же языке, на котором выполняется симуляция, и управлять мультиобработкой в этом "едином"окружающая среда ".
Отдельный веб-сервер и рабочие : реализовать (асинхронный) веб-сервер на подходящем языке, вызывая работников в их собственных процессах (в другомязык).Сервер также должен был бы реализовать простую балансировку нагрузки рабочих (то есть просто ждать, пока один снова не освободится).Использовать какое-либо межпроцессное взаимодействие (gRPC, ZeroMQ, ...).
Обратный прокси : Использовать «чистый» обратный прокси-сервер (например, Nginx) в качестве балансировщика нагрузки над рабочими, каждый из которых имеет собственный локальный (синхронный) веб-сервер.
Docker : создание контейнеров для рабочих, масштабирование иБалансировать их, используя docker-compose.
Соответствующая информация :
- Одно моделирование занимает несколько секунд (на одномЯдро процессора).
- Сервер будет виртуальным (как локальным, так и облачным);для которого количество ЦП будет увеличиваться, если / когда увеличивается нагрузка.
- Очевидно, что число "работников моделирования" должно соответственно увеличиваться (желательно автоматически, но не обязательно).
- Может случиться так, что симуляция действительно рухнет.Пока не ясно, насколько серьезными могут быть такие сбои (т. Е. Могут ли быть перехвачены все ошибки или, например, могут ли возникнуть ошибки).
- В настоящее время моделирование реализовано в Python (3.6), возможно, с использованием Numba JIT дляУскорение, но может быть перенесено на Джулию (естественно, быстрее).
Спасибо за любой совет, приветствуются как "лучшие практики", так и "не делайте так"!