title: Are Akka actors overkill for doing data crunching/uploading?
body: <p>I'm quite new to Scala as well as Akka actors. I'm really only reading about their use and implementation now. My background is largely js and python with a bit of C#.</p>
  
  <p>A new service I have to write is going to receive REST requests, then do the following:</p>
  
  <ol>
  <li>Open a socket connection to a message broker</li>
  <li>Query an external REST service once</li>
  <li>Make many big, long REST requests to another internal service, do math on the responses, and send the result out. Messages are sent through the socket connection as progress updates.</li>
  </ol>
  
  <p>Scalability is the primary concern here, as we may normally receive ~10 small requests per minute, but at unknown times receive several jaw-droppingly enormous and long running requests at once.</p>
  
  <p>Using Scala Futures, the <em>very basic</em> implementation would be something like this:</p>
  
  <pre><code>val smallResponse = smallHttpRequest(args)
  
  smallResponse.onComplete match {
    case Success(result) =&gt; {
      result.data.grouped(10000).toList.forEach(subList =&gt; {
        val bigResponse = getBigSlowHttpRequest(subList)
        bigResponse.onSuccess {
          case crunchableStuff =&gt;  crunchAndDeliver(crunchableStuff)
        }
      })
    }
    case Failure(error) =&gt; handleError(error)
  }
  </code></pre>
  
  <p>My understanding is that on a machine with many cores, letting the JVM handle all the threading underneath the above futures would allow for them all to run in parallel. </p>
  
  <p>This could definitely be written using Akka actors, but I don't know what, if any, benefits I would realize in doing so. Would it be overkill to turn the above into an actor based process with a bunch of workers taking chunks of crunching?</p>