Tengo una aplicación Scala que utiliza Akka que recibe solicitudes REST, realiza algunas operaciones contra una base de datos y responde con cierta información al cliente. Tal como están las cosas, mis operaciones de DB tardan mucho y mi actor REST habilitado no puede responder a las nuevas solicitudes mientras tanto, aunque podría ejecutar muchas operaciones al mismo tiempo contra el DB. Estoy usando las anotaciones javax.ws.rs para REST-enable methods en mi actor.¿Cómo escalo mi aplicación Scala REST que usa Akka?
La pregunta; ¿Cuál es la mejor manera de permitir que mi aplicación maneje una gran cantidad de solicitudes simultáneas?
EDIT: Voy a agregar un código de muestra.
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()
Edit2: Esto es lo que estoy haciendo en el registro. Estoy enviando las tres solicitudes desde mi navegador tan rápido como puedo cambiar de pestañas y presiono F5, pero el bean RS todavía espera que la primera solicitud se complete antes de manipular la siguiente.
[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
Es posible que desee buscar en Apache Bench en lugar de presionar F5 tanto Gran herramienta para la prueba de concurrencia. http://httpd.apache.org/docs/2.2/programs/ab.html – cbmeeks