Learning from running our SaaS online collaboration service, Mithi SkyConnect, from a single server to a multi-server, multi-location set-up, we’ve come long way in handling high volume email services, but the increasing sophistication of the service, rapid growth in traffic and speed at which we need to provision for new users has made it necessary to consider a cloud based platform such as Amazon Web Services and have been working on the new architecture and design for the setup. Via this post, I would like to share some clarity that emerged during this journey and discussions, about what really is a cloud platform and where does it fit in the stack. If the meaning of cloud computing/platform in your mind is as nebulous as a rain cloud is, please do read on.
Hosting an application for consumption by users:
We are all reading this since we have the need to host (or are already hosting ) applications in a SaaS (software as a service model) model for consumption by end users. Thus end users will connect and consume the service (typically using a browser or a specialised application on their device) via the Internet or a private network – Client Server topology.
Consider the following basic requirements for any Application hosting environment:
- Provisioning Server/Compute instances as required
- Provisioning Storage and Backup objects as required
- Networking the objects together for inter-connectedness
- Provisioning for Bandwidth as required
- Deploying the application on the platform
- Planning for High availability on site and off site
- Planning for temporary bursts/spurts in usage
- Planning for scale up or scale out as required
- Setting up maintenance and monitoring procedures and automation.
The Stack of a SaaS application in a traditional hosting environment:
You would need a good team to deploy, manage and maintain the bare metal infrastructure using tools like Virtualisation, SDS, automation of processes, etc so that you can get a reliable hosting platform and can get the most performance out of it. These would constitute provisioning, scaling, troubleshooting, etc at the infrastructure layer.
Enter “Cloud”: The Stack of a SaaS application in a cloud environment
The cloud platform has taken over the provisioning, management, scaling out of compute objects and has left your team to operate at a higher level, at the level of the solution architecture. A good Cloud platform typically provides a unified console to manage objects like server instances, storage drives, load balancers, templates to setup the architecture, out of the box services, tools to manage and monitor the infrastructure, and lots more.
In essence a good cloud platform is a software, that sits over the bare metal objects like Servers, Networks, Disks, etc to provide “out-of-the box” services, and “reliable and elastic” objects, which can be used to host the application. Typically a cloud platform will provide you a single interface to manage the server and setup instances, storage elements, services, across multiple sites and will automatically handle the scaling and availability requirements of the application, without needing human intervention in most cases.
So another way to look at it is:
User <–> Uses Applications <–> Running off a Software Platform <–> Hosted on a cloud platform <–> Running on a bare metal infrastructure.
Introducing the cloud platform in between the software platform and the bare metal infra is critical to allow us to scale the performance with ease and reliability and also leverage services from that layer for providing additional end user functionality like bulk mail, cloud based backups, end point backups or anything else.
Thus your strategy would be to introduce this layer between your application and the bare metal.
And the good news is that you don’t have to develop this yourself. In fact you have to guard against doing this. Its similar to writing code when you can buy a component or incorporate an open source component. Just like we don’t build hardware or switches.
Using this approach frees up resources to now work on the software application to deliver value to the end users…today you may be locked up monitoring hardware, setting up machines when needed, worrying about storage and its scalibility and reliability…a lot of thinking is locked up one step below where it should ideally be.
So NOW we don’t have worry about
- Adding more servers as load grows…its automatic scale out and scale in
- Adding more storage as we need more (on demand)…its automatic.
- Having a cap on our bandwidth…it bursts on demand
- Reliability of the machines and storage…there is built in redundancy
- Paying for capacity we don’t use…pay per use
- Planning for capacity in future…its elastic.
and several more…
One key word in any cloud platform is “elastic”. Scale up or down, manually or automatically, vertically or horizontally.
All we need to do is to design the architecture, which will leverage the elasticity of the cloud platform….the components and their placements and their connections….isn’t that our competence as application developers?
Focus on what you are good at!!