Многопроцессорная обработка для надежного моделирования на веб-сервере - PullRequest
0 голосов
/ 13 октября 2018

Проблема : создание серверной службы для веб-приложения, которое выполняет физическое моделирование.Во внешнем интерфейсе некоторые параметры могут быть установлены и отправлены на сервер, который запустит симуляцию.Результаты моделирования отправляются клиенту для анализа.

Вопрос : Что такое хорошая архитектура для решения этой проблемы?«Хороший» означает надежный и простой в настройке, обслуживании и масштабировании.Я пришел из научных вычислений и, следовательно, не так много опыта с такими архитектурными вопросами.Я думал о:

  1. All-In-One : реализовать веб-сервер на том же языке, на котором выполняется симуляция, и управлять мультиобработкой в ​​этом "едином"окружающая среда ".

  2. Отдельный веб-сервер и рабочие : реализовать (асинхронный) веб-сервер на подходящем языке, вызывая работников в их собственных процессах (в другомязык).Сервер также должен был бы реализовать простую балансировку нагрузки рабочих (то есть просто ждать, пока один снова не освободится).Использовать какое-либо межпроцессное взаимодействие (gRPC, ZeroMQ, ...).

  3. Обратный прокси : Использовать «чистый» обратный прокси-сервер (например, Nginx) в качестве балансировщика нагрузки над рабочими, каждый из которых имеет собственный локальный (синхронный) веб-сервер.

  4. Docker : создание контейнеров для рабочих, масштабирование иБалансировать их, используя docker-compose.

Соответствующая информация :

  • Одно моделирование занимает несколько секунд (на одномЯдро процессора).
  • Сервер будет виртуальным (как локальным, так и облачным);для которого количество ЦП будет увеличиваться, если / когда увеличивается нагрузка.
  • Очевидно, что число "работников моделирования" должно соответственно увеличиваться (желательно автоматически, но не обязательно).
  • Может случиться так, что симуляция действительно рухнет.Пока не ясно, насколько серьезными могут быть такие сбои (т. Е. Могут ли быть перехвачены все ошибки или, например, могут ли возникнуть ошибки).
  • В настоящее время моделирование реализовано в Python (3.6), возможно, с использованием Numba JIT дляУскорение, но может быть перенесено на Джулию (естественно, быстрее).

Спасибо за любой совет, приветствуются как "лучшие практики", так и "не делайте так"!

...