Documentation: Application Architecture

This document provides further details and context for the Application Architecture section of the Azure Digital Natives Guide.

  • Choose the right Azure compute service

  • Why: Azure offers multiple compute services, each suited to different application patterns and operational requirements. Choosing the wrong service can result in over-engineering, excessive costs, or insufficient capability as your application scales.
  • How: Use Azure App Service for PaaS web applications and APIs where you want a fully managed platform with built-in deployment, scaling, and patching. Use Azure Container Apps for serverless container workloads that need Dapr integration, KEDA-driven scaling, or microservice architectures without managing Kubernetes. Use Azure Functions for event-driven, short-lived compute tasks such as processing queue messages, timers, or webhooks. Use Azure Kubernetes Service (AKS) when you need full Kubernetes orchestration, custom networking, or fine-grained control over your container infrastructure. Consult the Azure compute decision tree to validate your choice.
  • Resources:
  • Design for resilience with retry patterns and circuit breakers

  • Why: Cloud applications depend on distributed services that can experience transient faults—temporary network glitches, throttled requests, or brief service unavailability. Without proper fault handling, a single transient failure can cascade into a complete application outage.
  • How: Implement retry policies with exponential backoff for all calls to external services and Azure resources. Use the circuit breaker pattern to stop calling a failing dependency after a threshold of errors, giving it time to recover. Implement bulkhead isolation to prevent failures in one component from consuming all resources. Consider using libraries like Polly (.NET) or resilience4j (Java) that provide these patterns out of the box.
  • Resources:
  • Implement API management for your services

  • Why: As your application grows into multiple services exposing APIs, you need a centralized gateway to enforce consistent authentication, rate limiting, versioning, and monitoring. Without API management, each service must implement these cross-cutting concerns independently, leading to inconsistency and duplicated effort.
  • How: Deploy Azure API Management as a gateway in front of your backend APIs. Configure policies for rate limiting, request validation, and response caching. Use API Management’s built-in OAuth 2.0 and OpenID Connect integration for authentication. Implement API versioning strategies to manage breaking changes. Use the developer portal to publish API documentation for internal and external consumers.
  • Resources:
  • Use asynchronous messaging for loosely coupled architectures

  • Why: Synchronous, point-to-point communication between services creates tight coupling—if one service is slow or unavailable, all dependent services are affected. Asynchronous messaging decouples services so they can operate independently, improving resilience, scalability, and the ability to evolve services independently.
  • How: Use Azure Service Bus for enterprise messaging scenarios requiring guaranteed delivery, FIFO ordering, transactions, and dead-letter queues. Use Azure Event Grid for event-driven routing, where you need to react to state changes across Azure resources or custom applications using a publish-subscribe model. Consider Azure Event Hubs for high-throughput event streaming scenarios such as telemetry ingestion or log aggregation.
  • Resources:
  • Follow the Azure Architecture Center reference architectures

  • Why: Reference architectures provide proven, battle-tested designs for common application patterns on Azure. Starting from a reference architecture reduces the risk of architectural mistakes, accelerates development, and ensures your design follows Azure best practices and the Well-Architected Framework.
  • How: Browse the Azure Architecture Center for reference architectures that match your application scenario—whether it is a web application, microservices, data pipeline, or IoT solution. Use these architectures as starting points and adapt them to your specific requirements. Review the associated Well-Architected Framework pillars (reliability, security, cost optimization, operational excellence, and performance efficiency) to ensure your design is balanced.
  • Resources:

This site uses Just the Docs, a documentation theme for Jekyll.