Когда создавать актер Akka
У меня есть служба REST, которая обслуживает только один запрос POST. Я хочу использовать актера для обработки запроса. Однако я не знаю, должен ли я создать одного актера и получить все запросы, используя этот актер, или мне нужно создавать актера каждый раз, когда я получаю запрос. Каковы плюсы и минусы этих выборов. Кроме того, как это параллельное выполнение, когда я создаю одного актера и использую его для обработки всех моих запросов. Это, безусловно, выглядит как последовательное выполнение. Я бы тоже хотел это понять.
3 ответа
Если вы используете один актер, запросы помещаются в очередь внутри почтового ящика актера и обрабатываются актером один за другим. Это последовательно и не рекомендуется.
Вот почему это сказано
Один актер не актер.
Создать менеджера Актер, который управляет другими актерами. Поскольку актеры довольно дешевы, вы можете без проблем создать одного актера для каждого запроса. Делайте взаимодействия БД и другие тяжелые вычисления, используя будущее и прямые результаты будущего, чтобы запросить обработчика, используя pipeTo
шаблон.
Используйте актеров только для того, чтобы разделять и распределять работу, и использовать Futures для выполнения интенсивных вычислений.
Я согласен с тем, что сказал @pamu. Актеры дешевы. Но имейте в виду, что если вы когда-нибудь собираетесь использовать одноактного актера, не делайте его полным, это вызовет проблемы.
И если вы собираетесь использовать Futures для интенсивной работы (что вы должны сделать). Убедитесь, что вы даете им конкретный ExecutionContext / Dispatcher. Использование глобального диспетчера или ExecutionContext не хорошо.
Или в каждом вашем API создайте определенного диспетчера для управления количеством актеров, которые будут работать с такого рода конечной точкой / API.
Например, у вас есть "/get/ Transactions"
указать диспетчер, который будет порождать только этот поток. Для этого API.
Преимущество этого заключается в том, что вы можете контролировать количество потоков и ресурсов, используемых вашим приложением. Когда дело доходит до борьбы с интенсивным движением. Это хорошая практика.
Я хотел бы создать актера для каждого запроса и использовать шаблон "рассказать", чтобы делегировать работу вновь созданному актеру. Если используемая вами среда REST поддерживает завершение запроса от другого участника (Spray, Akka-HTTP делает), вы можете выполнить запрос от этого нового участника. Таким образом, ваш обработчик запросов может обработать следующий запрос.
Я нахожу этот замечательный ресурс, который объясняет плюсы и минусы актеров "спроси и скажи" и "по запросу". Это может быть полезно для вас.