Архитектура Akka для распределенных вычислений с использованием веб-приложения - PullRequest
0 голосов
/ 10 мая 2018

Я работаю над веб-приложением, которое принимает пользовательский ввод и использует кластер для параллельных вычислений на входе. Акка-кластер используется для облегчения этого.

В настоящее время я использую Play Framework для управления HTTP-запросом в моем веб-приложении. Исходя из этого, я подумываю о том, чтобы передать пользовательский ввод внешнему субъекту Akka, который перенаправляет запрос нескольким внутренним субъектам для параллельного вычисления промежуточных результатов. Затем у меня есть другой субъект, который объединяет промежуточные результаты, прежде чем окончательно вернуть конечный результат пользователю. Каждый расчет может занять от нескольких минут до часа. (Я получил идею использовать фронтенд и бэкэнд-актер из этого примера )

Меня беспокоит то, что клиент внешнего интерфейса должен принять запрос от каждого пользователя и предоставить отчет о ходе выполнения задания. Моя первая мысль - использовать шаблон 'ask', но я думаю, что это неправильный подход, поскольку это означает, что только один пользователь может быть сервером одновременно. Так что в настоящее время я думаю об использовании асинхронного «рассказать» для обслуживания запроса.

Мои вопросы: правильный ли это подход к проблеме? Если я использую функцию «Рассказать», то как мне уведомить пользователя о завершении работы? Кроме того, поскольку я использую Play Framework, возможно ли интегрировать интерфейсный пользователь с Play, чтобы показать обновление веб-страницы?

1 Ответ

0 голосов
/ 11 мая 2018

Не уверен, что ты имеешь в виду под blocking 'ask' pattern. Если вы говорите о ? или ask методах ожидания ответа от актеров, он основан на асинхронном и неблокирующем Futures, поэтому его довольно безопасно использовать в Play, это действительно общий подход.

С другой стороны, если ответ займет очень много времени, скажем, более 20 с, я не одобряю это, чтобы не оставлять много открытых соединений и улучшить взаимодействие с пользователем. Также Akka поощряет использование tell, поэтому я бы выбрал технологии проталкивания на стороне сервера (websockets?) Или даже сообщения электронной почты, если это может быть еще длиннее.

...