Possiedo un'applicazione Scala che utilizza Akka che riceve richieste REST, esegue alcune operazioni su un database e risponde con alcune informazioni al client. Così com'è, le mie operazioni db richiedono molto tempo e il mio attore abilitato a REST non è in grado di rispondere a nuove richieste nel frattempo, anche se potrei eseguire molte operazioni contemporaneamente contro il DB. Sto usando le annotazioni javax.ws.rs sui metodi REST-enable nel mio attore.Come si ridimensiona l'applicazione Scala REST che utilizza Akka?
La domanda; qual è il modo migliore per consentire alla mia applicazione di gestire un numero elevato di richieste simultanee?
MODIFICA: Aggiungerò un po 'di codice di esempio.
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: Questo è quello che sto ottenendo nel registro. Sto inviando le tre richieste dal mio browser tanto velocemente quanto posso cambiare le schede e premere F5, ma il bean RS attende ancora la prima richiesta da completare prima di gestire il successivo.
[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
Si consiglia di esaminare la panca Apache invece di premere F5 così tanto ottimo strumento per i test di concorrenza. http://httpd.apache.org/docs/2.2/programs/ab.html – cbmeeks