Scaling your Database — Cloud Computing
There are many aspects of Cloud Computing, which every Architect should consider when designing the Cloud Architecture for their customers keeping Long Term Values as a Goal. Amazon Web Services (AWS) have identified as some of the Best Practices and core strategies for architecting systems in the Cloud.
In the following article, i have laid down the design principal of Scalability and Elasticity in respect of the Rational Database services.
A Good Architecture follows guided principals of Operational Efficiency, Security, Reliability, Performance Efficiency and Cost Optimization.
However, one should not be ignoring the import design principals such as Elasticity & Scalability.
Elasticity & Scalability often used interchangeably. However, they are not same when looking at the cloud computing. Both refers to an environment adaptability — to be able to expand and contract as required. As workload volumes increase this requires allocating and adding resources, and detaching or reallocating resources as the demand goes down.
Elasticity: taking a simple example of an elastic band, it expands when someone makes a pressure to it and always comes back to its original state when pressure is released.
If you notice, Expand and Release are the keywords from the above example.
Elasticity is the ability of a system to support increased workload by increasing the hardware or software resources dynamically.
Scalability: Is the ability of a system to handle the increased workload on its current hardware or software resources.
There are two types of scalability:
· Scale Vertically or Scale-Up — this type of scalability can work with any application to a limited degree. In an elastic environment, scaling up would be accomplished by moving the application to a bigger virtual machine or by resizing the VM.
· Scale Horizontally or Scale-out, by provisioning more instances of the application tiers on additional virtual machines and then dividing the load between them.
Horizontal scaling is similar to elasticity (Please read this multiple times)!!
Now, I will be putting across the Elasticity and Scalability principal in context with AWS RDS Service. RDS is a hosted rational database service that provides access to the database server but not the underlying hosted infrastructure.
Elasticity and Scalability principal of RDS Includes:
· Scale I/O performance by increasing the number of IOPS to the database storage
· Scale by Specifying the instance size which will change without downtime if Multi-AZ is enabled
· Utilize read replicas by offloading read only requests from the primary database to an asynchronously replicated read replica
· Advanced configuration includes partitioning or sharding to distribute the workload over multiple database instances
Conclusion: We have seen that lot of times we are reactive with our strategy rather than as a proactive needs when it comes to designing a software application. When we design and implement a software component, we should always have in mind the future income load to the application as scalability and elasticity. Application cannot selfheal on its own until the right design principals are not followed.
Reducing the response time can be achieved by Scaling Vertically (by increasing the IOPS or increasing the instance size, which actually means increasing the existing hardware capacity.) and horizontally (distributing the load to multiple instances).
Cloud Computing is an enabler, which comes up with the agility and enable you to pay for what you use. So designing the basic design principals of scaling and elasticity is equally important for a design to be considered when you are designing your application.