Рассмотрим сценарий, в котором я реализую систему, которая обрабатывает входящие задачи с помощью Akka. У меня есть основной актер, который получает задания и отправляет их некоторым работникам, которые обрабатывают задачи.
Мой первый инстинкт - реализовать это, если диспетчер создаст актера для каждой входящей задачи. После того, как рабочий-актер обработает задачу, он будет остановлен.
Это кажется самым чистым решением для меня, поскольку оно придерживается принципа "одна задача, один актер". Другим решением будет повторное использование актеров, но это связано с дополнительной сложностью очистки и некоторого управления пулами.
Я знаю, что актеры в Акке дешевы. Но мне интересно, есть ли неотъемлемая стоимость, связанная с повторным созданием и удалением участников. Есть ли скрытая стоимость, связанная с структурами данных, которые Akka использует для учета актеров?
Нагрузка должна составлять порядка десятков или сотен задач в секунду - подумайте об этом как о производственном веб-сервере, который создает один актер для каждого запроса.
Конечно, правильный ответ заключается в профилировании и точной настройке системы на основе типа входящей нагрузки. Но я подумал, может ли кто-нибудь рассказать мне что-то по собственному опыту?
LATER EDIT:
Мне нужно дать более подробную информацию о задаче:
- В какой-то момент можно запустить только N активных задач. Как отметил @drexin - это было бы легко разрешимо с помощью маршрутизаторов. Тем не менее, выполнение задач не является простым прогоном и должно быть выполнено.
- Задачи могут потребовать информацию от других участников или служб и, следовательно, возможно, придется ждать и уснуть. Поступая таким образом, они освобождают слот выполнения. Слот может быть взят другим ожидающим игроком, который теперь имеет возможность запускать. Вы можете сделать аналогию с тем, как процессы запланированы на одном CPU.
- Каждому действующему актеру необходимо сохранить какое-то состояние относительно выполнения задачи.
Примечание.. Я ценю альтернативные решения моей проблемы, и я обязательно их рассмотрю. Однако мне также хотелось бы ответить на главный вопрос относительно интенсивного создания и удаления актеров в Акке.