June 15, 2017
Cloud computing will soon be a norm for hosting software applications catering to a variety of use-cases in different verticals. Cloud Computing refers to Internet-based services that provide access to managed IT resources; these resources are managed by experts and are available on-demand on a pay-per-use model. This enables the application developers to focus on the use-case and come up with an MVP (minimum viable product) in a shorter period.
This paper discusses some of the best practices to be following for building cloud-ready software applications that can make effective use of services offered by the cloud computing environment.
Some of the key areas for considerations are discussed in the following sub-sections:
Make sure the infrastructure used on the cloud for deployment is appropriate for your applications. It should neither be over-utilization nor under-utilization. For eg., Cloud Instance or virtual machine having 1 Core/2 GB RAM would be sufficient to deploy a simple web app with a limited number of requests whereas a large enterprise should consider using an instance with a higher configuration. Similarly, it applies to other services used in the cloud.
You can start with a similar instance configuration as configured on your on-premises server to ensure that services are not overutilized and performance is not degraded. As demand grows, the instance size can be modified on the cloud at run time as well.
Almost every cloud vendor provides services to auto-scale your application up or down depending on the number of user requests. So, while moving to the cloud, it is important to use these services to achieve benefits in terms of high availability, reduced operational effort, and costs, on-demand provisioning, and automation.
For e.g., in AWS cloud (https://aws.amazon.com/autoscaling/), you can create an AMI (Amazon Machine Image) from a single instance and then configure Auto Scaling feature to add new instances in case CPU Utilization or any other parameter reaches a threshold (say 80%). Similarly, we can configure it to remove one instance if CPU Utilization is below some threshold (say 10%).
You can configure the minimum and a maximum number of instances in the auto-scaling feature. The minimum number of instances should be the number that is needed during normal load hours whereas the maximum should be the number of instances needed during peak load hours (say during festival time/weekends or any event). Configuring the minimum number of instances in the auto-scaling group makes the solution resilient to failure as the cloud resource management typically supports relaunch & restart in event of failure.
Below are some points that are important to take care of in the application engineering stage before moving to the cloud:
The application might require re-architecture to support high availability and scalable design and integrate other cloud services.
While moving your data to the cloud, it is important to explore various storage options provided by the cloud to match the best fit for your type of data in terms of durability, cost, latency, performance (response time), cache-ability etc. Some example of the types of storage and the option provided in cloud are listed below (considering AWS as vendor)
When it comes to the actual deployment of the application, the following points should be kept in mind.
Cloud deployment vendors like AWS provide tools to collect and track metrics (like CPU Utilization, Network I/O, Network Packets In/Out, Disk Read/Write Bytes etc.) from instances in real time, collect and monitor your application log files, set alarms and automatically react to such alarms. You can use these tools to gain system-wide visibility into resource utilization, application performance, and application health.
For e.g., you can implement telemetry in your cloud applications to measure the performance of the application and configure this with Cloud service to track your log files and raise alarm via SMS/Email notifications in case performance value has decreased. You can even configure events so that when the alarm is raised, a new instance is launched and used in real time.
This is an important step while migrating to cloud. Cloud vendors generally provide a shared responsibility model for security. There are certain tasks that you are responsible for implementing security for your application in the cloud (the cloud vendors provide the necessary tools to configure the same). For e.g.
After re-engineering of your application, it is important to verify the functionality of same. A separate QA or test environment should be created on the cloud which will be the replica of the production environment.
All functional and performance test suite should be executed and pass successfully on the QA environment (on the cloud) before releasing to live environment.
It’s important to configure backup and DR approaches while moving to the cloud to ensure data is continually protected and prepare us for worst possible events when they occur.
RTO refers to the amount of time required to return your business to normal operating levels, and RPO refers to the amount of time it will take to recover all your data
Depending upon your RTO and RPO objectives, there are different solutions that Cloud Vendor services can provide. For e.g. asynchronous backup of your data to S3 in AWS, snapshots, multi-site solutions etc.