Introduction
Almost all new applications are being hosted on Cloud. You save so much capital and operational expenses when you deploy your application on the cloud. You don't need to worry about Infrastructure Provisioning and Maintenance, as well as architectural concerns like Availability, Reliability, Scalability, and much more. However, you need to design your application right so that it works well in the Cloud and adapts to the Cloud environment.
At times, we have seen that applications deployed on the Cloud get costly. They do not perform as expected. We see other architectural issues for the hosted application. We get these issues because we have not designed our Cloud application properly. We missed designing our application from the Cloud perspective and have not considered all the Cloud best practices and guidelines while building and designing the applications.
Each of the public Cloud providers has its own best practices and design guidelines. Some of these design guidelines are common to all the Cloud providers, and some are native to the Cloud environment. Microsoft has come up with design tenets that you should take care of while building architecture for your Cloud application targeted on Azure.
The following are the fundamental principles for a well-architected Microsoft Framework:
- Cost Optimization
- Operational Excellence
- Performance Efficiency
- Reliability
- Security
Let us explore all these principles at a very high level.
Cost Optimization
Cost planning is the most important aspect while designing a Cloud-based application. You should take the incremental approach of Build-Measure-Learn, where you should figure out the ideal set of infrastructure needed to run your application on Azure. You should first build your Cloud application and keep monitoring the infrastructure need. If you need additional infrastructure, then you should be flexible enough to scale out and provision additional infrastructure and compute capacity. Follow the pay-as-you-go model for your infrastructure instead of investing a considerable amount of money for infrastructure in the first application version. Consider leveraging the Azure Cost Calculator to calculate the right capital and operation cost for your Azure application.
Operational Excellence
The operational activities to keep your application up and running in the Cloud is highly crucial. You should be able to automate deployments to the Cloud and avoid deploying manually. Automated deployments would save time and reduce deployment errors. Your deployments should be fast and reliable and should minimize application downtime to zero or minimum. Make sure that you should be able to roll back your application in time in case the deployment fails, or the application has issues.
You should be able to monitor and diagnose application performance and issues on the Cloud with ease. Enterprise applications use a large number of Azure Services and infrastructure. It gets challenging to get into each of these services and analyze their logs. You should be able to redirect the logs for each of these services to a single location. Each of these logs generated should follow a specific schema so that you can identify their source and analyze them with each. These logs should be queryable. All the Services in your application should be observable, and you should be able to correlate the events for each of these services. Configure alerts for your Performance Metrics and Logs.
Performance Efficiency
Your application running on the Cloud should be highly scalable and performant. The Cloud environment facilitates your application to scale horizontally or vertically. In the case of vertical scaling, we scale up the computing capacity of the existing hosting infrastructure by adding new RAM or CPU or other resources to the infrastructure.
However, we cannot scale up and keep adding compute resources always. At some point in time, we hit a limit, and the system gets no more scalable beyond that limit. In the case of horizontal scaling, we keep adding new instances for the hosting services and infrastructure. Horizontal scaling is highly flexible and can be automated based on the performance criteria. If the incoming traffic increases, then the underlying Azure platform keeps adding new instances that can serve the traffic. When the traffic decreases, the underlying platform decommissions the additional instances. It would be best if you considered PaaS or Serverless services to host your applications as they support horizontal scaling to a greater extent as compared to the IaaS based services.
However, when you scale your application horizontally, you shift the performance bottleneck to another area or component. For example, you have hosted your application on an Azure Web App, and the application running inside the Azure Web App connects with a Database hosted on Virtual Machine. In such a scenario, when you implement Horizontal scaling for your Web App, the application hosted on Web App becomes performant. However, the Database hosted on the Virtual Machine fails to process the large number of concurrent requests coming from the Web App. The Virtual Machine hosting the Database should also scale and manage the incoming traffic. To sum up, you should be able to identify all the performance bottlenecks across each of the components in your design and address the scaling needs for each of the components so that the entire application is highly scalable.
Reliability
Your application should highly available and resilient. Whenever the end-users access the application, it should be available and ready to serve their requests without fail. The application should be resilient enough to come back from failures and start working as expected. You should figure out the level of availability expected from your application and add that as a crucial Non-Functional requirement for the application. You should follow the Azure design patterns for Reliability and bake in resiliency and availability in your application and make the application reliable.
Security
Your application running on Azure should be highly secured. You should integrate your application with Azure Active Directory. Consider baking in best security guidelines in your application like keeping the application secrets, certificates, connection strings, and keys from Azure Key Vault. Make sure you address the security concerns like CSRF attacks, SQL injections, etc. Consider using SSL for your application. Secure your data in rest and data in transit. Audit your infrastructure for security at regular intervals and address the vulnerabilities found. Encrypt your data and network traffic as much as possible.
Conclusion
Follow the tenets listed in the Azure Well-Architected Framework to build a highly robust, scalable, cost-effective, scalable, available, and secured application on Azure. In this article, we explored each of these tenets at a very high level. We will dive deep into each of these Tenets and other Azure Architecture areas in my upcoming articles.