Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I know next to nothing about having more than one server work together. Right now I've been playing around with the cloud servers offering from rackspace.

All the time when people talk about these types of "cloud" servers, they make it sound like it's so easy to scale. Now it is easy to scale vertically. But I'm talking horizontally. I know with cloud servers you can save the image of your server and spin up a new server with exactly the same image. How do you make use of having more than one server? How do you insure database integrity in you application? People make it sound so simple and like you can just add a couple here and take a couple there.

Also, with cloud servers you can scale from 256mb to around 16gb. At what point is it better to scale horizontally rather than vertically? I'd imagine there's one bottleneck would be the disk, and scaling horizontally would be better so you could have more disks. But maybe I'm wrong and you're supposed to scale vertically all the way and then horizontally?

share|improve this question
up vote 1 down vote accepted

You don't say anywhere the nature of your application, but I'll guess it's a database-backed website.

To get the easiest horizontal scalability, you need to develop with 'shared nothing' in mind. That means that all the content and state of the app must either be static (icons, JS, HTML, templates, such), or external to your application (usually database, storage if you manage user files).

to get there, first separate in 'tiers': the backend storage, the middle (web app), the frontend (ideally just a load balancer)

If you get this right, you can add as much webapp servers as you want hitting the same database server. Of course, after a point, the database will become the bottleneck. A well-designed app should use a fast cache to avoid hitting the DB unless necessary. memcached is great here, because you can add an instance to each webapp server while still holding a unified set of key/value pairs. That buys you a lot of scalability.

share|improve this answer

Your Answer


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.