Cloud Computing Architecture
In my previous article, we discussed what cloud computing is all about. It is the ability to hire a virtual server, install software on it, turn it on and off at will, or clone it loads of times to meet a sudden workload demand. Now given that you have basic idea of what cloud computing is, it’s time to go into depth of cloud computing and its architecture. Cloud computing is a logical extension of virtualization. So in order to understand cloud properly, let us start with overview of Virtualization. Virtualization provides flexibility such that software stacks can be deployed or re-deployed independent of physical sever through hardware abstraction. With virtualization, dynamic datacenter provides a pool of resources that are utilized as needed, and the applications’ relationship to compute, storage, and network resources changes dynamically in order to meet workload and demands. As the application deployment is decoupled from server deployment, applications gets deployed and scaled rapidly, without need of physical server procurement. A virtual appliance is a virtual machine image designed to run on a virtualization platform like Web or database server, further enhance the ability to create and deploy applications rapidly. The mixture of virtual machines and appliances as standard deployment objects is one of the pillar of cloud computing.
But running your applications on virtual machine does not mean you are on cloud. Yes, you are on the path to cloud computing but that is not all of it. Cloud computing extends virtualization trend through automation. Cloud allows you to choose which resources you want to use for application deployment and provides a web interface or API to create virtual machines and establish network relationships between them. So instead of entering into a long-term, tedious contract for services with an IT organization or a service provider, you can choose to be billed by resource consumption: CPU hours, data transfer volumes, or storage gigabytes.
By paying for only those resources you used, you are shifting the risk of infrastructure purchase to the cloud provider. In past, architects were responsible for defining how the various components of an application would be laid out onto a set of servers, how they would be interconnected, secured, managed and scaled. Now, cloud provider’s API eliminates need of architect by allowing developer to create an application’s initial composition onto virtual machines and its scaling and workload management too.
Now, let us check how a 2-tier Web Application can be deployed in cloud.
- From a library of preconfigured virtual machine images, choose a load balancer, web server, and database server appliances. Appliances can be created by layering software (SQL Server for example) into a virtual machine image and performing customizations required for deployment.
- To make custom image, configure load balancer; populate web server with its static content by uploading it to the storage cloud; and populate database server appliances with dynamic content for the site.
- Layer the custom code into the new architecture, making the components meet specific application requirements.
Choose a pattern that takes the images for each layer and deploys them, handling networking, security, and scalability issues.
- Now the application is up and running on cloud. In case of any update, entire infrastructure can be redeployed by making virtual machine images updated, versioned, and copied across the development-test-production chain.
We can say that Cloud computing is a shift from Vertical Scaling to Horizontal Scaling of resources. In the past, vertical scaling/up scaling was used to handle larger workloads. It involves addition of CPUs or memory to a single computer to handle more traffic. Database server is scaled up to increase throughput.
With cloud computing, application gets huge advantage of horizontal scalability. As most cloud platforms are built on a virtual pool of server resources, if any one physical server fails, the virtual machines that it was hosting are shifted on a different physical server.
Now let’s see how horizontal scaling applies to database in cloud. To run Database management systems in cloud environment, it requires horizontally scaled database servers and partitioning tables across them. This technique, known as database sharding, allows multiple instances of database software like SQL Server to run for performance scaling in a cloud environment. Rather than accessing a single, central database, applications now have to access only that shard/partition which contains desired data.
Cloud supports CPU-concentrated processing. That means applications performing frame rendering activities are designed so that, separate virtual machine renders each frame rather than creating a new thread for each frame, increasing performance through horizontal scaling.
Finally, Cloud is a loosely coupled, stateless, fail-in place computing. If a virtual machine fails, the application should not be interrupted. Coupling between application components requires being loose so that a failure of any component does not affect overall application availability. A component should be able to “fail in place” without any impact on the application.
As application components are temporary, data contained by them should be application instance specific. Applications should be made as stateless as possible separating processing and data.
For the cloud to function properly, even the hardware should be stateless. Hardware configurations should be stored in metadata to restore configurations in the event of a failure.
Cloud architecture should be composable and refactored to make the most use of standard components to reap the benefits of cloud computing. For an enterprise shifting or planning to shift to cloud computing should consider standards while choosing the type of virtual machine, the operating system in standard virtual machine images, tools, and programming languages supported.
Please continue reading more on cloud computing at www.tatvasoft.com