akka.net масштабирование в лазурном сайте asp.net
Я настроил актеров Akka.net, работающих внутри приложения ASP.net, для обработки некоторых асинхронных и легких процедур. Мне интересно, как Akka масштабируется, когда я масштабирую веб-сайт на Azure. Допустим, в коде у меня есть один субъект для обработки сообщений типа FooBar. Когда у меня есть два экземпляра сайта, есть ли еще один актер или сейчас два актера?
1 ответ
Решение
По умолчанию всякий раз, когда вы позвоните ActorOf
метод, вы закажете создание нового экземпляра актера. Если вы назовете это в двух системах акторов, вы получите двух отдельных акторов, имеющих одинаковые относительные пути внутри своих систем, но разные глобальные адреса.
Существует несколько способов обмена информацией об актерах между системами акторов:
- Когда используешь
Akka.Remote
Вы можете позвонить актерам, живущим в другой системе акторов, учитывая их адреса илиIActorRef
s. Требования:- Вы должны знать путь к данному актеру.
- Вы должны знать фактический адрес (URL или IP) системы актера, на которой живет этот актер.
- Обе системы акторов должны иметь возможность обмениваться данными через TCP между системой акторов (т. Е. Открывать порты на брандмауэре).
- Когда используешь
Akka.Cluster
Системы акторов (также известные как узлы) могут образовывать кластер. Они будут обмениваться информацией о своей локализации в сети, отслеживать входящие узлы и в конечном итоге обнаруживать мертвые или недоступные. Кроме того, вы можете использовать компоненты более высокого уровня, например кластерные маршрутизаторы. Требования:- Каждый узел должен иметь возможность открывать канал TCP для каждого другого (опять же, брандмауэры и т. Д.)
- Новый входящий узел должен знать хотя бы один узел, который уже является частью кластера. Это легко достижимо как часть шаблона, известного как маяк, или через плагины и сторонние сервисы, такие как консул.
- Все узлы должны иметь одинаковое имя.
- Наконец, при использовании конфигурации кластера вы можете использовать Akka.Cluster.Sharding - это, по сути, абстракция более высокого уровня над расположением актера внутри кластера. При его использовании вам не нужно явно указывать, где найти или когда создать актера. Вместо этого все, что вам нужно, это уникальный идентификатор актера. При отправке сообщения такому субъекту оно будет создано где-то в кластере, если его раньше не существовало, и будет перебалансировано для равномерного распределения рабочей нагрузки в кластере. Этот плагин также обрабатывает всю логику, связанную с маршрутизацией сообщения этому субъекту.