Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

We are designing a new architecture for an enterprise business. The principles we've followed so far is not to develop what you can (possible buy and) deploy, ie, don't reinvent any wheels.

In this way we've decided on CQRS, RabbitMQ, Riak and a bunch of other things. We still need to write /some/ business code though and these will be in the form of worker processes, which will consume commands from a message queue and after any side-effects, produce events onto another message queue. The idea behind this is that via the competing-consumers design we will have a scalable design right out of the box.

One option is of writing a management infrastructure that will know how to:

  • deploy code
  • instantiate processes
  • kill processes
  • update configuration
  • etc

IE provide fault tolerance and scalability. Also, this is exactly what something like GAE and Heroku does for you, but in a public setting and in our organization, public is bad.

My question is, is there an out-of-the-box solution that we can use to host our consumers in? Like a private cloud or private platform-as-a-service. Private Heroku or GAE. Is there some kind of software or software product with which we can do all of these things and thereby get scalability and fault tolerance over our consumers?

share|improve this question

3 Answers 3

up vote 1 down vote accepted

It really depends on your scaling requirements.

If you don't have excessive "quick-scale" needs (i.e. growth is small, you can predict when you will need a new box to handle load and have time to provision it), don't worry much about it. You can do pretty well with just a mechanism to provision servers automatically (i.e. Puppet), make sure all your underlying technologies are easily clustered if required, or easy to failover if they don't need to scale.

On the other hand, if that's not enough... you've got a problem. Building a true cloud is not trivial, and it requires a considerable amount of resources. There are solutions in this area- Eucalyptus and OpenStack come to mind.

Fortunately, nearly no one needs the latter. Please evaluate carefully whether you need a true cloud solution with automatic dynamic scaling- you probably don't. If you don't need it and mistakenly implement one, chances are you'll never reach your goal or you'll reach it with an incredible overhead over the non-dynamic solution.

In any case, on the more pure software-side of things, you have stuff such as Celery which implements this very nicely; writing code in a "taskful" fashion is pretty simple and painless.

share|improve this answer

Cloud service providers have started to address this concern. In particular, check out:

  1. Iron.io - They have a product called "IronWorker" which supports several languages
  2. heroku - They offer "worker dynos"
  3. Windows Azure - Their Cloud Services offering has web and worker processes
share|improve this answer

You may want to explore http://code.google.com/p/appscale as the platform (as in PaaS), and some EC2 implementation (as in IaaS) such as Eucalyptus (http://www.eucalyptus.com/).

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.