Cloud Computing
What is the cloud ?The cloud is a widely used term and mean different things to different people. To us it means a vast I.T.infrastructure that spans geographic locations, it offers a huge amount of computing power with large scale redundancy. Its the kind of datacenter infrastructure that Google and Amazon use and represents serious investment. You may have heard of this referred to as "Grid computing".
Its called the cloud because we don't need to know where the servers are or exactly how the network is put together, no single node should cause failure
and the data is replicated across the cloud to ensure its always available. Its a fuzzy space where computing happens.
Who is providing cloud services ?
Virtualisation has modified the datacenter radically. Virtualisation is where you take a set of servers and storage and run multiple virtual servers on them. You may have one server running five virtual machines all of which contain different operating systems so its like having five physical machines.
Most server resource is under used so virtaulisation is not only efficient commercially but also greener (most the time). With very clever virtualisation technology you can remove and add hardware
without loosing the virtual servers - so they can run even when hardware is failing.
There are several companies offering grid/cloud style services but the two that interest us are Google and Amazon. Google have their App Engine and Amazon have their Web Services. The Google solution is great but you are confined to certain programming languages and storage mechanisms. Its incredibly flexible since it can scale itself. No matter how much load you chuck at the application , the App Engine, will scale dynamically as needed. Given that Google's reliability is so good that people use the Google home page to check the Internet is "working" you can probably feel in safe hands. Unfortunately is too constrictive right now for what we need
Amazon's Web Services are a set of tools that are staggeringly good. Amazon have a huge infrastructure and spare resource, using their web services you can use it. There are two keys parts one is S3 and the other EC2.
S3 is a storage solution - you can upload data to it and know its safe in the cloud were its replicated and backed up so always available. It provides near limitless storage to any Internet connected device.
EC2 is our main focus it allows you to run virtual servers of different specifications in different locations and the best bit - its pay as you use.
What are the challenges when deploying a web application?
Its all about uptime. Creating a reliable service is something that starts with the software. It goes without saying that the application itself must be robust this is
something that is in our control; its our fault when the application trips over itself. The next consideration is the software that runs the application including the Operating System. Our services are all deployed on linux and the variety of different configuration options and versions is incredible.
Once the software is sorted you need to make sure that your hardware is going offer some redundancy and gauge the kind of power you need. This is a difficult decision to make and a very commercial one too. You need to plan for the applications needs with regard to system resource as well as factoring in the future load and spike points. The business plan of the client may give you some indications but in the modern web culture the server load can spike hugely when a big name pick up on it.
One of our clients recently had a BBC news story which brought 1000 times the number of traffic to the site. These things can be planned for if you know they are going to happen but what happens when you get reviewed without your knowledge on a popular blog - you can be inundated with visitors. Fortunately web servers are powerful things and our apps are delivered to handle a lot of volume but there is always a fundamental hardware limit. The server will need to contain redundancy feature like raid. You may need more than one server to host the application ( one for the database and one for the application )
The next step is planning the hosting environment. Do you need multiple locations geographically disparate? This is usually a question of what the client is willing to pay. Of course anyone would like to have their software running in two completely different locations, in case of force majure, but realistically can you afford it ? Can you afford not to ? The backup strategy is crucial too.
Ok so these are the major questions there is one more thing to note and that is lead time for deployment. Typically it can take a good few days to get a server ordered up, provisioned, installed to you spec, configured and tested.
How does the cloud help ?
EC2 allows us to create a virtual server image. We configure the image to run the exact version of linux we prefer with our tried and tested configurations for the app server.
It allows us to create a copy of this image and save it into S3 for future reference. Once we have an image we can launch an instance is anyone of three different geographic locations within 10 minutes. We can assign storage (up to 1TB at a go) to the server and set that storage to be backed up into s3 in a few button clicks.
Once we have our server running we can choose to redeploy it on a larger more powerful instance withing minutes. So increasing the capacity is easy. With the right architecture you can add load balancing and more servers as and when you need.
So if we have a upcoming campaign then no problem we just provision more server resource and pay as we use ! Its so quick to deploy that we can react quickly to organic visitor spikes.
Cloud services are better they are the future and allow the flexibility to offer huge enterprise scale resource to the smallest of budgets.
