Scaling With Amazon EC2

For my next web application I am using Amazon EC2 Cloud infrastructure for hosting.  This is going to be by far the most demanding web application in terms of memory, processing and disk requirements I have ever launched and so it requires a scalable system to run on.  One of the frustrations I’ve had with shared hosting is the limited memory resources.  On a number of occasions my applications have been killed for going over the memory limits leaving my sites unreachable for hours before I realize and can restart processes.

I have been toying with Amazon EC2 for the last few days and it’s pretty fun to spin up different boxes and play around with them for a few pennies.  With the new micro instances going for about $15/month it’s actually very competitive with the price of a shared hosting service but with much more flexibility.

It’s pretty cool to have a server running in the cloud 24/7.  I can ssh into it, use VIM, git, mercurial to pull and edit my code.  I can easily manage the Ubuntu server the same way I would with my desktop, full root access to install packages makes things simple. Not having to worry about the peculiarities of shared systems or locked down web interfaces for installing apps is refreshing.  Having direct access to tweak the apache and PostgreSQL config files makes things much more familiar to me.  It makes it much easier to keep my development environment similar to my production environment.

As things grow it won’t be hard to split off database servers and add in load balancing.  Without the upfront costs of server hardware, and without the restrictions of shared hosting.