Продюсер Потребитель с Java (Streams) Multi [Потоки / Обработка] - PullRequest
0 голосов
/ 01 мая 2018

Я работаю над проектом, по сути, длинной цепочкой производителей / потребителей. Это означает, что 1-й процесс получает данные от пользователя (огромный CSV-файл), обрабатывает данные построчно, передает другому процессу / потоку, который потребляет эти данные, обрабатывает, а затем передает другому и т. Д.
Длина цепочки составляет около 8-10 единиц, каждая единица выступает в роли потребителя, а затем производителя.
Я думал об использовании AWS лямбда для этого. Я также мог бы использовать потоки Java. Преимущество AWS lambda в том, что вы можете установить индивидуальный лимит регулирования для каждого узла.
Таким образом, если работа вашего узла заключается в обновлении записи DynamodB, мы могли бы регулировать этот узел, чтобы он соответствовал единицам записи DynamodB и т. Д.
Другое преимущество, которое я вижу при использовании лямбды, заключается в том, что мне не нужно писать код для управления многопроцессорностью (или многопоточностью), и моя обработка данных не будет зависеть от выбранного оборудования - я также могу сэкономить, выбрав низкокачественное оборудование, единственной задачей которого было бы выступить в качестве первого производителя, но я все равно буду платить за AWS Lambda.

  1. Работает ли с потоками Java аналогично, если я использую лямбда-символы Java и использую их так же, как я бы использовал лямбда-лямбда AWS? Могу ли я использовать троттлинг в Java-лямбдах?
  2. Если я использую потоки Java, существует ли простой способ управления многопроцессорной обработкой (многопоточностью).
  3. Есть ли другие преимущества использования лямбды, кроме регулирования и управления пулами? Есть ли недостатки?
  4. Существуют ли другие альтернативы, кроме двух вышеупомянутых?
  5. Что делать, если мне нужно несколько потребителей для определенных узлов в цепочке? например Потребитель потребляет данные, обрабатывает и передает их следующему в цепочке, но мы также должны регистрировать данные или сохранять их в дБ.

Ответы [ 2 ]

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

Похоже, reactive streams (а не потоки Java или лямбды AWS) - лучший инструмент, подходящий для вашей задачи. Они обеспечивают:

  • противодавление, то есть балансирование скорости потребителей и производителей
  • параллельное выполнение всех шагов цепочки трубопровода
  • подключение нескольких потребителей для одного производителя

Существует ряд реализаций reactive streams: JavaRx2, Project Reactor (входит в Spring 5), Akka Streams и другие.

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

Звучит так, как будто вы должны использовать пошаговые функции для связывания лямбды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...