Akka.NET: ограничить создание дочерних акторов в кластере akka.net одной машиной - PullRequest
0 голосов
/ 26 февраля 2019

У нас есть определенный сценарий в нашем приложении - все дочерние акторы в этом приложении имеют дело с огромным объемом данных (около 50–200 МБ).В связи с этим мы решили создать дочерних акторов на том же компьютере (рабочем процессе), на котором был создан родительский актер.

В настоящее время это достигается использованием ролей.Мы также используем кэш-память .NET для передачи данных (несколько МБ) между дочерними субъектами.

Вопрос : Можно ли отключить кластеризацию в дочерних субъектах для достиженияожидаемый результат?

Редактировать : Чтобы быть более конкретным, я подробно объяснил настройку нашего приложения ниже.

  • Весь процесс происходит внутрикластер Akka.NET, состоящий из примерно 5 машин
  • Рабочие процессы (которые содержат как родительские, так и дочерние акторы) развернуты на каждой из этих машин
  • И родительские, и дочерние акторы имеют кластерную поддержку, в этомsetup

Когда мы выяснили нагрузку на сеть, вызванную распределением дочерних акторов по машинам, мы решили ограничить создание дочерних акторов соответствующими машинами, которые получили основной запрос, и распределить только родительский актер по всем машинам.машины.

При обращении к эксперту Akka.NET с этой проблемой нам посоветовали использовать «Роли», чтобы ограничить создание дочерних акторов одной машиной в кластерной системе.(Например, Worker1Child, Worker2Child вместо роли «Ребенок»)

Вопрос (продолжение) : Я просто хочу знать, если при простом отключении кластера у дочерних акторов будет достигнуто то же самоерезультат;и лучше ли это делать?

Пожалуйста, сообщите.

1 Ответ

0 голосов
/ 19 июня 2019

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

Похоже, что вы действительно пытаетесь здесь воспользоваться преимуществом локального сходства: задействовать в одном и том же процессе актеров-детей для одних и тех же субъектов.

Вот что я бы порекомендовал:

  1. Пусть все рабочие актеры созданы как дети родителей локально, внутри одного и того же процесса, но либо с использованием чего-то вроде child-per-entity pattern или маршрутизатор локального пула.
  2. Распределение работы между рабочими узлами с использованием кластерного группового маршрутизатора, с использованием ролей и т. д.
  3. Любая работа в этой большой рабочей нагрузке должнавсе они передаются напрямую от родителя к детям, без необходимости совершать обход туда и обратно между остальной частью кластера.

Учитывая информацию, которую вы предоставили здесь, это как бы близко к "общий "ответ, как я могу предоставить - надеюсь, вы найдете это полезным!

...