This is my first Catalyst app and I'm not sure how to solve the following problem.

The user enters some data in a form and selects a file (up to 100MB) for uploading. After submitting the form, the actual computation takes up to 5 minutes and the results are stored in a DB.

What I want to do is to run this process (and maybe also the file upload) in the *background* to avoid a server timeout. There should be some kind of feedback to the user (like a message "Job has been started" or a progress bar). The form should be blocked while the job is still running. A result page should be displayed once the job finished.

In hours of reading I stumbled upon concepts like asynchronous requests, job queues, daemons, [Gearman](http://gearman.org/), or [Catalyst::Plugin::RunAfterRequest](http://search.cpan.org/~flora/Catalyst-Plugin-RunAfterRequest-0.04/lib/Catalyst/Plugin/RunAfterRequest.pm).

How would you do it?
Thanks for helping a web dev novice!

PS: In my current local app the work is done in parallel with *Parallel::ForkManager*. For the real app, would it be advisable to use a cloud computing service like Amazon EC2? Or just find a hoster who offers multi-core servers?