how to go about scaling a web-application?

Do you know where your first bottleneck is? If not, how did you laid out the order of things to do?

That said, if you haven't done anything terribly wrong in your app the first limit you'll probably hit will be disk I/O caused by the db and your strategy will probably be a good choice.

Moving the db to another physical disk should help a lot and be your first thing to do. As an example, depending on the systems you're using there could be no difference or a big difference between using a second disk on the current host or moving to an entirely separated server. You're running on VPSes, if you're disk I/O bound moving to a second VPS won't probably help much if it happens to use the same storage (same disk or same SAN or whatever) - but this last one is an issue that should be addressed by your vps provider.


I'd recommend reading Scalable Internet Architectures by Theo Schlossnagle. The book describes all of the theory and practice of scaling applications between servers, ensuring no single points of failure, scaling databases, etc.

Your plan does sound like the first progression of scaling though. Usually everything starts on one server, then you split web and database, then add a reverse proxy or load balancer and run multiple web servers, and so on.


You can't improve what you don't measure. First you should see what your bottleneck is. You can use atop now, and set up some kind of monitoring if you haven't already. If everything is running well, you can generate realistic load using JMeter.

Here is some more perspective on the infrastructure to build around your Django app.