Recently I started reading Cloud design patterns. Any cloud based system will be presented with many challenges. I am trying to put my understanding on these challenges and patterns or practices available to handle these.
What is Cloud/cloud computing? It storing, accessing and running programs over internet. Means these are not run in your computer or premises.
When you run programs over internet, challenge is to make system available (Availability) all the time. System should function irrespective of errors, milicious attacks and load.
Another challenge is Data Management. In any clouds system data is maintained in multiple locations or multiple servers to achieve better performance, scalability and availability. as data is maintained in multiple locations or serves this need to be kept consistent.
To avoid total cost and impact on quality, important factor in any cloud design is Design and Implementation. It is important to consider consistency, maintainability and reusability while designing Cloud systems.
Because of distributed nature of cloud application, it is important to consider Messaging to connect components and services. However, with messaging infrastructure also comes up with certain challenges such as ordering of messages, poison message etc.
As mentioned earlier in this post, Cloud applications run on a remote server, which makes it complex to monitor and control applications. Challenge is to expose runtime information to administrator so that we can manage, monitor and control applications without stopping or redeploying.
Another key aspect of cloud applications is Performance & Scalability. Performance is responsive ness of the system to execute any action in giving time and scalability is ability of the system to handle increase in load. Cloud application experience variable workloads and they should be ready to scale in and scale out based on demand. This can also impact data storage and messaging infrastructures.
Resiliency is the ability to gracefully handle and recover from
failures. Cloud applications often use shared platform services or can be deployed into multi-tenant environments where applications compete for resources like bandwidth, IO and memory. Detecting and recovering from such failures efficiently is necessary.
Finally, challenge is to manage Security. It is the capability of the system to prevent malicious actions outside of the design to prevent loss of information. As cloud applications are exposed on internet, at most care need to be taken to avoid attacks from untrusted users.
All the challenges mentioned in this article can be addressed by following best practices in the industry. There are many design patterns defined under each category/challenge to address such problems.