Akka para la encuesta REST

Estoy intentando conectar una gran aplicación Scala + Akka + PlayMini con una API REST externa. La idea es sondear periódicamente (básicamente cada 1 a 10 minutos) una URL raíz y luego rastrear las URL de subnivel para extraer datos que luego se envían a una cola de mensajes.

He encontrado dos maneras de hacer esto:

1er camino

Cree una jerarquía de actores para que coincida con la estructura de la ruta de recursos de la API. En el caso de Google Latitude, eso significaría, por ejemplo,

Encuestas 'latitude / v1 / currentLocation' del actorhttps://www.googleapis.com/latitude/v1/currentLocationActor 'latitude / v1 / location' encuestashttps://www.googleapis.com/latitude/v1/locationActor 'latitude / v1 / location / 1' pollshttps://www.googleapis.com/latitude/v1/location/1Actor 'latitude / v1 / location / 2' pollshttps://www.googleapis.com/latitude/v1/location/2Actor 'latitude / v1 / location / 3' pollshttps://www.googleapis.com/latitude/v1/location/3etc.

En este caso, cada actor es responsable de sondear su recurso asociado periódicamente, así como de crear / eliminar actores infantiles para los recursos de ruta del siguiente nivel (es decir, el actor 'latitude / v1 / location' crea los actores 1, 2, 3, etc. para todos los lugares de los que aprende a través de la encuesta dehttps://www.googleapis.com/latitude/v1/location).

2ª vía

Cree un grupo de actores de sondeo idénticos que reciban solicitudes de sondeo (que contengan la ruta del recurso) equilibradas por un enrutador, sondee la URL una vez, realice un procesamiento y programe las solicitudes de sondeo (tanto para los recursos del siguiente nivel como para la URL del sondeo) . En Google Latitude, eso significaría, por ejemplo:

1 enrutador, n actores encuestador. Solicitud de sondeo inicial parahttps://www.googleapis.com/latitude/v1/location conduce a varias solicitudes de sondeo nuevas (inmediatas) parahttps://www.googleapis.com/latitude/v1/location/1, https://www.googleapis.com/latitude/v1/location/2, etc. y una solicitud de sondeo (retrasada) para el mismo recurso, es decir,https://www.googleapis.com/latitude/v1/location.

He implementado ambas soluciones y no puedo observar de inmediato ninguna diferencia relevante de rendimiento, al menos no para la API y las frecuencias de sondeo que me interesan. Creo que el primer enfoque es algo más fácil de razonar y quizás más fácil de usar con el sistema. .scheduler.schedule (...) que el segundo enfoque (donde necesito programar Una vez (...)). Además, asumiendo que los recursos están anidados en varios niveles y algo de corta duración (por ejemplo, se pueden agregar / eliminar varios recursos entre cada sondeo), la administración del ciclo de vida de akka facilita la eliminación de una rama completa en el primer caso. El segundo enfoque debería (teóricamente) ser más rápido y el código es algo más fácil de escribir.

Mis preguntas son:

¿Qué enfoque parece ser el mejor (en términos de rendimiento, extensibilidad, complejidad de código, etc.)?¿Ves algo malo con el diseño de cualquiera de los dos enfoques (especialmente el primero)?¿Alguien ha intentado implementar algo similar? ¿Cómo se hizo?

¡Gracias!

Respuestas a la pregunta(1)

Su respuesta a la pregunta