ms cloud design patterns infographic 2015

1
Cloud Design Patterns: Prescriptive Architecture Guidance for Cloud Applications Performance and Scalability Performance is an indication of the responsiveness of a system, while scalability is the ability to gracefully handle increases in load, perhaps through an increase in available resources. Cloud applications, especially in multi-tenant scenarios, typically encounter variable workloads and unpredictable activity peaks and should be able to scale out within limits to meet demand, and scale in when demand decreases. Scalability concerns not just compute instances, but other items such as data stor- age, messaging infrastructure, and more. Security Security is the capability of a system to prevent malicious or accidental actions outside of the designed usage, and to prevent disclosure or loss of information. Cloud applications are exposed on the Internet outside trusted on-premises boundaries, are often open to the public, and may serve untrusted users. Applications must be designed and deployed in a way that protects them from malicious attacks, restricts access to only approved users, and protects sensitive data. Resiliency Resiliency is the ability of a system to gracefully handle and recover from failures. The nature of cloud hosting, where applications are often multi-tenant, use shared platform services, compete for resources and bandwidth, communicate over the Internet, and run on commodity hardware means there is an increased likelihood that both transient and more permanent faults will arise. Detecting failures, and recovering quickly and efficiently, is necessary to maintain resiliency. Data Management Data management is the key element of cloud applications, and influenc- es most of the quality attributes. Data is typically hosted in different locations and across multiple servers for reasons such as performance, scalability or availability, and this can present a range of challenges. For example, data consistency must be maintained, and data will typically need to be synchronized across different locations. Design and Implementation Good design encompasses factors such as consistency and coherence in component design and deployment, maintainability to simplify adminis- tration and development, and reusability to allow components and subsystems to be used in other applications and in other scenarios. Decisions made during the design and implementation phase have a huge impact on the quality and the total cost of ownership of cloud hosted applications and services. Messaging The distributed nature of cloud applications requires a messaging infra- structure that connects the components and services, ideally in a loosely coupled manner in order to maximize scalability. Asynchronous messag- ing is widely used, and provides many benefits, but also brings challenges such as the ordering of messages, poison message management, idem- potency, and more. Management and Monitoring Cloud applications run in a remote datacenter where you do not have full control of the infrastructure or, in some cases, the operating system. This can make management and monitoring more difficult than an on-prem- ises deployment. Applications must expose runtime information that administrators and operators can use to manage and monitor the system, as well as supporting changing business requirements without requiring the application to be stopped or redeployed. Problem areas in the cloud Availability Availability defines the proportion of time that the system is functional and working. It will be affected by system errors, infrastructure problems, malicious attacks, and system load. It is usually measured as a percentage of uptime. Cloud applications typically provide users with a service level agreement (SLA), which means that applications must be designed and implemented in a way that maximizes availability. This poster depicts common problems in designing cloud applications (below) and patterns that offer guidance (right). The information applies to Microsoft Azure as well as other cloud platforms. The icons at the top of each item represent the problem areas that the pattern relates to. Patterns that include code samples are indicated by this icon: Visit http://aka.ms/Cloud-Design-Patterns-Sample to download. http://aka.ms/Availability-Patterns http://aka.ms/DataManagement-Patterns http://aka.ms/Design-and-Implementation-Patterns http://aka.ms/Messaging-Patterns http://aka.ms/Performance-and-Scalability-Patterns http://aka.ms/Resiliency-Patterns http://aka.ms/Security-Patterns http://aka.ms/Management-and-Monitoring-Patterns © 2015 Microsoft Corporation. All rights reserved. [email protected] http://aka.ms/Cloud-Design-Patterns Like it? Get it. User Return token Request resource Target resource Access resource using token Check validity of request and generate key token 1 2 3 4 Application Valet Key For more info, see http://aka.ms/Valet-Key-Pattern Use a token or key that provides clients with restricted direct access to a specific resource or service in order to offload data transfer operations from the application code. This pattern is particularly useful in applications that use cloud-hosted storage systems or queues, and can minimize cost and maximize scalability and performance. Control the consumption of resources used by an instance of an application, an individu- al tenant, or an entire service. This pattern can allow the system to continue to function and meet service level agreements, even when an increase in demand places an extreme load on resources. Throttling For more info, see http://aka.ms/Throttling-Pattern Feature C Resource utilization Feature B Feature A Soft limit of resource utilization Maximum capacity Time T1 T2 Feature B is suspended to allow sufficient resources for applications to use Feature A and Feature C Deploy static content to a cloud-based storage service that can deliver these directly to the client. This pattern can reduce the requirement for potentially expensive compute instances. Static Content Hosting For more info, see http://aka.ms/Static-Content-Hosting-Pattern Deliver pages containing links to files in storage service Request files from storage service Container “myresources” styles.ccs sitecode.js download.doc samples.zip ... image1.png image2.png image3.png ... Client Application Divide a data store into a set of horizontal partitions or shards. This pattern can improve scalability when storing and accessing large volumes of data. Sharding For more info, see http://aka.ms/Sharding-Pattern Sharding logic: Route requests for tenant 1 to shard ... ... Route requests for tenant 55 to shard A ... Route requests for tenant 227 to shard C ... Route requests for tenant N to shard ... Query: Find information for tenant 227 Query: Find information for tenant 55 Application instance Application instance ••• Shard A Shard B Shard C Shard N Coordinate a set of actions across a distributed set of services and other remote resourc- es, attempt to transparently handle faults if any of these actions fail, or undo the effects of the work performed if the system cannot recover from a fault. This pattern can add resiliency to a distributed system by enabling it to recover and retry actions that fail due to transient exceptions, long-lasting faults, and process failures. Scheduler Agent Supervisor For more info, see http://aka.ms/Scheduler-Agent-Supervisor-Pattern Supervisor requests that a failed step is reattempted by the Scheduler Supervisor monitors the status of steps in the State Store and may update the status of a step Scheduler organizes and runs the steps that comprise the task as a workflow Scheduler maintains the status of each step in the State Store as it is started and completed A step in the workflow can send a request to an agent to access a remote resource or invoke a remote service. Requests and responses are typically sent asynchronously Agent accesses remote resource or service. The agent should include error handling and retry logic Scheduler Agent Supervisor Agent State store Remote resource Remote service Runtime Reconfiguration For more info, see http://aka.ms/Runtime-Reconfiguration-Pattern Design an application so that it can be reconfigured without requiring redeployment or restarting the application. This helps to maintain availability and minimize downtime. Component or service Change applied at runtime Configuration updated Change cancelled because it cannot be applied at runtime Configuration file Restart application Application code Retry For more info, see http://aka.ms/Retry-Pattern Enable an application to handle anticipated, temporary failures when it attempts to connect to a service or network resource by transparently retrying an operation that has previously failed in the expectation that the cause of the failure is transient. This pattern can improve the stability of the application. Application Hosted service Application invokes operation on hosted service. The request fails, and the service host responds with HTTP response code 500 (internal server error). Application waits for a short interval and tries again. The request still fails with HTTP response code 500. Application waits for a longer interval and tries again. The request succeeds with HTTP response code 200 (OK). 1 500 2 500 3 1 2 3 200 Requests received at a variable rate Messages processed at a more consistent rate Tasks Services Message queue Use a queue that acts as a buffer between a task and a service that it invokes in order to smooth intermittent heavy loads that may otherwise cause the service to fail or the task to time out. This pattern can help to minimize the impact of peaks in demand on avail- ability and responsiveness for both the task and the service. Queue-Based Load Leveling For more info, see http://aka.ms/Queue-Based-Load-Leveling-Pattern Priority Queue For more info, see http://aka.ms/Priority-Queue-Pattern Prioritize requests sent to services so that requests with a higher priority are received and processed more quickly than those of a lower priority. This pattern is useful in applications that offer different service level guarantees to individual clients. Message queue for priority 1 messages Application sends messages to the queue that handles messsages of the designated priority All messages in a queue have the same priority Message queue for priority 2 messages Message queue for priority 3 messages Application 1 1 1 2 2 3 3 3 Consumer Consumer Consumer Consumer Consumer Consumer Pipes and Filters For more info, see http://aka.ms/Pipes-and-Filters-Pattern Decompose a task that performs complex processing into a series of discrete elements that can be reused. This pattern can improve performance, scalability, and reusability by allowing task elements that perform the processing to be deployed and scaled independently. Data from Source 1 Task A Task B Task C Business logic Transformed data Transformed data Components reused in different pipelines Data from Source 2 Task A Task B Task E Materialized View For more info, see http://aka.ms/Materialized-View-Pattern Generate pre-populated views over the data in one or more data stores when the data is formatted in a way that does not favor the required query operations. This pattern can help to support efficient querying and data extraction, and improve performance. Materialized view is read-only Application data is the source of truth Materialized View Application OrderId ItemId Qty 1 30 2 1 31 3 2 30 2 OrderId Account 1 A 2 B ItemId Name Stock 30 Shirts 120 31 Pants 143 ItemId Name Stock 30 Shirts 120 31 Pants 143 Coordinate the actions performed by a collection of collaborating task instances in a distributed application by electing one instance as the leader that assumes responsibility for managing the other instances. This pattern can help to ensure that task instances do not conflict with each other, cause contention for shared resources, or inadvertently interfere with the work that other task instances are performing. Leader Election For more info, see http://aka.ms/Leader-Election-Pattern Blob 1 2 3 4 BlobDistributedMutext Leader role instance Subordinate role instance BlobDistributedMutext BlobDistributedMutext Create indexes over the fields in data stores that are frequently referenced by query criteria. This pattern can improve query performance by allowing applications to more quickly locate the data to retrieve from a data store. Index Table For more info, see http://aka.ms/Index-Table-Pattern Index Table Primary Key (Customer ID) Customer Data 1 LastName: Smith, Town: Redmond,... 2 LastName: Jones, Town: Seattle, ... 3 LastName: Robinson, Town: Portland, ... 4 LastName: Brown, Town: Redmond, ... 5 LastName: Smith, Town: Chicago, ... 6 LastName: Clarke, Town: Portland, ... 7 LastName: Smith, Town, Redmond, ... 8 LastName: Smith, Town: Redmond, ... 9 LastName: Jones, Town: Chicago, ... ... ... 1000 LastName: Clarke, Town: Chicago, ... ... ... Fact Table Secondary Key Customer (LastName) Reference (ID) Brown ID: 4 Clarke ID: 7 Green ID: 6 Jones ID: 2 Jones ID: 9 ... ... Robinson ID: 3 Smith ID: 1 Smith ID: 8 ... ... Secondary Key Customer (Town) Reference (ID) Chicago ID: 5 Chicago ID: 9 ... ... Portland ID: 3 Portland ID: 7 Redmond ID: 1 Redmond ID: 4 Redmond ID: 6 Redmond ID: 8 Seattle ID: 2 ... ... Index Table Health Endpoint Monitoring Implement functional checks within an application that external tools can access through exposed endpoints at regular intervals. This pattern can help to verify that applications and services are performing correctly. For more info, see http://aka.ms/Health-Endpoint-Monitoring-Pattern Port 80 (HTTPS) or 443 (HTTPS) endpoint CDN Application Agent CDN Application SSL ... Health checks Storage Database Service A Service B ... Response time: 50 ms Storage: 5 ms Database: 20 ms ... Storage SSL certificates 200 (OK) Database Gatekeeper Protect applications and services by using a dedicated host instance that acts as a broker between clients and the application or service, validates and sanitizes requests, and passes requests and data between them. This pattern can provide an additional layer of security, and limit the attack surface of the system. For more info, see http://aka.ms/Gatekeeper-Pattern Gatekeeper exposes endpoints to clients Client Gatekeeper validates and sanitizes requests Trusted host accesses service and storage Gatekeeper may be decoupled from trusted host(s) Data Trusted host or Keymaster Services Gatekeeper Federated Identity Delegate authentication to an external identity provider. This pattern can simplify development, minimize the requirement for user administration, and improve the user experience of the application. For more info, see http://aka.ms/Federated-Identity-Pattern Identity provider (IdP) or security token service (STS) Service Consumer 1. Service trusts IdP or STS 4. Consumer presents token to service 2. Consumer authenticates and requests token 3. STS returns token External Configuration Store Move configuration information out of the application deployment package to a centralized location. This pattern can provide opportunities for easier management and control of configuration data, and for sharing configuration data across applications and application instances. For more info, see http://aka.ms/External-Configuration-Store-Pattern Application Application Application External configuration store Local cache Alternative option Cloud storage Database Event Sourcing Use an append-only store to record actions taken on data, rather than the current state, and use the store to materialize the domain objects. In complex domains this can avoid synchronizing the data model and the business domain; improve performance, scalabili- ty, and responsiveness; provide consistency; and provide audit history to enable com- pensating actions. For more info, see http://aka.ms/Event-Sourcing-Pattern External systems and applications Query for current state of entities Shipping information added Cart created Presentation Persisted events Item 1 added Item 1 removed Item 2 added Some options for consuming events Event store Materialized View Cart Cart ID Date Customer Address ... Cart Item Cart ID Item key Item name Quantity ... Published events Replayed events Command and Query Responsibility Segregation (CQRS) Segregate operations that read data from operations that update data by using separate interfaces. This pattern can maximize performance, scalability, and security; support evolution of the system over time through higher flexibility; and prevent update com- mands from causing merge conflicts at the domain level. For more info, see http://aka.ms/CQRS-Pattern Queries (generate DTOs) Read model Write model Date persistence Domain logic Commands Validation Presentation Data store Compute Resource Consolidation Consolidate multiple tasks or operations into a single computational unit. This pattern can increase compute resource utilization, and reduce the costs and management overhead associated with performing compute processing in cloud-hosted applications. For more info, see http://aka.ms/Compute-Resource-Consolidation-Pattern OnStart Fabric controller OnStop Run Run creates tasks and waits for them to complete OnStop cleans up resources used by tasks Role Start event Blob Stop event OnStart initializes resources used by tasks Competing Consumers Enable multiple concurrent consumers to process messages received on the same messaging channel. This pattern enables a system to process multiple messages concur- rently to optimize throughput, to improve scalability and availability, and to balance the workload. For more info, see http://aka.ms/Competing-Consumers-Pattern Application instances - generating messages Consumer service instance pool - processing messages Message queue Compensating Transaction Undo the work performed by a series of steps, which together define an eventually consistent operation, if one or more of the operations fails. Operations that follow the eventual consistency model are commonly found in cloud-hosted applications that implement complex business processes and workflows. For more info, see http://aka.ms/Compensating-Transaction-Pattern Operation steps to create itinerary Compensating transaction to cancel itinerary Reserve room at hotel H1 Compensating logic Cancel room at hotel H1 Counter operations recorded for each step in the long- running transaction Book seat on flight F1 Compensating logic Cancel seat on flight F1 Compensation logic applies business rules to counter- operations Book seat on flight F2 Compensating logic Cancel seat on flight F2 Circuit Breaker For more info, see http://aka.ms/Circuit-Breaker-Pattern Handle faults that may take a variable amount of time to rectify when connecting to a remote service or resource. This pattern can improve the stability and resiliency of an application. Half-Open entry / reset success counter do / if operation succeeds increment success counter return result else return failure exit / Open entry / start timeout timer do / return failure exit / Closed entry / reset failure counter do / if operation succeeds return result else increment failure counter return failure exit / Timeout timer expired Success count threshold reached Failure threshold reached Operation failed Cache-aside For more info, see http://aka.ms/Cache-Aside-Pattern Load data on demand into a cache from a data store. This pattern can improve perfor- mance and also helps to maintain consistency between data held in the cache and the data in the underlying data store. Cache Data store

Upload: nathan-swift

Post on 20-Feb-2017

77 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: MS Cloud Design Patterns Infographic 2015

Windows Azure is an open and flexi-ble cloud platform that enables you to quickly build, deploy and manage applications across a global network of Microsoft-managed datacenters.

Build applications using any lan-guage, tool or framework. You can in-tegrate your public cloud applications with your existing IT environment.

GLOBAL

With multiple data centers worldwide, and a worldwide Content Delivery Net-work, you can build applications that provide the best experience even to the most remote places.

ALWAYS ON

Windows Azure supports a deployment model that enables you to upgrade your application without down-time.

SELF HEALING

Windows Azure provides automatic OS and service patching, built in network load balancing and resiliency to hardware failure. Windows Azure delivers a 99.95% monthly SLA.

SELF-SERVICE

It is a fully automated self-service platform that allows you to provision resources within minutes.

ELASTIC RESOURCES

Quickly scale your resources based on your needs. You only pay for the resources your application uses.

ENTERPRISE READY

Backed by industry certifications for security and compliance, from ISO 27001, SSAE 16, HIPAA BAA and E.U. Model Clauses.

ANY LANGUAGE

Windows Azure allows you to use any language, framework or code editor to build applications, including .NET, PHP, Java, Node.js, Python and Ruby. Client libraries are available on GitHub.

OPEN PROTOCOLS

Windows Azure features and services are exposed using open REST protocols.

CONNECTED

Use the Windows Azure robust messaging capabilities to deliver hybrid solutions that run across the cloud and on-premises. Expand your data center into the cloud with Virtual Networking.

RICH APPLICATION SERVICES

Windows Azure provides a rich set of applications services, including SDKs, caching, messaging and identity.

DATA

You can store data using relational data-bases, NoSQL and unstructured blob storage. You can use Hadoop and busi-ness intelligence services to mine data for insights.

Concept Opener Headline

Closing Headline

H.264 (Baseline, Main, and High Profiles)

MPEG-1

MPEG-2 (Simple and Main Profile)

MPEG-4 v2 (Simple Visual Profile and Advanced Simple Profile)

VC-1 (Simple, Main, and Advanced Profiles)

THE CHOICE IS THEIRSMedia Services provides everything you need to deliver content to a variety of devices, from Xbox and Windows PCs, to MacOS, iOS and Android.

© 2013 Microsoft Corporation. All rights reserved. Created by the Windows Azure Team Email: [email protected] Part No. 098-117628

Like it? Get it.http://gettag.mobi

Cloud Design Patterns: Prescriptive Architecture Guidance for Cloud Applications

Performance and Scalability

Performance is an indication of the responsiveness of a system, while scalability is the ability to gracefully handle increases in load, perhaps through an increase in available resources. Cloud applications, especially in multi-tenant scenarios, typically encounter variable workloads and unpredictable activity peaks and should be able to scale out within limits to meet demand, and scale in when demand decreases. Scalability concerns not just compute instances, but other items such as data stor-age, messaging infrastructure, and more.

Security

Security is the capability of a system to prevent malicious or accidental actions outside of the designed usage, and to prevent disclosure or loss of information. Cloud applications are exposed on the Internet outside trusted on-premises boundaries, are often open to the public, and may serve untrusted users. Applications must be designed and deployed in a way that protects them from malicious attacks, restricts access to only approved users, and protects sensitive data.

Resiliency

Resiliency is the ability of a system to gracefully handle and recover from failures. The nature of cloud hosting, where applications are often multi-tenant, use shared platform services, compete for resources and bandwidth, communicate over the Internet, and run on commodity hardware means there is an increased likelihood that both transient and more permanent faults will arise. Detecting failures, and recovering quickly and efficiently, is necessary to maintain resiliency.

Data Management

Data management is the key element of cloud applications, and influenc-es most of the quality attributes. Data is typically hosted in different locations and across multiple servers for reasons such as performance, scalability or availability, and this can present a range of challenges. For example, data consistency must be maintained, and data will typically need to be synchronized across different locations.

Design and Implementation

Good design encompasses factors such as consistency and coherence in component design and deployment, maintainability to simplify adminis-tration and development, and reusability to allow components and subsystems to be used in other applications and in other scenarios. Decisions made during the design and implementation phase have a huge impact on the quality and the total cost of ownership of cloud hosted applications and services.

Messaging

The distributed nature of cloud applications requires a messaging infra-structure that connects the components and services, ideally in a loosely coupled manner in order to maximize scalability. Asynchronous messag-ing is widely used, and provides many benefits, but also brings challenges such as the ordering of messages, poison message management, idem-potency, and more.

Management and Monitoring

Cloud applications run in a remote datacenter where you do not have full control of the infrastructure or, in some cases, the operating system. This can make management and monitoring more difficult than an on-prem-ises deployment. Applications must expose runtime information that administrators and operators can use to manage and monitor the system, as well as supporting changing business requirements without requiring the application to be stopped or redeployed.

Problem areas in the cloud

Availability

Availability defines the proportion of time that the system is functional and working. It will be affected by system errors, infrastructure problems, malicious attacks, and system load. It is usually measured as a percentage of uptime. Cloud applications typically provide users with a service level agreement (SLA), which means that applications must be designed and implemented in a way that maximizes availability.

This poster depicts common problems in designing cloud applications (below) and patterns that offer guidance (right). The information applies to Microsoft Azure as well as other cloud platforms. The icons at the top of each item represent the problem areas that the pattern relates to. Patterns that include code samples are indicated by this icon:

Visit http://aka.ms/Cloud-Design-Patterns-Sample to download.

http://aka.ms/Availability-Patterns

http://aka.ms/DataManagement-Patterns

http://aka.ms/Design-and-Implementation-Patterns

http://aka.ms/Messaging-Patterns

http://aka.ms/Performance-and-Scalability-Patterns

http://aka.ms/Resiliency-Patterns

http://aka.ms/Security-Patterns

http://aka.ms/Management-and-Monitoring-Patterns

© 2015 Microsoft Corporation. All rights reserved. [email protected]://aka.ms/Cloud-Design-PatternsLike it? Get it.

User

Return token

Request resource

Targetresource

Access resource using token

Check validity of request and

generate key token

12

3

4

Application

Valet Key

For more info, see http://aka.ms/Valet-Key-Pattern

Use a token or key that provides clients with restricted direct access to a specific resource or service in order to offload data transfer operations from the application code. This pattern is particularly useful in applications that use cloud-hosted storage systems or queues, and can minimize cost and maximize scalability and performance.

Control the consumption of resources used by an instance of an application, an individu-al tenant, or an entire service. This pattern can allow the system to continue to function and meet service level agreements, even when an increase in demand places an extreme load on resources.

Throttling

For more info, see http://aka.ms/Throttling-Pattern

Feature C

Resource utilization

Feature B

Feature A

Soft limit ofresource utilization

Maximum capacity

TimeT1 T2

Feature B is suspended to allow sufficient resources for applications to use Feature A and Feature C

Deploy static content to a cloud-based storage service that can deliver these directly to the client. This pattern can reduce the requirement for potentially expensive compute instances.

Static Content Hosting

For more info, see http://aka.ms/Static-Content-Hosting-Pattern

Deliver pages containing links to files in storage service Request files

from storageservice

Container “myresources”styles.ccssitecode.jsdownload.docsamples.zip...

image1.pngimage2.pngimage3.png...

Client

Application

Divide a data store into a set of horizontal partitions or shards. This pattern can improve scalability when storing and accessing large volumes of data.

Sharding

For more info, see http://aka.ms/Sharding-Pattern

Sharding logic:Route requests for tenant 1 to shard ...

...Route requests for tenant 55 to shard A

...Route requests for tenant 227 to shard C

...Route requests for tenant N to shard ...

Query: Find information for tenant 227

Query: Find information for tenant 55

Application instance

Application instance

•••

Shard A Shard B Shard C Shard N

Coordinate a set of actions across a distributed set of services and other remote resourc-es, attempt to transparently handle faults if any of these actions fail, or undo the effects of the work performed if the system cannot recover from a fault. This pattern can add resiliency to a distributed system by enabling it to recover and retry actions that fail due to transient exceptions, long-lasting faults, and process failures.

Scheduler Agent Supervisor

For more info, see http://aka.ms/Scheduler-Agent-Supervisor-Pattern

Supervisor requests that a failed step is reattempted by the Scheduler

Supervisor monitors the status of steps in the State Store and may

update the status of a step

Scheduler organizes and

runs the steps that comprise the task

as a workflow

Scheduler maintains the status of each step in the State

Store as it is started

and completed

A step in the workflow can send a request to an agent to access a remote resource or invoke a

remote service. Requests and responses are typically sent asynchronously

Agent accesses remote resource or service. The agent should include

error handling and retry logic

Scheduler

Agent

Supervisor

Agent

State store

Remoteresource

Remoteservice

Runtime Reconfiguration

For more info, see http://aka.ms/Runtime-Reconfiguration-Pattern

Design an application so that it can be reconfigured without requiring redeployment or restarting the application. This helps to maintain availability and minimize downtime.

Componentor service

Change appliedat runtime

Configuration updated

Change cancelled because it cannot be applied at runtime

Configuration file Restartapplication

Applicationcode

Retry

For more info, see http://aka.ms/Retry-Pattern

Enable an application to handle anticipated, temporary failures when it attempts to connect to a service or network resource by transparently retrying an operation that has previously failed in the expectation that the cause of the failure is transient. This pattern can improve the stability of the application.

Application Hosted service

Application invokes operation on hosted service. The request fails, and the service host responds with HTTP response code 500 (internal server error).

Application waits for a short interval and tries again. The request still fails with HTTP response code 500.

Application waits for a longer interval and tries again. The request succeeds with HTTP response code 200 (OK).

1500

2500

3

1

2

3

200Requests received at

a variable rateMessages processed at a

more consistent rate

Tasks

ServicesMessage queue

Use a queue that acts as a buffer between a task and a service that it invokes in order to smooth intermittent heavy loads that may otherwise cause the service to fail or the task to time out. This pattern can help to minimize the impact of peaks in demand on avail-ability and responsiveness for both the task and the service.

Queue-Based Load Leveling

For more info, see http://aka.ms/Queue-Based-Load-Leveling-Pattern

Priority Queue

For more info, see http://aka.ms/Priority-Queue-Pattern

Prioritize requests sent to services so that requests with a higher priority are received and processed more quickly than those of a lower priority. This pattern is useful in applications that offer different service level guarantees to individual clients.

Message queue for priority 1 messages

Application sends messages to the queue that handles messsages of the designated priority

All messages in a queue have the same priority

Message queue for priority 2 messages

Message queue for priority 3 messages

Application 11 1

22

3 3 3

Consumer

Consumer

Consumer

Consumer

Consumer

Consumer

Pipes and Filters

For more info, see http://aka.ms/Pipes-and-Filters-Pattern

Decompose a task that performs complex processing into a series of discrete elements that can be reused. This pattern can improve performance, scalability, and reusability by allowing task elements that perform the processing to be deployed and scaled independently.

Data from Source 1

Task A Task B Task C

Businesslogic

Transformed data

Transformed data

Components reused in different pipelines

Data from Source 2

Task A Task B Task E

Materialized View

For more info, see http://aka.ms/Materialized-View-Pattern

Generate pre-populated views over the data in one or more data stores when the data is formatted in a way that does not favor the required query operations. This pattern can help to support efficient querying and data extraction, and improve performance.

Materialized view is read-only

Application datais the source

of truth

Materialized View

Application

OrderId ItemId Qty 1 30 2 1 31 3 2 30 2

OrderId Account 1 A 2 B

ItemId Name Stock 30 Shirts 120 31 Pants 143

ItemId Name Stock 30 Shirts 120 31 Pants 143

Coordinate the actions performed by a collection of collaborating task instances in a distributed application by electing one instance as the leader that assumes responsibility for managing the other instances. This pattern can help to ensure that task instances do not conflict with each other, cause contention for shared resources, or inadvertently interfere with the work that other task instances are performing.

Leader Election

For more info, see http://aka.ms/Leader-Election-Pattern

Blob

1

2

3

4

BlobDistributedMutext

Leader role instance

Subordinate role instance

BlobDistributedMutext

BlobDistributedMutext

Create indexes over the fields in data stores that are frequently referenced by query criteria. This pattern can improve query performance by allowing applications to more quickly locate the data to retrieve from a data store.

Index Table

For more info, see http://aka.ms/Index-Table-Pattern

Index Table

Primary Key (Customer ID) Customer Data 1 LastName: Smith, Town: Redmond,... 2 LastName: Jones, Town: Seattle, ... 3 LastName: Robinson, Town: Portland, ... 4 LastName: Brown, Town: Redmond, ... 5 LastName: Smith, Town: Chicago, ... 6 LastName: Clarke, Town: Portland, ... 7 LastName: Smith, Town, Redmond, ... 8 LastName: Smith, Town: Redmond, ... 9 LastName: Jones, Town: Chicago, ... ... ... 1000 LastName: Clarke, Town: Chicago, ... ... ...

Fact Table

Secondary Key Customer (LastName) Reference (ID) Brown ID: 4 Clarke ID: 7 Green ID: 6 Jones ID: 2 Jones ID: 9 ... ... Robinson ID: 3 Smith ID: 1 Smith ID: 8 ... ...

Secondary Key Customer (Town) Reference (ID) Chicago ID: 5 Chicago ID: 9 ... ... Portland ID: 3 Portland ID: 7 Redmond ID: 1 Redmond ID: 4 Redmond ID: 6 Redmond ID: 8 Seattle ID: 2 ... ...

Index Table

Health Endpoint Monitoring

Implement functional checks within an application that external tools can access through exposed endpoints at regular intervals. This pattern can help to verify that applications and services are performing correctly.

For more info, see http://aka.ms/Health-Endpoint-Monitoring-Pattern

Port 80 (HTTPS)or 443 (HTTPS)

endpoint

CDN

Application

Agent

CDN

Application

SSL

...

Health checks

Storage

Database

Service A

Service B

...Response time: 50 ms

Storage: 5 msDatabase: 20 ms

...

Storage

SSL certificates

200 (OK)

Database

Gatekeeper

Protect applications and services by using a dedicated host instance that acts as a broker between clients and the application or service, validates and sanitizes requests, and passes requests and data between them. This pattern can provide an additional layer of security, and limit the attack surface of the system.

For more info, see http://aka.ms/Gatekeeper-Pattern

Gatekeeperexposes endpoints

to clients

Client

Gatekeeper validates and

sanitizes requests

Trusted host accesses

service and storage

Gatekeepermay be decoupled from trusted host(s)

Data

Trusted hostor

Keymaster

Services

Gatekeeper

Federated Identity

Delegate authentication to an external identity provider. This pattern can simplify development, minimize the requirement for user administration, and improve the user experience of the application.

For more info, see http://aka.ms/Federated-Identity-Pattern

Identityprovider (IdP)

or security token service (STS)

ServiceConsumer

1. Service trusts IdP or STS

4. Consumer presents token to

service

2. Consumer authenticates and

requests token

3. STS returns token

External Configuration Store

Move configuration information out of the application deployment package to a centralized location. This pattern can provide opportunities for easier management and control of configuration data, and for sharing configuration data across applications and application instances.

For more info, see http://aka.ms/External-Configuration-Store-Pattern

Application

Application

Application

Externalconfiguration

store

Local cache

Alternativeoption

Cloud storage

Database

Event Sourcing

Use an append-only store to record actions taken on data, rather than the current state, and use the store to materialize the domain objects. In complex domains this can avoid synchronizing the data model and the business domain; improve performance, scalabili-ty, and responsiveness; provide consistency; and provide audit history to enable com-pensating actions.

For more info, see http://aka.ms/Event-Sourcing-Pattern

External systems and applications

Query for current state of entities

Shipping information added

Cart created

Presentation

Persisted events

Item 1 added

Item 1 removed

Item 2 added

Some options for consuming events

Eventstore

Materialized View

CartCart ID

DateCustomerAddress

...

Cart ItemCart ID

Item keyItem nameQuantity

...

Published events

Replayed events

Command and Query Responsibility Segregation (CQRS)Segregate operations that read data from operations that update data by using separate interfaces. This pattern can maximize performance, scalability, and security; support evolution of the system over time through higher flexibility; and prevent update com-mands from causing merge conflicts at the domain level.

For more info, see http://aka.ms/CQRS-Pattern

Queries(generate DTOs)

Read model

Write model

Date persistence

Domain logic

Commands

Validation

Presentation

Data store

Compute Resource Consolidation

Consolidate multiple tasks or operations into a single computational unit. This pattern can increase compute resource utilization, and reduce the costs and management overhead associated with performing compute processing in cloud-hosted applications.

For more info, see http://aka.ms/Compute-Resource-Consolidation-Pattern

OnStart

Fabriccontroller

OnStop

Run

Run creates tasks and waits for them to complete

OnStop cleans up resources used by tasks

Role

Start event

Blob

Stopevent

OnStart initializes resources used by tasks

Competing Consumers

Enable multiple concurrent consumers to process messages received on the same messaging channel. This pattern enables a system to process multiple messages concur-rently to optimize throughput, to improve scalability and availability, and to balance the workload.

For more info, see http://aka.ms/Competing-Consumers-Pattern

Application instances - generating messages

Consumer service instance pool -

processing messages

Message queue

Compensating Transaction

Undo the work performed by a series of steps, which together define an eventually consistent operation, if one or more of the operations fails. Operations that follow the eventual consistency model are commonly found in cloud-hosted applications that implement complex business processes and workflows.

For more info, see http://aka.ms/Compensating-Transaction-Pattern

Operation steps to create itinerary

Compensating transaction to cancel itinerary

Reserve room at hotel H1

Compensating logic

Cancel room at hotel H1

Counter operations recorded for each step in the long-

running transaction

Book seat onflight F1

Compensating logic

Cancel seat onflight F1

Compensation logic applies business rules to counter-

operations

Book seat onflight F2

Compensating logic

Cancel seat onflight F2

Circuit Breaker

For more info, see http://aka.ms/Circuit-Breaker-Pattern

Handle faults that may take a variable amount of time to rectify when connecting to a remote service or resource. This pattern can improve the stability and resiliency of an application.

Half-Openentry / reset success counterdo / if operation succeeds increment success counter return result else return failureexit /

Open

entry / start timeout timerdo / return failureexit /

Closedentry / reset failure counterdo / if operation succeeds return result else increment failure counter return failureexit /

Timeout timerexpired

Success countthreshold reached

Failure threshold reached

Operationfailed

Cache-aside

For more info, see http://aka.ms/Cache-Aside-Pattern

Load data on demand into a cache from a data store. This pattern can improve perfor-mance and also helps to maintain consistency between data held in the cache and the data in the underlying data store.

Cache

Data store