This was the question pointed right at me, while at a party, when I told a bunch of guys that I work on SharePoint solutions on cloud. It was an awkward situation to be in and somehow an image installation by Berndnaut flashed in front of my eyes.
They were not the guys with IT background or IT enthusiasts, but surely some who control the purse strings for their companies. I was not much worried about the question that they asked, but what lies deep inside the people today when they hear the word “Cloud” in terms of technology. Still the “C” word raises alarms in the IT departments. On the other end, every company worth its weight, is advertising their products to be in cloud or say they are cloud ready. But for most of us, cloud still remains a mystery. This post is my attempt to simplify and take away some halo around the cloud.
In today’s world, usually a person is introduced to cloud when they create an email account using some provider like Gmail. Email services are the best example of “SaaS” or Software-as-a-Service cloud computing. It is a custom software, hosted as a website and designed to be an interface to the traditional services like SMTP/POP/IMAP etc. Though you can most of the times use traditional email softwares/clients like Outlook, Thunderbird or Mac Mail etc. to interface with these services for free. Sometimes it is a paid one. E.g. Gmail provides you free access to your email through gmail.com (web interface) as well as from traditional desktop based email softwares. On the other side, services like Yahoo, you can use it through the web interface (mail.yahoo.com) for free but if you need to access your email from traditional email clients on your desktop/laptop, you need to upgrade to a paid service.
In effect, “SaaS” or Software-as-a-Service is where someone has created some software accessible over the internet (for free or for fee), it is multi-tenant and is scalable and maybe elastic also (remember, scalability IS NOT elasticity but more on that later).
Another major use/introduction to cloud is a lesser known variation called as “STaaS” or “Storage-as-a-Service”. Usually this is not introduced to you as a cloud service but as an add-on to another related services. E.g. when you sign up for Gmail, you get Google Drive. When you sign up for Hotmail/Outlook, you get Skydrive and with Apple devices, you get iCloud. But sometimes you may need some storage around to share or store your files and you use some storage service like Box.com or DropBox etc. These providers have a large size storage infrastructure with backup and other strategies like de-duplication etc. in place and then they rent out space to individuals and other companies to store and access their data. Usually these providers go for a subscription model where they rent out space in MBs/GBs for monthly or annual rent. Sometimes, some providers also charge for the upload/download bandwidth along with the space rent but which would also mean, you get priority bandwidth over other customer.
Then there are other companies where you host your website or web applications. These provider companies rent out some space on their servers and create a virtual instance for your website. Mostly, if it is a Linux/Unix server, you get Apache as the hosting server. If it is a Windows based server, you get IIS (Internet Information Services).
Effectively, these providers are hosting a number of sites on the same server with same platform (IIS or Apache). They are providing you a platform to host the website but NOT the website itself. You get your website or web application designed and coded from a consultant or a designer and upload it to the space/location provided by the platform hosting company. Godaddy is a good example of such provider. This kind of service is called “PasS” or “Platform-as-a-Service”. Personally I would not call them as proper cloud hosting as they still does not include scalability or elasticity. Once you have purchased some plan which ideally includes, some storage space, database usage, bandwidth etc. and these are rigid limits. You want more storage or more bandwidth, you more to a higher plan. You manually upgrade your account to a new plan, maybe also move your websites/applications manually (some providers may help out here but usually they don’t). Not a very effective way.
But in-case you want a true cloud based “PasS” or “Platform-as-a-Service”, you get a provider like Windows Azure where you can host websites and have then scale up/down them automatically as per requirements automatically. E.g. you can setup rules like if memory consumption for your application goes beyond a limit, spin off a new instance, effectively doubling your capacity almost instantly with zero downtime and zero manual intervention. If memory pressure drops down, kill the extra instance and go back to regular load, automatically with rules.
Now their is a major limitation with “PasS” or “Platform-as-a-Service”, that you do not have much control over the environment. E.g. you do not control, who are your neighbors. Which all websites are hosted on same server as yours. You are not allowed to have any software that needs changes at server level, e.g. if you want to use a particular library in your application which can only be installed by someone with server access or shell access, you are out-of-luck there.
It is like renting an apartment in a building. You are free to paint inside or furnish your apartment to your choice, but are not allowed to make any structural changes. You cannot just move a wall from here to there, just to get a better view of the garden. You cannot have any say in who is going to be in your next apartment or in the whole building. You can complain about any unruly neighbours, but not much. Now what if you need more control of your immediate environment? You want to move that wall? You want to rebuild your living space? Go and build a house, go and build your own building! Go and get a dedicated server!
Now what the hell is a dedicated server? Well, it is a machine sitting with the same provider in their own datacenter, but a whole server just for yourself. You are in control of what Operating system is installed, what other applications are installed and you manage the whole server. Just you do not maintain the network and hardware part. So your provider is providing you with the infrastructure to run your server but nothing more. This type of service is called as “IaaS” or “Infrastructure-as-a-service”. But with these providers (like your usual web hosting providers), mostly they are physical servers (now most of them are virtual machines) with some limits to them like you are still contained by the server hardware like memory or processors or storage. You just cannot say that I need 16GB more RAM for next 2 days because we are launching a new ad-campaign! Even when you are on virtual machines, still you are bound by the plans that you need to upgrade or swap.
So they are not a true-blue cloud services as they do not have scalability and elasticity built into them. Then you need a service like Windows Azure or Amazon or Rackspace etc. which provide your a scalable and elastic cloud service as “IaaS” or “Infrastructure-as-a-service”. There you get a virtual machine, you pay for storage for that machine and associated data disks AND for the compute resources utilized for running that machine. With most of these providers, you pay only when you are running the machine. E.g. if you create a virtual machine but shut it down, you will just be incurring the storage cost but not the computing costs. Thus saving money. Now how is spending money = saving money?
Let’s take an example, you are running a large business and your sales & marketing teams file their reports during last 3 days of every month. During that time, your website is 400-500% the average monthly load and need extra resources/servers to take care of that extra load. But only during those 3 days. Rest of the month you don’t need that much of extra resources. What would you do?
Taking our previous example forward, now you have move from a rented apartment to a rented 3 bedroom house. Your family is comfortable, you can fit in maybe a couple of friends also for a night if required. But what if 20 of your relatives happen to be in town for annual visit of 4 days and you have to provide accommodation and make sure you all stay together? Now for 4 days, you cannot move into a new bigger house. Can you?
But what if the landlord happens to be the owner of all the surrounding houses also, some of which happen to be empty and landlord is willing to rent you a huge 8 bedroom house for those 4 days? A win-win situation!
So you create a couple of more virtual machines and keep them turned off. When required, turn them on, finish your work and turn them off again. So effectively, you are just paying for the time when your machines were actually turned-on and consuming resources like memory or CPU cycles.
With “IaaS” cloud providers, you can scale your environment as required. You need extra RAM for a couple of days, great, login to your management portal, change the settings and boom you are having more memory in your server. When you are done with your work, you reduce it. Or just automate the process and keep manual intervention out of picture. You need more servers to serve your website, setup rules/scripts to spin-off new virtual machines and put them into load balancer when certain limits are hit e.g. your website is receiving a huge number of hits and turn-off the new machines when the load reduces.
So what is the conclusion? What is the service required for me? What should I use? IaaS, PaaS, STaaS or SaaS?
In my view, cloud is any service is that is scalable and maybe elastic and moves the burden of management of underlying stuff to someone else. Now how much control do you want to retain or give up, that would define what type of service your would require. Below given diagram gives you an overview of what you control and what the provider controls in particular type of service.
Woh! this has been a very long post, much longer that what I had previously anticipated! But hope it clears some confusion around the cloud buzzword and bring it into perspective. We all use cloud services in one way or other, but just get lost in the marking gimmicks and lingo.