Как масштабировать мое приложение REST Scala, которое использует Akka?

У меня есть приложение Scala, использующее Akka, которое получает запросы REST, выполняет некоторые операции с базой данных и отвечает некоторой информацией клиенту. Как таковой, мои операции с БД занимают много времени, и мой субъект с поддержкой REST не может отвечать на новые запросы в то же время, даже несмотря на то, что я мог одновременно выполнять множество операций с БД. Я использую аннотации javax.ws.rs для методов REST-enable в моем актере.

Вопрос; Каков наилучший способ, позволяющий моему приложению обрабатывать большое количество одновременных запросов?

РЕДАКТИРОВАТЬ : Я добавлю пример кода.

  import se.scalablesolutions.akka.actor._
  import javax.ws.rs._

  @Path("/test")
  class TestService {

    @GET
    def status() = 
      actorPool !! Status(session).
        getOrElse(<error>Unable to connect to service</error>)
  }

  class TestActor {

    def receive = {
      case Status() => {
        reply(SomeObject.slowDBMethod)
      }
    }
  }

  case class Status()

РЕДАКТИРОВАТЬ2 : Это то, что я получаю в журнал. Я отправляю три запроса из своего браузера так быстро, как могу переключать вкладки и нажимаю F5, но бин RS все еще ожидает завершения первого запроса, прежде чем обрабатывать следующий.

[INFO] [2010-08-29 16:27:03,232] [akka:event-driven:dispatcher:global-15] c.n.StatusActor: got Slow request
[INFO] [2010-08-29 16:27:06,916] [akka:event-driven:dispatcher:global-10] c.n.StatusActor: got Slow request
[INFO] [2010-08-29 16:27:10,589] [akka:event-driven:dispatcher:global-3] c.n.StatusActor: got Slow request
12
задан surfmuggle 8 October 2014 в 12:25
поделиться

2 ответа

Получив запрос, вы должны создать нового субъекта для обработки этого запроса. Передайте первоначального отправителя, чтобы вновь созданный актер знал, кому отвечать.

3
ответ дан 2 December 2019 в 19:52
поделиться

похоже, вы используете старую версию Akka.

Я рекомендую выполнить обновление до 0.10 (который разделяет акторов и RS-Beans), после чего вы можете использовать LoadBalancer 1 2 ) для ограничения рабочей нагрузки или воспользоваться преимуществами WorkStealingDispatcher 3 4 )

Это поможет?

7
ответ дан 2 December 2019 в 19:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: