Разница между кластеризацией и удалением в Акке
Я разработал свое приложение с Akka на одном JVM. Теперь я хочу распределить рабочую нагрузку на многих машинах. Я начал читать документацию и запутался.
Существует два способа сделать приложение Akka распределенным путем кластеризации и удаленного доступа.
Я не понимаю разницу между ними.
Если я правильно понимаю, оба они исключают себя взаимно, так как в конфигурации нужно использовать другой провайдер для ссылки на актера:
akka.remote.RemoteActorRefProvider
akka.cluster.ClusterActorRefProvider
Итак, какие варианты использования? Когда я бы выбрал один вместо другого?
Может быть, кластеризация - это что-то вроде суперсети удалённости или, может быть, это наоборот?
Ответы
Ответ 1
Они не являются взаимоисключающими, поскольку кластеризация выполняется поверх удаленных объектов. Основной особенностью удаленного доступа является прозрачность местоположения для ActorRefs. Кластеризация добавляет к этому распределенное членство. Редко использовать дистанционное использование, кластеризация является предпочтительной для большинства случаев использования.
Ответ 2
Всегда лучше всего смотреть на код
https://github.com/akka/akka/blob/c2983c7225eeaa035af99e0affeb5f5c841668c4/akka-cluster/src/main/scala/akka/cluster/ClusterActorRefProvider.scala
private[akka] class ClusterActorRefProvider ... extends RemoteActorRefProvider
Прежде всего ClusterActorRefProvider - это просто расширение RemoteActorRefProvider
Основные функции кластера-akka, добавленные к удалению, следующие:
- Обнаружение сбоев в кластере
- маршрутизаторы с возможностями групп root и пула
вы найдете вкус всех этих аддонов в исходном коде.