akka akka-cluster

Diferencia entre agrupación y comunicación remota en Akka



akka-cluster (2)

He desarrollado mi aplicación con Akka en una sola JVM. Ahora quiero distribuir la carga de trabajo a través de muchas máquinas. Empecé a leer la documentación y me confundí.

Hay dos formas de hacer que la aplicación Akka sea distribuida agrupando y remoteando. No entiendo la diferencia entre los dos. Si entiendo correctamente, ambos se excluyen mutuamente, ya que en la configuración se debe usar un proveedor diferente para referencia del actor:

akka.remote.RemoteActorRefProvider akka.cluster.ClusterActorRefProvider

Entonces, ¿cuáles son los casos de uso? ¿Cuándo elegiría uno en lugar de otro?

¿Tal vez la agrupación es algo así como un superconjunto de la comunicación remota o tal vez es al revés?


No se excluyen mutuamente, ya que el agrupamiento se implementa en la parte superior de la comunicación remota. La característica principal de la comunicación remota es la transparencia de ubicación para ActorRefs. La agrupación agrega membresía distribuida por encima de eso. Rara vez es útil usar la comunicación remota directamente, se prefiere la agrupación en clústeres para la mayoría de los casos de uso.


Siempre es mejor mirar el código.

https://github.com/akka/akka/blob/c2983c7225eeaa035af99e0affeb5f5c841668c4/akka-cluster/src/main/scala/akka/cluster/ClusterActorRefProvider.scala

private[akka] class ClusterActorRefProvider ... extends RemoteActorRefProvider

En primer lugar, ClusterActorRefProvider es solo una extensión de RemoteActorRefProvider

Las características principales del cluster-akka añadidas a la comunicación remota son:

  • detección de fallos en todo el cluster
  • Enrutadores con capacidades de grupo y grupo de rootes

Encontrarás el sabor de todos estos complementos en el código fuente.