2010-11-17 16 views
7

Tengo que construir un servicio web muy concurrente que expondrá API basada en REST para JavaScript (front-end) y barandas (back-end). El servicio web adaptará la API de acceso a datos a MongoDB.¿Qué frameworks basados ​​en actores están disponibles para Scala?

ya había escrito una implementación inicial usando NodeJS y le gustaría probar Scala solución basada. También estoy considerando Erlang, para el cual cada framework web está basado en actores.

Así que estoy buscando un framework web explícitamente construido usando Actors para soportar una carga masiva de solicitudes. Soy muy nuevo en Scala y no entiendo cómo podría funcionar Actor si casi todos los frameworks de Scala están basados en los servlets de Java que crea un hilo en cada solicitud que agotará todos los recursos en mi escenario.

+0

Esta es una vieja pregunta, pero debes mirar Play 2.0 que se ejecutará en netty y usará akka. –

Respuesta

3
  1. Si realmente vamos a tener 10k conexiones activas + largos a la vez, entonces cualquier Servidor de aplicaciones Java/marco estándar (tal vez, a excepción de Netty) no va a funcionar para usted - todos ellos son un montón que consumen de memoria (incluso si se usa cualquier tipo de NIO inteligente). Será mejor que se quede con una solución agrupada de bucle de eventos (como node.js que ya ha probado), mongrel respaldado con zeroMQ, nginx con el modo para escribir en MQ sondeado por Scala Actors, etc.

  2. Entre los marcos Scala/Java, Ascensor tiene un buen soporte asíncrono para el ocio (aunque no es directamente ligado a los actores). OTOH, LinkedIn utiliza actores Scalatra + stdlib para sus servicios REST detrás de Signal, y se siente bien.

+0

Gracias, las conexiones no serán largas, pero serán alrededor de 10k bastante fáciles. Traté de entender cómo funciona Lift y no me gusta que tengan sesiones en otro lugar. Sinatra/ExpressJS/Scalatra son las soluciones más preferidas para mí debido a su simplicidad. Mencionaste cómo LinkedIn usó Scalatra, pero dijeron 'Scalatra no usa ningún actor', lo cual es una lástima. – sha1dy

+0

1. Lift CometActors y async REST no tiene nada que ver con las sesiones (ambos tienden a ser apátridas). 2. El hecho de que Scalatra no use actores como lo hace Lift (ej. Como CometActor) no impide que nadie use actores en conjunto con + por lo que sé, los desarrolladores de Scalatra están trabajando en el soporte de COMET ahora –

+0

Gracias por explicar cómo Levante funciona. En cuanto a Scalatra y actores, Scalatra morirá bajo mucha carga porque creará un nuevo hilo para cada solicitud debido a su implementación predeterminada que extiende la clase estándar de Java (parece que github.com no responde en esta parte del mundo para que pueda ver qué clase exactamente Scalatra se extiende)? – sha1dy

0

http://liftweb.net/ De hecho, una solicitud comienza como un servlet, pero luego usa el soporte de cometa que se encuentra en muchos contenedores de servlet para romper el hilo, manteniendo el contexto de solicitud (que el contenedor no destruye) que luego puede ser utilizado para generar datos en los actores.

http://akkasource.org también tiene soporte para el descanso, pero bloqueará el hilo hasta que el actor termina con su trabajo

+0

¿Hay algo más ligero que ascensor existe para Scala? Me gusta Sinatra (o ExpressJS) y estaba muy emocionado de saber que el puerto de Sinatra (Scalatra) también existe para Scala, pero parece que no usa Actores – sha1dy

+0

Bueno, como se mencionó, Akka tiene REST y Actores. Tiene soporte de cometa en progreso integrando la biblioteca de atmósfera. Para mi caso de uso, el ambiente no era bueno (todo lo que podía imaginar era cómo hacer servicios tipo chat con él, no 'inicio' -> 'actor spawn' -> ciclos de 'finalización') – IttayD

+1

Akka tiene un módulo Comet en curso con nombre en código akka-mist que probablemente hará lo que necesita -> aceptar solicitud entrante, enviarla a un actor, hacer que el actor cumpla la solicitud de forma asincrónica. –

1

Otra opción es Play framework. La última versión 1.1 es compatible con Scala. También es compatible con Akka como módulo.

+0

Creo que el nuevo 2.0 de Play tendrá soporte de actor a través de akka y usará netty. –

1

En lo que sí Scalatra, que han estado trabajando en una nueva solicitud abstracción llamada sociales de interés general (similar a la/el estante/WSGI/capa WAI servlet), que dijeron debería ennable a romper con el único funcionando como un servlet y también ejecutar en la parte superior de algo construido con Netty. Ver el hilo here. http://github.com/scalatra/ssgi

Hay algunos otros marcos interesantes a nivel Scalatra de la simplicidad ya diseñado desde cero para soportar servicios web asíncronos (No envuelve un hilo por solicitud):

https://github.com/jdegoes/blueeyes - No es un servlet; construido en Netty. ("ligeramente inspirado por ... Scalatra")

http://spray.cc/ - Construido en Akka actors, Akka Mist. Servlet 3.0 o Jetty continuaciones ("pulverización se inspiró en gran medida por BlueEyes y Scalatra.")

Y en un nivel inferior: https://github.com/rschildmeijer/loft - "no basado en el bloqueo, asíncrono continuación, un solo servidor web enlazado ". No listo para la producción, sino más bien de aspecto interesante. Las continuas requieren el complemento del compilador.

Cuestiones relacionadas