Akka Clustering – un responsable acteur par nœud

Je travaille sur une application qui interroge souvent un très grand nombre d’acteurs et envoie / reçoit donc un très grand nombre de messages. Lorsque l’application est exécutée sur un seul ordinateur, cela n’est pas un problème car les messages sont envoyés dans les limites d’une seule machine virtuelle, ce qui est assez rapide. Cependant, lorsque j’exécute l’application sur plusieurs nœuds (à l’aide de akka-cluster), chaque nœud héberge une partie de ces acteurs et les messages transitent sur le réseau, ce qui devient extrêmement lent.

Une solution que j’ai proposée consiste à avoir un ManagerActor sur chaque nœud où l’application est exécutée. Cela réduira considérablement le nombre de messages échangés (c’est-à-dire qu’au lieu d’envoyer des milliers de messages à chacun des acteurs, si nous exécutons l’application sur 3 nœuds, nous envoyons 3 messages – un pour chaque ManagerActor qui envoie ensuite des messages de la JVM actuelle au (des milliers d’acteurs) ce qui est très rapide). Cependant, je suis assez nouveau chez Akka et je ne suis pas tout à fait sûr qu’une telle solution ait du sens. Voyez-vous des inconvénients? Toutes les autres options qui sont mieux / plus natives de Akka?

Vous pouvez utiliser Dissortingbuted Publish-Subscribe d’Akka pour y parvenir. De cette façon, vous commencez simplement un acteur de gestionnaire sur chaque nœud de la manière habituelle, vous les abonnez à un sujet, puis vous leur publiez des messages en utilisant ce sujet. Il existe un exemple simple dans les documents liés ci-dessus.