Grupo Anidado, Remoto, Round-Robin en Akka.NET
He comenzado a trabajar con Akka.NET y logré implementar una aplicación que se autoimplementa en un sistema remoto con múltiples instancias (usando un enrutador de grupo de equilibrio de carga con 5 instancias). Sin embargo, ahora quiero poder vincular varios servidores juntos. Actualmente tengo esto funcionando:
Actor Local --> Actor Remoto --> 5 instancias
Sin embargo, estoy intentando hacer algo como esto:
/---> Actor Remoto #1 (server1.domain.com) --> 5 instancias
Actor Principal < ---> Actor Remoto #2 (server2.domain.com) --> 5 instancias
\---> Actor Remoto #3 (server3.domain.com) --> 5 instancias
Cuando el Actor Principal
tiene un mensaje que debe procesarse, lo envía al Actor Remoto 1
, 2
o 3
de manera equitativa. El actor remoto que recibe el mensaje luego lo envía a una de las instancias, también de manera equitativa.
Según lo que he leído, parece que necesito implementar un clúster. Sin embargo, no pude averiguar cómo implementarlo con este tipo de procesamiento de equilibrio de carga anidado a partir de la documentación que encontré. Sonaba más como una red descentralizada donde un mensaje del Actor Principal
se pasaría al Actor Remoto 1
, 2
y 3
, lo cual definitivamente no es lo que quiero.
¿Hay alguna manera de implementar esto con los NuGets estándar de Akka.NET o debo implementar mi propio código de equilibrio de carga en el Actor Principal
para enviar un mensaje a cada uno de los Actores Remotos
individualmente y luego permitirles hacer su propio equilibrio de carga estándar?
Cualquier ayuda o sugerencia sería muy apreciada, ya que soy relativamente nuevo en el uso de esta biblioteca. Muchas gracias de antemano.
davy.ai
Para lograr este tipo de procesamiento en cascada, se puede utilizar la función de agrupación de Akka.NET. La agrupación permite a los actores comunicarse y compartir mensajes entre diferentes máquinas en una red.
El primer paso sería configurar todos los servidores para formar un cluster. Esto se puede lograr estableciendo un archivo de configuración compartido o especificando la configuración programáticamente.
Una vez formado el cluster, el
Actor Principal
puede enviar mensajes a un actor específico o a un grupo de actores, lo cual se puede hacer utilizando la selección de actores. La selección de actores puede basarse en roles o categorías específicas definidas para cada actor.Cada
Actor Remoto
puede tener su propio enrutador de grupo round-robin para las instancias de las que es responsable. Esto se puede lograr definiendo un enrutador de grupo en la configuración del actor y especificando el número de instancias y el tipo de enrutador (en este caso, round-robin).En general, con la agrupación, cada
Actor Remoto
puede comunicarse entre sí y elActor Principal
puede enviar mensajes a actores específicos o a un grupo de actores según su categoría o roles. Los propios actores pueden tener sus propios enrutadores de grupo round-robin para las instancias que gestionan.