Ich habe eine Scala-Anwendung, die Akka verwendet, die REST-Anforderungen empfängt, einige Operationen gegen eine Datenbank ausführt und mit einigen Informationen an den Client antwortet. Da meine db-Vorgänge sehr lange dauern, kann mein REST-fähiger Akteur in der Zwischenzeit nicht auf neue Anforderungen reagieren, obwohl ich viele Operationen gleichzeitig mit der Datenbank ausführen könnte. Ich verwende die javax.ws.rs-Annotationen, um Methoden in meinem Akteur REST-fähig zu machen.Wie skaliere ich meine Scala REST-Anwendung, die Akka verwendet?
Die Frage; Was ist der beste Weg, um es meiner Anwendung zu ermöglichen, eine große Anzahl gleichzeitiger Anfragen zu bearbeiten?
BEARBEITEN: Ich füge einen Beispielcode hinzu.
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: Das ist, was ich im Protokoll zu bekommen. Ich sende die drei Anfragen von meinem Browser so schnell, wie ich Tabs wechseln kann und F5 drücke, aber die RS-Bean wartet immer noch auf die erste Anfrage, bevor sie mit der nächsten fertig wird.
[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
Vielleicht möchten Sie in Apache Bench statt F5 drücken, so viel Tolles Tool für Parallelitätstests. http://httpd.apache.org/docs/2.2/programs/ab.html – cbmeeks