Мне известно, что с Akka 2.4.16 не существует «удаленной» реализации реактивных потоков. Спецификация фокусируется на потоке, запущенном на одной JVM.Способы поддержания противодавления в потоках Akka с участием нескольких JVM
Однако, рассматривая прецедент для использования другой JVM для некоторой обработки при сохранении противодавления. Идея состоит в том, чтобы иметь основное приложение, которое предоставляет пользовательский интерфейс, запускающий поток. Например, этот поток имеет этап, выполняющий некоторые тяжелые вычисления, которые должны запускаться на другой машине. Я заинтересован в способах запуска потоков в распределенном образом - я наткнулся на несколько статей, указывая на некоторые идеи:
- Подключение потоков через TCP с использованием Akka HTTP (Stackoverflow)
- Упрощения его артерией в определенном степень (Stackoverflow, Akka Blog)
- Интегрирование актеров в поток (Answer from Viktor Klang, Akka Docs)
Какие альтернативы существуют? Имеются ли существенные минусы вышеизложенного? Любые особенности, которые следует учитывать?
Обновление: этот вопрос не ограничивается одним вариантом использования. Обычно меня интересуют все возможные способы работы с потоками в распределенной среде. Это означает, например, он может включать только один поток, который объединяет субъектов с .mapAsync
или, например, на двух машинах, работающих через Akka HTTP, могут быть два отдельных потока. Единственное требование заключается в том, что противодавление должно быть соблюдено всеми компонентами.
Я думаю, что вы неправильно понимаете что-то. Итак ... как у вас есть поток inter-jvm? Ну ... имея компоненты, которые на самом деле находятся в разных jvm. Теперь вам нужно понять, что те компоненты в этом конкретном случае будут Актерами. Итак ... вам просто нужно создать FlowShape/Sink/Source с помощью какого-то «удаленного актера», и артерия позаботится о передаче сообщений. –
Я полностью согласен с вашим комментарием - согласно сообщению в блоге, Артерия поддерживает обратное давление, когда эти два актера общаются друг с другом. Мой вопрос скорее направлен на понимание того, например, использование '.mapAsync' для интеграции удаленных участников в потоке имеет тот же результат: наличие потока, который обрабатывает что-то на другой машине. В более общем плане: Каковы способы реализации потоков, пересекающих границы JVM? – Toaditoad