So, I’ve been doing some work with Amazon Web Services (AWS) recently and It’s been an interesting experience so far.
Until recently, I’ve been mostly resistant to using hardware virtualization for web applications. Most of my early career has been focused on squeezing the most performance out of physical servers, and adding another layer of software on top of that didn’t make sense to me.
Hardware has come a long way since then, modern CPUs now have hardware-assisted virtualization technology, and the software has become much smaller and more transparent. Scaling large web services nowadays is mostly focused on distributing demand across many small, individual servers. Cloud platforms, such as AWS, lends itself nicely to this paradigm.
To me, the strangest thing about Amazon’s Elastic Cloud Computer (EC2) is that the servers, and all the data on them, are temporary (they even charged by the hour!). You have a fully functional (virtual) server: RAM, CPU, disks and all, that come into existence and disappear with a few clicks of a mouse, and a few pennies on the dollar.
Software development has to be approached quite differently because AWS is not just virtual servers, it’s a complete ‘Cloud Environment’: persistant data can be stored in a ‘bucket’, using the Simple Storage Service (S3) or on a sort of virtual, external hard drive called Elastic Block Store (EBS). If you need to handle extra traffic, you can program in some logic to spin up more servers, and even load balance the requests. There’s even a turnkey MySQL solution called Relational Database Service (RDS).
It’s quite nice not having to think about hardware (and the cost), and be able to focus more on creating software. On the other hand, parts of software may have to be rewritten specifically for the AWS platform, making it difficult if you ever want to return to a more traditional environment.
Overall, I think the future of the internet is cloudy …