Application design for cloud infrastructure needs some key considerations to leverage the advantages provided by cloud. In the traditional systems applications were designed with consideration of limited resources. But in the cloud applications can take advantage of almost unlimited resources and architects need to consider this change while architecting applications on cloud.
Seven key points architect need to consider for application design on cloud.
- Handle failure as an event and not as exception: In the traditional systems failure was handled as an exception and on the occurrence of failure system was designed to gracefully exit. This was primarily due to the lack of resources. On the cloud infrastructure, design the application to handle failure as an event. Design application not to exit on failure but take advantage of cloud infrastructure to provision new resources and switch over in the event of failure.
- Log everything: Logs are very useful to collect data from every event on the system. In the traditional systems we used to restrict logs due to lack of resources. On the cloud log all the system / user events, this will translate into a large amount of data which will be helpful for business insights and application maintenance.
- Identify and remove single point of failures: The single point of failure means the system components in the architecture which has no automated fallback in place i.e. if that component fails, system will break. The architects need to identify if any single point of failures is in the system and remove single point of failures by creating automated fallback for those components in the system. This will result in a high available and resilient system.
- User data should be stored in distributed environment: The user data should be stored in the distributed environment with redundancy in different seismic zones. This can be achieved either by designing redundant file systems through software RAID /LVM / NFS on cloud or by using data storage services provided by the cloud service providers such as Simple Storage Service (S3) by Amazon Web Services.
- Deployment should be a continuous process: Business needs a very agile system with quick incremental deployments to handle continuous changing requirements. The system should be architected in such a way that continuous deployment is possible from testing to staging and then staging to production. The applications should be designed in a modular way so that continuous deployment is possible.
- Use smaller units to scale up: Application should be designed such that smaller units of compute can be used for scaling up and down. The performance of application and compute unit requirements should be monitored and optimized. The sessions should be stored in the database to take advantage auto scaling without loss of sessions. These design consideration will give you more control on the granularity of scaling up and down.
- Design database in modular distributed fashion: The database should be designed in modular distributed fashion. The data base performance can be bottle neck beyond the application scale up and out .To improve the read performance use read only replica with load balancing and or cache in memory. To improve the write performance use database horizontal partitioning and distributed write process.
We at BlazeClan are continuously analyzing architectures and working to improve the design patterns best suited for the cloud.