Azure Application Architecture Guide
This guide presents a structured approach for designing applications on Azure that are scalable, resilient, and highly available. It is based on proven practices that we have learned from customer engagements.
The cloud is changing how applications are designed. Instead of monoliths, applications are decomposed into smaller, decentralized services. These services communicate through APIs or by using asynchronous messaging or eventing. Applications scale horizontally, adding new instances as demand requires.
These trends bring new challenges. Application state is distributed. Operations are done in parallel and asynchronously. Applications must be resilient when failures occur. Deployments must be automated and predictable. Monitoring and telemetry are critical for gaining insight into the system. This guide is designed to help you navigate these changes.
|Traditional on-premises||Modern cloud|
Designed for predictable scalability
Design to avoid failures (MTBF)
Occasional large updates
Designed for elastic scale
Polyglot persistence (mix of storage technologies)
Design for failure (MTTR)
Frequent small updates
How this guide is structured
The Azure Application Architecture Guide is organized as a series of steps, from the architecture and design to implementation. For each step, there is supporting guidance that will help you with the design of your application architecture.
The first decision point is the most fundamental. What kind of architecture are you building? It might be a microservices architecture, a more traditional N-tier application, or a big data solution. We have identified several distinct architecture styles. There are benefits and challenges to each.
Learn more: Architecture styles
Knowing the type of architecture you are building, now you can start to choose the main technology pieces for the architecture. The following technology choices are critical:
Compute refers to the hosting model for the computing resources that your applications run on. For more information, see Choose a compute service.
Data stores include databases but also storage for message queues, caches, logs, and anything else that an application might persist to storage. For more information, see Choose a data store.
Messaging technologies enable asynchronous messages between components of the system. For more information, see Choose a messaging service.
You will probably have to make additional technology choices along the way, but these three elements (compute, data, and messaging) are central to most cloud applications and will determine many aspects of your design.
Design the architecture
Once you have chosen the architecture style and the major technology components, you are ready to tackle the specific design of your application. Every application is different, but the following resources can help you along the way:
Depending on your scenario, one of our reference architectures may be a good starting point. Each reference architecture includes recommended practices, along with considerations for scalability, availability, security, resilience, and other aspects of the design. Most also include a deployable solution or reference implementation.
We have identified 10 high-level design principles that will make your application more scalable, resilient, and manageable. These design principles apply to any architecture style. Throughout the design process, keep these 10 high-level design principles in mind. For more information, see Design principles.
Software design patterns are repeatable patterns that are proven to solve specific problems. Our catalog of Cloud design patterns addresses specific challenges in distributed systems. They address aspects such as availability, resiliency, performance, and security. You can find our catalog of design patterns here.
Our best practices articles cover various design considerations including API design, autoscaling, data partitioning, caching, and so forth. Review these and apply the best practices that are appropriate for your application.
A successful cloud application will focus on five pillars of software quality: Cost, DevOps, resiliency, scalability, and security.
|Cost||Managing costs to maximize the value delivered.|
|DevOps||Operations processes that keep a system running in production.|
|Resiliency||The ability of a system to recover from failures and continue to function.|
|Scalability||The ability of a system to adapt to changes in load.|
|Security||Protecting applications and data from threats.|
Use the Microsoft Azure Well-Architected Framework to assess your architecture across these five pillars.