Architecture Design Patterns

The 43 Azure Cloud Design Patterns: A Complete, Practical Catalogue

A design pattern is a named, reusable answer to a problem that recurs across systems – and the value is not the code, it is the name. When you can say “we’ll put a Queue-Based Load Leveling buffer in front of the database and add Competing Consumers behind it,” you have compressed a paragraph of design reasoning, its failure modes, and its tradeoffs into eight words that a room of architects will all decode the same way. That shared vocabulary is what this lesson builds. The Azure Architecture Center publishes a catalogue of cloud design patterns – commonly cited as forty-three – and most engineers have met a handful (Retry, Cache-Aside, Sidecar) by accident without ever seeing the whole map. This is the whole map.

I am not going to teach these as trivia. Every pattern here is an answer to a force that distributed systems exert on you whether you acknowledge it or not, and the cleanest way to see those forces is through the fallacies of distributed computing – the false assumptions that, when you build on them, produce exactly the outages these patterns prevent. So we start with the why, then catalogue all forty-three grouped by intent (Reliability/resilience, Messaging, Data management, Design & implementation, Security), each as problem → solution → when to use → Well-Architected pillar(s) → a concrete Azure example. Then we do the part the official docs skip: how patterns compose into the real designs you ship, and the anti-patterns – the named failure shapes – that tell you a composition has gone wrong. This is the reference lesson for the module; keep it open while you design.

Learning objectives

By the end of this lesson you will be able to:

  1. Explain the eight fallacies of distributed computing and trace each cloud design pattern back to the fallacy it defends against, so you can justify a pattern from first principles rather than cargo-culting it.
  2. Recall and apply all 43 Azure cloud design patterns, grouped by intent, naming for each its problem, solution, when-to-use trigger, the Well-Architected pillar(s) it serves, and a concrete Azure service that implements it.
  3. Compose patterns correctly – Retry with Circuit Breaker, Queue-Based Load Leveling with Competing Consumers, Gateway Routing with Aggregation and Offloading, Saga on Compensating Transaction – and explain why the combination is stronger than either part alone.
  4. Recognise the key cloud anti-patterns (Busy Database, Chatty I/O, Noisy Neighbour, Retry Storm, Improper Instantiation, Monolithic Persistence, No Caching, Synchronous I/O) in a design or a metric, and name the pattern that fixes each.
  5. Map any pattern to its Well-Architected pillar(s) using the summary table, so design reviews and AZ-305 answers connect a concrete technique to the pillar it advances.
  6. Select a coherent pattern set for a scenario under stated constraints, defending each choice and – just as important – naming the patterns you deliberately left out.

Prerequisites & where this fits

This is lesson A4 in the Architecture & Design Mastery module. It assumes you have done the upstream lessons: the Well-Architected Framework deep dive (you must know the five pillars – Reliability, Security, Cost Optimisation, Operational Excellence, Performance Efficiency – as a tradeoff system, because every pattern here is tagged to them) and Choosing an Architecture: Styles & the Ten Design Principles. The distinction between the two upstream lessons matters here: an architecture style (N-tier, microservices, event-driven) is the shape of the whole system; a design pattern is a local, composable technique you apply inside that shape. Styles are the floor plan; patterns are how you build each room. You pick one style and many patterns.

You should be comfortable with core Azure compute, messaging, and data services (App Service, Functions, AKS, Service Bus, Event Hubs, Event Grid, Cosmos DB, Azure SQL, Storage, Front Door, Application Gateway, API Management). Where a pattern leans on a service you have already studied in depth – caching, CQRS, the Strangler Fig migration, saga orchestration – I link the dedicated article so this catalogue can stay a catalogue rather than balloon into a book.

Where it fits in the arc: A3 taught you to choose the style from requirements. This lesson gives you the toolbox you reach into once the style is chosen. A5, Mission-Critical (AlwaysOn) Architecture, is where pillars, styles, and these patterns converge into the apex design – deployment stamps, active/active, health modelling – so think of A4 as the vocabulary you need before A5 can speak to you in full sentences.

The fallacies of distributed computing: the why behind every pattern

In 1994 Peter Deutsch (with later additions credited to James Gosling and others at Sun Microsystems) wrote down the assumptions that engineers reliably make when they first build distributed systems – assumptions that are all false, and that all eventually cause an outage. The cloud did not repeal these fallacies; it industrialised them. Every one of the 43 patterns is, at root, a structured way of not believing one or more of these eight lies. Internalise the fallacies and the catalogue stops being a list to memorise and becomes a set of inevitable consequences.

# The fallacy (the false assumption) The reality in Azure Patterns that defend against it
1 The network is reliable Packets drop, connections reset, a dependency restarts mid-call, a region has a partition. Transient faults are the normal case at scale, not the exception. Retry, Circuit Breaker, Health Endpoint Monitoring, Compensating Transaction, Scheduler Agent Supervisor
2 Latency is zero Every hop costs milliseconds; a chatty call pattern multiplies them. Cross-region adds tens of ms; cross-cloud more. Cache-Aside, Materialized View, Index Table, Gateway Aggregation, Backends for Frontends, CQRS, Geode
3 Bandwidth is infinite Large payloads saturate links and message buses; queues have size limits. Moving everything everywhere is not free. Claim Check, Static Content Hosting, Valet Key, Pipes and Filters
4 The network is secure The wire is hostile by default; identity must be proven on every call and the trust boundary made explicit. Federated Identity, Gatekeeper, Valet Key, Quarantine, Ambassador
5 Topology doesn’t change Instances scale out and in, move zones, get replaced on deploy; IPs and leaders are not stable. Leader Election, Sidecar, Ambassador, External Configuration Store, Deployment Stamps
6 There is one administrator Ownership is federated across teams, subscriptions, even clouds; you integrate with systems you don’t control and can’t change. Anti-Corruption Layer, Strangler Fig, Messaging Bridge, Gateway Routing
7 Transport cost is zero Serialisation, egress, and per-message charges are real line items; “just call the API again” has a price. Cache-Aside, Claim Check, Compute Resource Consolidation, Gateway Aggregation
8 The network is homogeneous Services speak different protocols, schemas, and SLAs; nothing is uniform across a real estate of systems. Anti-Corruption Layer, Messaging Bridge, Pipes and Filters, Ambassador, Sidecar

A ninth fallacy is often appended – “the system is monolithic” / coordination is free – and it is the spiritual root of the messaging and data-management groups: the moment you have more than one process, every shared decision costs a round trip and risks a conflict. Patterns like Competing Consumers, Choreography, CQRS, Event Sourcing, and Sharding exist to minimise coordination, which is one of the Ten Design Principles you met in A3.

The architect’s habit this builds: when someone proposes a design, silently ask “which fallacy is this assuming?” A synchronous chain of six service calls assumes latency is zero and the network is reliable. A 200 MB blob on a message bus assumes bandwidth is infinite. A hard-coded leader assumes topology doesn’t change. The fallacy names the risk; the catalogue names the fix.

A note on the count and on canon accuracy. The Azure Architecture Center catalogue is a living document: patterns have been added over the years (Rate Limiting and Sequential Convoy are relatively recent; older course material lists fewer). This lesson catalogues the full set as grouped below; treat the names and intents as authoritative for AZ-305 and design reviews, and expect the headline number to drift by one or two as Microsoft curates the catalogue. What does not drift is the reasoning: every pattern still answers a fallacy.

Now the catalogue.

Group 1 — Reliability & resilience patterns

These patterns answer fallacy #1 (the network is reliable) and the coordination fallacy. Their shared job is to keep a system serving its business requirements when individual components misbehave – by retrying transient faults, isolating failures, smoothing load, electing coordinators, and recovering from partial failure. They map predominantly to the Reliability pillar, with strong Performance Efficiency and Operational Excellence crossovers.

Retry

Circuit Breaker

Bulkhead

Compensating Transaction

Leader Election

Health Endpoint Monitoring

Queue-Based Load Leveling

Rate Limiting

Throttling

Scheduler Agent Supervisor

Sequential Convoy

Group 2 — Messaging patterns

Messaging patterns answer the latency, bandwidth, and coordination fallacies by replacing tight synchronous coupling with asynchronous, decoupled communication. They let producers and consumers scale, fail, and evolve independently. They serve Reliability and Performance Efficiency primarily, with Operational Excellence and Cost Optimisation crossovers.

Asynchronous Request-Reply

Claim Check

Competing Consumers

Choreography

Pipes and Filters

Priority Queue

Publisher-Subscriber

Messaging Bridge

Group 3 — Data management patterns

Data patterns answer the latency, bandwidth, and coordination fallacies in the data tier – where the hardest tradeoffs (consistency vs. availability vs. performance) live. They serve Performance Efficiency and Reliability heavily, with Security and Cost Optimisation crossovers.

Cache-Aside

CQRS (Command and Query Responsibility Segregation)

Event Sourcing

Materialized View

Index Table

Sharding

Static Content Hosting

Valet Key

Group 4 — Design & implementation patterns

The largest group: structural patterns for how you compose, deploy, configure, and evolve services – answering the topology, single-administrator, and homogeneity fallacies. They serve Operational Excellence and Performance Efficiency most, with Reliability and Cost Optimisation crossovers.

Ambassador

Anti-Corruption Layer

Backends for Frontends (BFF)

Compute Resource Consolidation

Deployment Stamps

External Configuration Store

Gateway Aggregation

Gateway Offloading

Gateway Routing

Geode

Sidecar

Strangler Fig

Group 5 — Security patterns

The smallest but non-negotiable group: patterns that answer fallacy #4 (the network is secure) by proving identity, validating untrusted input at the boundary, and isolating the unverified. They serve the Security pillar primarily, with Reliability crossovers. (Several patterns in other groups – Valet Key, Ambassador, Gateway Offloading, Throttling – also do heavy security work; security is cross-cutting.)

Federated Identity

Gatekeeper

Quarantine

How the patterns map: the catalogue at a glance

The diagram below is the mental map for the whole catalogue – the five groups, the fallacy each group primarily answers, and the headline patterns within each, with the composition arrows that connect them into real designs. Keep it as your one-page index; the rest of this lesson teaches how to combine what it shows.

The 43 Azure cloud design patterns grouped by intent — reliability/resilience, messaging, data management, design & implementation, and security — each tracing back to a fallacy of distributed computing, with the key composition arrows between them.

Pattern composition: how real designs are built

No production system uses one pattern. The skill that separates an architect from a pattern-memoriser is composition – knowing which patterns reinforce each other and which conflict. Here are the four canonical combinations you will reach for constantly. Each is more than the sum of its parts: the composition closes a gap that either pattern alone leaves open.

Retry + Circuit Breaker — the resilience pair

These are almost never used apart, because each covers the other’s blind spot. Retry handles transient faults brilliantly but is dangerous against a sustained outage – retrying a dead service just adds load and amplifies the failure (the Retry Storm anti-pattern). Circuit Breaker handles sustained outages brilliantly but does nothing for the brief blips that retry would have absorbed transparently. Composed correctly, the breaker wraps the retry: while the circuit is Closed, retry absorbs blips; once failures cross a threshold the breaker Opens and short-circuits the retries, so you stop hammering the sick dependency; in Half-Open a trial request decides whether to resume. Add a timeout beneath both (so a hung call can’t pin a thread forever) and a fallback above (cached value, queued write, degraded response) and you have the complete resilience pipeline. The ordering matters: timeout is innermost, then retry, then breaker outermost — so the breaker counts final failures, not each retry attempt. In .NET this is a single Polly pipeline; on AKS it is a Dapr resiliency policy or mesh config. Full treatment: resiliency patterns that actually work.

Queue-Based Load Leveling + Competing Consumers — the elastic worker

The most common throughput composition in cloud apps. Queue-Based Load Leveling puts a buffer between a spiky producer and the backend, converting peaks into a drainable backlog – but a single consumer draining that queue is now the bottleneck and a single point of failure. Competing Consumers solves that: multiple consumers read the same queue, the broker hands each message to exactly one, and the pool self-balances and survives consumer death (the lock expires, another picks up). Together they give you both smoothing (the queue) and elastic, resilient drain (the consumer pool) – the heart of the Web-Queue-Worker style. Scale the consumer pool on queue depth (KEDA on AKS, the Functions Service Bus trigger) so workers track the backlog automatically. If a subset of messages must stay ordered, layer Sequential Convoy on top (Service Bus sessions / Event Hubs partitions) to get ordering within a key while still scaling across keys.

Gateway Routing + Aggregation + Offloading — the gateway trio

A mature API gateway is rarely doing one job; it is doing three patterns at once, and they stack cleanly. Gateway Routing gives clients one stable endpoint and routes by path/header/version to the right backend, hiding internal topology and enabling canary/blue-green. Gateway Aggregation lets one client call fan out to several backends and return a combined payload, killing the Chatty I/O that murders mobile latency. Gateway Offloading centralises the cross-cutting concerns – TLS termination, authentication, WAF, caching, compression – so no backend reimplements them. Composed, a request hits Front Door / Application Gateway / API Management, gets TLS-terminated and WAF-screened and authenticated (offloading), is routed to the right service or BFF (routing), which may aggregate several downstreams (aggregation) before responding. Layer this with Backends for Frontends when different client types need differently-shaped aggregations. Background: API gateways explained and the BFF pattern.

Saga (built on Compensating Transaction) — distributed consistency without 2PC

You cannot wrap a multi-service business transaction in a single ACID commit (no distributed transactions across Cosmos DB, Service Bus, and a partner API). The Saga pattern composes the workflow from a sequence of local transactions, each with a defined Compensating Transaction that semantically undoes it. If step 4 fails, the saga runs the compensations for steps 3, 2, 1 in reverse, returning the system to a consistent (not identical) state – the charge is refunded, not un-charged. Sagas come in two flavours, which themselves are pattern compositions: orchestration (a central coordinator drives steps – built on Scheduler Agent Supervisor) gives strong visibility and control; choreography (services react to events – built on Publisher-Subscriber + Choreography) gives looser coupling and autonomy at the cost of central visibility. Make every step idempotent so retries are safe, and you have reliable distributed consistency without two-phase commit. Deep dives: saga orchestration vs. choreography, idempotency & deduplication, and the transactional outbox for reliably publishing the saga’s events.

The composition meta-lesson: patterns combine along the axes of the fallacies. Resilience patterns stack to fully defend fallacy #1 (timeout → retry → breaker → fallback). Throughput patterns stack to defend the coordination/latency fallacies (queue → consumers → convoy). Boundary patterns stack at the edge (routing → offloading → aggregation → gatekeeper). When you find yourself reaching for one pattern, ask which adjacent pattern covers its blind spot – that is the composition.

Real-world application: how this shows up in actual Azure designs

In a real Azure design review you will not hear “let’s apply pattern 17.” You will see these patterns embedded in product decisions, and your job is to name them so the tradeoffs become discussable. A few composite shapes you will meet repeatedly:

The recurring lesson: patterns are how you operationalise the Well-Architected pillars and the Ten Design Principles. “Design for self-healing” is Retry + Circuit Breaker + Health Endpoint Monitoring + Scheduler Agent Supervisor. “Partition around limits” is Sharding + Deployment Stamps + Bulkhead. “Minimise coordination” is Competing Consumers + Choreography + CQRS. The principles tell you what good looks like; the patterns are how you get there.

Pattern → pillar summary table

This is the table to internalise for AZ-305 and design reviews. The primary pillar is the pattern’s main intent; secondary pillars are strong crossovers. (Cost Optimisation, Operational Excellence, and Performance Efficiency appear widely as crossovers because almost every structural choice touches cost, operations, and performance.)

Pattern Group Primary pillar Secondary pillar(s)
Retry Reliability Reliability Performance Efficiency
Circuit Breaker Reliability Reliability Performance Efficiency
Bulkhead Reliability Reliability Performance Efficiency
Compensating Transaction Reliability Reliability Operational Excellence
Leader Election Reliability Reliability Operational Excellence
Health Endpoint Monitoring Reliability Reliability Operational Excellence
Queue-Based Load Leveling Reliability Reliability Performance Efficiency, Cost Optimisation
Rate Limiting Reliability Reliability Cost Optimisation, Performance Efficiency
Throttling Reliability Reliability Performance Efficiency, Security, Cost Optimisation
Scheduler Agent Supervisor Reliability Reliability Operational Excellence
Sequential Convoy Reliability Reliability Performance Efficiency
Asynchronous Request-Reply Messaging Performance Efficiency Reliability
Claim Check Messaging Performance Efficiency Cost Optimisation, Reliability
Competing Consumers Messaging Reliability Performance Efficiency, Cost Optimisation
Choreography Messaging Reliability Operational Excellence, Performance Efficiency
Pipes and Filters Messaging Performance Efficiency Reliability, Operational Excellence
Priority Queue Messaging Performance Efficiency Reliability, Cost Optimisation
Publisher-Subscriber Messaging Reliability Performance Efficiency, Operational Excellence
Messaging Bridge Messaging Reliability Operational Excellence
Cache-Aside Data management Performance Efficiency Cost Optimisation, Reliability
CQRS Data management Performance Efficiency Reliability, Operational Excellence
Event Sourcing Data management Reliability Operational Excellence, Performance Efficiency
Materialized View Data management Performance Efficiency Cost Optimisation, Reliability
Index Table Data management Performance Efficiency Cost Optimisation
Sharding Data management Performance Efficiency Reliability, Cost Optimisation
Static Content Hosting Data management Performance Efficiency Cost Optimisation, Reliability
Valet Key Data management Performance Efficiency Security, Cost Optimisation
Ambassador Design & implementation Operational Excellence Reliability, Security
Anti-Corruption Layer Design & implementation Operational Excellence Reliability
Backends for Frontends Design & implementation Performance Efficiency Operational Excellence, Security
Compute Resource Consolidation Design & implementation Cost Optimisation Operational Excellence, Performance Efficiency
Deployment Stamps Design & implementation Reliability Performance Efficiency, Operational Excellence, Cost Optimisation
External Configuration Store Design & implementation Operational Excellence Security, Reliability
Gateway Aggregation Design & implementation Performance Efficiency Operational Excellence
Gateway Offloading Design & implementation Operational Excellence Security, Performance Efficiency
Gateway Routing Design & implementation Operational Excellence Reliability, Performance Efficiency
Geode Design & implementation Performance Efficiency Reliability, Cost Optimisation
Sidecar Design & implementation Operational Excellence Reliability, Security, Performance Efficiency
Strangler Fig Design & implementation Operational Excellence Reliability
Federated Identity Security Security Operational Excellence
Gatekeeper Security Security Reliability
Quarantine Security Security Reliability, Operational Excellence

Common mistakes & anti-patterns

An anti-pattern is a recurring bad shape – a solution that looks reasonable and is reliably wrong. Microsoft’s performance anti-patterns are the named failure modes you should be able to spot in a code review or a metrics dashboard, and crucially each one maps to the pattern that fixes it. Spotting the anti-pattern is half the diagnosis; naming the corrective pattern is the prescription.

Anti-pattern What it looks like The tell (in metrics/code) Pattern that fixes it
Busy Database Pushing too much application logic (heavy stored procs, business rules, transforms) into the database, the hardest tier to scale out. DB CPU saturated while app tier is idle; scaling the app does nothing. Move logic to the (scalable) app tier; Cache-Aside, Materialized View, CQRS to offload reads.
Chatty I/O Many small fine-grained calls where a few coarse ones would do – N+1 queries, per-item API calls. Request count and round-trip latency dominate; throughput collapses on high-latency links. Gateway Aggregation, Backends for Frontends, batching, coarser-grained APIs.
Noisy Neighbour One tenant/workload monopolises a shared resource and starves the rest. One tenant’s spike degrades everyone; uneven shard/partition load. Bulkhead, Deployment Stamps, Throttling/Rate Limiting, better shard key.
Retry Storm Aggressive retries (no backoff, no breaker) against a struggling dependency, amplifying the failure into a cascade. Failures increase load; synchronised retry waves; cascading timeouts. Retry with exponential backoff + jitter + Circuit Breaker (the composition).
Improper Instantiation Creating and discarding expensive, meant-to-be-shared objects (HttpClient, DB connections, SDK clients) per request. Socket/port exhaustion, connection pool churn, GC pressure under load. Singleton/pooled instances (IHttpClientFactory, connection pooling); Compute Resource Consolidation mindset.
Monolithic Persistence Forcing all data into one store regardless of access pattern, creating contention and a scaling ceiling. Hot table contention; one store throttling the whole system; wrong store for the job. Polyglot persistence (best store for each job), Sharding, CQRS, Index Table.
No Caching Recomputing or re-fetching the same data on every request. Repeated identical expensive reads; backend load that caching would erase; high cost per request. Cache-Aside, Materialized View, Static Content Hosting / CDN, edge caching.
Synchronous I/O Blocking threads on I/O (synchronous calls, blocking file/network ops) on the request path. Thread-pool starvation; throughput plateaus far below CPU capacity; tail latency under load. async/await end-to-end; Asynchronous Request-Reply; Queue-Based Load Leveling for long work.

Beyond these named eight, the architect-level mistakes I see most often are pattern misuse rather than absence:

Interview & exam questions

These concepts dominate AZ-305 (“design” verbs – recommend, select the appropriate solution) and senior architecture interviews. Practise giving the pattern name plus the tradeoff, not just a service.

  1. A spiky ingestion workload overwhelms a downstream that processes at a steady rate. Which pattern, and which Azure service? Queue-Based Load Leveling – put a Service Bus queue (or Event Hubs for high volume) between producer and consumer so the queue absorbs the spike and the consumer drains at its sustainable rate. Add Competing Consumers (scaled on queue depth) to drain elastically.

  2. Why are Retry and Circuit Breaker used together, and what happens if you use Retry alone against a dependency that is fully down? Retry handles transient faults; Circuit Breaker handles sustained outages. Retry alone against a down dependency causes a Retry Storm – the retries add load and amplify the failure into a cascade. The breaker opens after a failure threshold and short-circuits the retries, shedding load while the dependency recovers. Always pair them, with a timeout beneath and a fallback above.

  3. You must build a multi-service order workflow with no distributed transaction available. How do you keep data consistent if a later step fails? Saga pattern built on Compensating Transactions: each step has a semantic undo (refund, release, cancel); on failure you run the compensations in reverse. Choose orchestration (Durable Functions – central visibility) or choreography (Event Grid/Service Bus – looser coupling). Make every step idempotent so retries are safe.

  4. A mobile app makes 12 backend calls to render one screen and is slow on cellular. What pattern fixes it and what anti-pattern were they hitting? The anti-pattern is Chatty I/O; the fix is Gateway Aggregation (one client call fans out internally and returns a combined payload), often as a Backends for Frontends tailored to the mobile client. The fast internal network absorbs the chattiness instead of the high-latency mobile link.

  5. A multi-tenant SaaS sees one large tenant degrade performance for everyone. Name the anti-pattern and two patterns that mitigate it. Noisy Neighbour. Mitigate with Bulkhead (isolate resource pools), Deployment Stamps (give large tenants their own scale unit), and Throttling / Rate Limiting (cap per-tenant consumption). A better shard key also helps if the cause is a hot partition.

  6. You need exactly one instance in a scaled-out worker tier to run a singleton scheduled job. Which pattern and what is a lightweight Azure mechanism? Leader Election. Lightweight mechanism: an Azure Blob Storage lease as a distributed lock – the holder is the leader and renews the lease; if it dies the lease expires and another instance acquires it. Durable Functions / WebJobs singleton provides this as a feature.

  7. A message bus rejects messages because some payloads are too large. How do you keep using messaging? Claim Check: store the large payload in Blob Storage and send only the reference (URI) on the bus; the consumer fetches the payload directly. Event Grid Blob Created events are this pattern natively.

  8. Distinguish Throttling from Rate Limiting – who is protected in each, and give an Azure example of each. Throttling protects your own service from inbound overload by rejecting/queuing excess (API Management 429 / WAF rate-limit rules). Rate Limiting is self-imposed on your outbound calls to stay within a downstream’s quota (client-side token bucket, APM outbound policies). One defends your capacity; the other respects someone else’s.

  9. Users worldwide complain about latency from your single-region app, and you want every region to serve every user. Which pattern, and what is the key data-tier requirement? Geode – deploy interchangeable geographical nodes across regions, route to the nearest, backed by a globally-distributed multi-write data layer (Cosmos DB multi-region writes). The cost and multi-write conflict-handling are the tradeoff; it raises cost (a Cost Optimisation tension).

  10. You are migrating a legacy monolith and cannot do a big-bang rewrite. Which two patterns do you combine, and what is the role of each? Strangler Fig (a façade routes slices of functionality to new services incrementally until the monolith is retired) combined with Anti-Corruption Layer (a translation layer that keeps the legacy model’s quirks from leaking into your clean new domain). Gateway Routing implements the façade.

  11. Your team wants to add observability and mTLS to a dozen microservices written in three languages without touching app code. Which pattern, and how on AKS? Sidecar (and its outbound-networking specialisation, Ambassador). On AKS, a service mesh (Istio/Linkerd/Open Service Mesh) or Dapr injects a sidecar per pod that handles telemetry, mTLS, retries, and routing – capabilities the app gets for free, uniformly, regardless of language.

  12. For a read-heavy reporting screen built from expensive cross-table aggregations, which two data patterns combine, and what is the consistency tradeoff? CQRS (separate read model) + Materialized View (pre-computed, stored aggregation refreshed from source, e.g. a Cosmos DB projection built off the SQL change feed). The tradeoff is eventual consistency – the read model lags the write model briefly – accepted in exchange for fast, cheap reads.

Quick check

  1. The fallacy “latency is zero” most directly motivates which group of patterns? The data-management and gateway patterns that reduce round trips – Cache-Aside, Materialized View, Gateway Aggregation, BFF, Geode. (More broadly, anything that brings data closer or batches calls.)

  2. True or false: a Compensating Transaction rolls the system back to its exact prior state. False. It issues a semantic undo (a refund, a cancellation) – the original effects happened and may have been visible; you counteract them, you do not erase them.

  3. Which pattern lets you process related messages in order while still scaling across unrelated ones, and what Azure feature implements it? Sequential Convoy – Service Bus message sessions (one consumer per SessionId) or Event Hubs partitions (ordering within a partition, parallel across partitions).

  4. Name the anti-pattern: an app creates a new HttpClient per request and exhausts sockets under load. What fixes it? Improper Instantiation. Fix with a shared/pooled instance via IHttpClientFactory (and connection pooling for DB clients).

  5. Which security pattern issues a client a scoped, time-limited token to access storage directly so the app never proxies the bytes, and what is the Azure mechanism? Valet Key – Azure Storage Shared Access Signatures (preferably user-delegation SAS backed by Entra ID).

Exercise: pick the patterns for a scenario

Scenario. You are designing the backend for a global food-delivery platform. Requirements: (a) customers worldwide expect sub-200 ms responses; (b) order placement must remain consistent across the order, payment, and restaurant services even though there is no distributed transaction; © order traffic spikes 10× at lunch and dinner; (d) the platform is multi-tenant (each restaurant chain is a tenant) and one large chain must not degrade others; (e) customers upload food photos and review attachments; (f) restaurant partners log in with their existing corporate identity; (g) a mobile app must render an order screen that today needs eight backend calls and is slow on cellular.

Task. For each requirement, name the pattern(s) you would apply, the Azure service that implements it, and – for at least two requirements – one pattern you deliberately considered and rejected, with your reason. Then state the two anti-patterns you are most at risk of and how your choices avoid them.


Model answer.

Anti-patterns you are most at risk of: Noisy Neighbour (multi-tenant + huge chains) – mitigated by stamps, sharding, bulkhead, and rate limiting; and Retry Storm (10× spikes against payment/restaurant services) – mitigated by Retry-with-backoff + Circuit Breaker on every outbound call, plus Queue-Based Load Leveling so backends see a smoothed rate rather than the raw spike. A good answer also names what it left out and why (e.g. no Event Sourcing here – the audit/temporal need does not yet justify the complexity).

The grading rubric is not “did you list patterns” – it is “did you justify each from a requirement, name the tradeoff, and show judgement about what not to apply.” That last part is the architect signal.

Certification mapping

This lesson is high-yield for AZ-305: Designing Microsoft Azure Infrastructure Solutions, whose questions are framed as design recommendations under constraints – exactly the pattern-selection skill above.

Crossover with AZ-204 (Developing Solutions for Azure): the implementation-level patterns – Retry/Circuit Breaker with the SDKs and Polly, Cache-Aside with Azure Cache for Redis, Competing Consumers with Service Bus/Functions, Valet Key with SAS, Async Request-Reply, and the performance anti-patterns (Improper Instantiation, Chatty I/O, Synchronous I/O) – are AZ-204 staples. Crossover with AZ-104: Health probes, App Gateway/Front Door routing and offloading, autoscaling, and storage SAS appear at the operations level. The pattern names are the connective tissue across all three exams.

Glossary

Next steps

You now have the full toolbox and – more importantly – the judgement to compose it and to recognise when it has been misused. The capstone of this module puts it all together.

Design PatternsWell-ArchitectedAZ-305ResilienceMessagingDistributed Systems
Need this built for real?

Vinod is a Senior Cloud Architect (22+ yrs) — available for Azure / AWS / GCP architecture, landing zones, and migrations.

Work with me

Comments

Keep Reading