CloudontwerppatronenCloud Design Patterns

Deze ontwerppatronen zijn nuttig voor het bouwen van betrouwbare, schaalbare en veilige toepassingen in de cloud.These design patterns are useful for building reliable, scalable, secure applications in the cloud.

Elk patroon beschrijft het probleem dat met het patroon wordt opgelost, overwegingen voor het toepassen van het patroon en een voorbeeld op basis van Microsoft Azure.Each pattern describes the problem that the pattern addresses, considerations for applying the pattern, and an example based on Microsoft Azure. De meeste patronen bevatten codevoorbeelden of codefragmenten die laten zien hoe het patroon kan worden geïmplementeerd in Azure.Most of the patterns include code samples or snippets that show how to implement the pattern on Azure. Het merendeel van de patronen is echter relevant voor elk gedistribueerd systeem, ongeacht of dit wordt gehost in Azure of op andere cloudplatforms.However, most of the patterns are relevant to any distributed system, whether hosted on Azure or on other cloud platforms.

Aandachtspunten voor cloudontwikkelingChallenges in cloud development

Availability

BeschikbaarheidAvailability

Beschikbaarheid is het deel van de tijd dat het systeem functioneel en werkend is, meestal uitgedrukt als een percentage van uptime.Availability is the proportion of time that the system is functional and working, usually measured as a percentage of uptime. De beschikbaarheid kan worden beïnvloed door systeemfouten, infrastructuurproblemen, schadelijke aanvallen en systeembelasting.It can be affected by system errors, infrastructure problems, malicious attacks, and system load. Cloudtoepassingen worden meestal met een SLA (Service Level Agreement) aangeboden aan gebruikers, wat betekent dat toepassingen moeten zijn ontworpen voor een maximale beschikbaarheid.Cloud applications typically provide users with a service level agreement (SLA), so applications must be designed to maximize availability.

Data Management

GegevensbeheerData Management

Gegevensbeheer is het belangrijkste element van cloudtoepassingen en is van invloed op vrijwel alle kwaliteitskenmerken.Data management is the key element of cloud applications, and influences most of the quality attributes. Gegevens worden meestal op verschillende locaties en op meerdere servers gehost vanwege redenen zoals prestaties, schaalbaarheid en beschikbaarheid. Het moge duidelijk zijn dat dit nogal wat uitdagingen kan opleveren.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. Zo is het bijvoorbeeld nodig om consistentie van de gegevens te waarborgen en daarnaast moeten gegevens doorgaans over verschillende locaties worden gesynchroniseerd.For example, data consistency must be maintained, and data will typically need to be synchronized across different locations.

Design and Implementation

Ontwerp en implementatieDesign and Implementation

Een goed ontwerp heeft te maken met factoren zoals consistentie en samenhang in het ontwerp en de implementatie van componenten, goede voorzieningen voor onderhoud om het beheer en de ontwikkeling te vereenvoudigen, en herbruikbaarheid om onderdelen en subsystemen te kunnen gebruiken in andere toepassingen en andere scenario's.Good design encompasses factors such as consistency and coherence in component design and deployment, maintainability to simplify administration and development, and reusability to allow components and subsystems to be used in other applications and in other scenarios. Beslissingen die worden genomen tijdens de ontwerp- en implementatiefase hebben een enorme invloed op de kwaliteit en de totale eigendomskosten van in de cloud gehoste toepassingen en services.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

BerichtenMessaging

De gedistribueerde aard van cloudtoepassingen vereist een infrastructuur voor berichten die de onderdelen en services met elkaar verbindt, bij voorkeur op een niet-strikte manier om de schaalbaarheid te maximaliseren.The distributed nature of cloud applications requires a messaging infrastructure that connects the components and services, ideally in a loosely coupled manner in order to maximize scalability. De techniek van asynchrone berichten wordt veel gebruikt en biedt dan ook veel voordelen. Er zijn echter ook punten van aandacht, zoals de positie van berichten, het beheer van onverwerkbare berichten en idempotentie.Asynchronous messaging is widely used, and provides many benefits, but also brings challenges such as the ordering of messages, poison message management, idempotency, and more

Management and Monitoring

Beheer en controleManagement and Monitoring

Cloudtoepassingen worden uitgevoerd in een datacenter waar u geen volledige controle hebt over de infrastructuur of, in sommige gevallen, het besturingssysteem.Cloud applications run in in a remote datacenter where you do not have full control of the infrastructure or, in some cases, the operating system. Hierdoor kan het beheer en de controle lastiger zijn dan bij een on-premises implementatie.This can make management and monitoring more difficult than an on-premises deployment. Toepassingen moeten runtime-gegevens vrijgeven die door beheerders en operators kunnen worden gebruikt om het systeem te beheren en controleren, maar ook om veranderende bedrijfsvereisten en aanpassingen te ondersteunen zonder dat de toepassing hoeft te worden gestopt of opnieuw moet worden geïmplementeerd.Applications must expose runtime information that administrators and operators can use to manage and monitor the system, as well as supporting changing business requirements and customization without requiring the application to be stopped or redeployed.

Performance and Scalability

Prestaties en schaalbaarheidPerformance and Scalability

Prestaties verwijst naar de mogelijkheid van een systeem om iedere actie binnen een bepaald tijdsinterval uit te voeren, terwijl schaalbaarheid verwijst naar de mogelijkheid van een systeem om de toename van de werkbelasting op te vangen zonder dat dit gevolgen heeft voor de prestaties of om de beschikbare resources direct uit te breiden.Performance is an indication of the responsiveness of a system to execute any action within a given time interval, while scalability is ability of a system either to handle increases in load without impact on performance or for the available resources to be readily increased. Cloudtoepassingen krijgen meestal te maken met wisselende werkbelastingen en pieken in de activiteit.Cloud applications typically encounter variable workloads and peaks in activity. Om hier een voorspelling op los te laten, zeker in een scenario met meerdere tenants, is vrijwel onmogelijk.Predicting these, especially in a multi-tenant scenario, is almost impossible. Toepassingen moeten daarom binnen een afgebakend kader kunnen uitschalen om pieken in de vraag op te vangen en inschalen als de vraag afneemt.Instead, applications should be able to scale out within limits to meet peaks in demand, and scale in when demand decreases. Rekenprocessen zijn niet het enige probleem als het gaat om schaalbaarheid. Het is ook belangrijk om te kijken naar andere elementen, zoals gegevensopslag en de infrastructuur voor berichtenuitwisseling.Scalability concerns not just compute instances, but other elements such as data storage, messaging infrastructure, and more.

Resiliency

FlexibiliteitResiliency

Flexibiliteit is het vermogen van een systeem om op een acceptabele manier te herstellen van fouten en te kunnen blijven functioneren.Resiliency is the ability of a system to gracefully handle and recover from failures. De aard van hosting in de cloud, waarbij toepassingen vaak meerdere tenants hebben, gedeelde platformservices gebruiken, concurreren om resources en bandbreedte, communiceren via internet en worden uitgevoerd op doorsnee hardware, betekent dat er een grotere kans is op zowel tijdelijke als meer permanente fouten.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. Fouten opsporen, en hiervan snel en efficiënt herstellen, is vereist voor het behouden van tolerantie.Detecting failures, and recovering quickly and efficiently, is necessary to maintain resiliency.

Security

BeveiligingSecurity

Beveiliging verwijst naar de mogelijkheid van een systeem om kwaadwillende of onbedoeld onjuiste acties buiten het ontwerpkader te voorkomen om zo openbaarmaking of verlies van gegevens te voorkomen.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. Cloudtoepassingen worden op internet beschikbaar gesteld buiten de grenzen van de vertrouwde on-premises omgeving, zijn vaak voor iedereen toegankelijk en kunnen diensten aanbieden aan niet-vertrouwde gebruikers.Cloud applications are exposed on the Internet outside trusted on-premises boundaries, are often open to the public, and may serve untrusted users. Toepassingen moeten daarom zo worden ontworpen en geïmplementeerd dat ze worden beschermd tegen aanvallen, gegevens alleen vrijgeven aan goedgekeurde gebruikers en gevoelige gegevens beschermen.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.

Catalogus van patronenCatalog of patterns

PatroonPattern SamenvattingSummary
AmbassadeurAmbassador Helper-services maken die netwerkaanvragen verzenden namens een consumentservice of toepassing.Create helper services that send network requests on behalf of a consumer service or application.
Anti-corruptielaagAnti-Corruption Layer Een toegangspunt of een adapterlaag implementeren tussen een moderne toepassing en een oud systeem.Implement a façade or adapter layer between a modern application and a legacy system.
Back-ends voor front-endsBackends for Frontends Afzonderlijke back-endservices maken om te worden verbruikt door specifieke front-endtoepassingen of -interfaces.Create separate backend services to be consumed by specific frontend applications or interfaces.
BulkheadBulkhead Elementen van een toepassing in groepen isoleren zodat bij uitval van het ene element het andere element blijft functioneren.Isolate elements of an application into pools so that if one fails, the others will continue to function.
Cache-AsideCache-Aside Gegevens op verzoek in een cache laden vanuit een gegevensarchief.Load data on demand into a cache from a data store
CircuitonderbrekerCircuit Breaker Fouten afhandelen waarvoor een wisselende hoeveelheid tijd nodig is om ze op te lossen bij het verbinden met een externe service of resource.Handle faults that might take a variable amount of time to fix when connecting to a remote service or resource.
CQRSCQRS Bewerkingen die gegevens lezen scheiden van bewerkingen die gegevens bijwerken met behulp van afzonderlijke interfaces.Segregate operations that read data from operations that update data by using separate interfaces.
Compenserende transactieCompensating Transaction Werk ongedaan maken dat is uitgevoerd door een reeks stappen, die samen een uiteindelijk consistent bewerking definiëren.Undo the work performed by a series of steps, which together define an eventually consistent operation.
Concurrerende consumentenCompeting Consumers Meerdere gelijktijdige consumenten inschakelen voor het verwerken van berichten die op hetzelfde kanaal worden ontvangen.Enable multiple concurrent consumers to process messages received on the same messaging channel.
Consolidatie van berekenbronnenCompute Resource Consolidation Meerdere taken of bewerkingen consolideren in een enkele rekenkundige eenheid.Consolidate multiple tasks or operations into a single computational unit
GebeurtenisbronnenEvent Sourcing Een archief gebruiken waaraan alleen gegevens kunnen worden toegevoegd om de volledige reeks gebeurtenissen vast te leggen die de acties beschrijven die op gegevens in een domein worden uitgevoerd.Use an append-only store to record the full series of events that describe actions taken on data in a domain.
Extern configuratiearchiefExternal Configuration Store Configuratiegegevens vanuit het implementatiepakket voor de toepassing verplaatsen naar een centrale locatie.Move configuration information out of the application deployment package to a centralized location.
Federatieve identiteitFederated Identity Verificatie delegeren aan een externe id-provider.Delegate authentication to an external identity provider.
GatekeeperGatekeeper Toepassingen en services beveiligen met behulp van een toegewezen instantie van de host die fungeert als een broker tussen clients en de toepassing of service, die aanvragen valideert en opschoont, en die aanvragen en gegevens tussen deze twee componenten doorgeeft.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.
Aggregatie van gatewayGateway Aggregation Een gateway gebruiken om verschillende afzonderlijke aanvragen samen te voegen in één aanvraag.Use a gateway to aggregate multiple individual requests into a single request.
Offloading van gatewayGateway Offloading Gedeelde of gespecialiseerde servicefunctionaliteit offloaden naar een gatewayproxy.Offload shared or specialized service functionality to a gateway proxy.
Routering van gatewayGateway Routing Aanvragen naar meerdere services routeren met behulp van één eindpunt.Route requests to multiple services using a single endpoint.
EindpuntstatusbewakingHealth Endpoint Monitoring Functionele controles implementeren in een toepassing die externe hulpprogramma's met regelmatige intervallen kunnen benaderen via beschikbaar gestelde eindpunten.Implement functional checks in an application that external tools can access through exposed endpoints at regular intervals.
IndextabelIndex Table Indexen maken van de velden in gegevensarchieven waarnaar vaak wordt verwezen door query's.Create indexes over the fields in data stores that are frequently referenced by queries.
Selectie van leiderLeader Election De acties coördineren die worden uitgevoerd door een reeks samenwerkende taakexemplaren in een gedistribueerde toepassing door één exemplaar te selecteren als de leider, die vervolgens de verantwoordelijkheid krijgt voor het beheren van de andere exemplaren.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.
Gerealiseerde weergaveMaterialized View Vooraf ingevulde weergaven met de gegevens uit een of meer gegevensarchieven genereren wanneer de gegevens niet perfect zijn opgemaakt voor vereiste querybewerkingen.Generate prepopulated views over the data in one or more data stores when the data isn't ideally formatted for required query operations.
Pijpen en filtersPipes and Filters Een taak waarmee een complexe verwerking wordt uitgevoerd, opsplitsen in een reeks afzonderlijke elementen die kunnen worden hergebruikt.Break down a task that performs complex processing into a series of separate elements that can be reused.
Wachtrij met prioriteitPriority Queue Prioriteit geven aan aanvragen die worden verzonden naar services, zodat aanvragen met een hogere prioriteit sneller worden ontvangen en verwerkt dan aanvragen met een lagere prioriteit.Prioritize requests sent to services so that requests with a higher priority are received and processed more quickly than those with a lower priority.
Load Leveling op basis van wachtrijQueue-Based Load Leveling Een wachtrij gebruiken die fungeert als een buffer tussen een taak en een service die wordt aangeroepen om onregelmatige zware belastingen soepel te verwerken.Use a queue that acts as a buffer between a task and a service that it invokes in order to smooth intermittent heavy loads.
Opnieuw proberenRetry Een toepassing de mogelijkheid bieden voor het afhandelen van verwachte, tijdelijke fouten als er wordt geprobeerd om verbinding te maken met een service of netwerkresource door een bewerking die eerder is mislukt, transparant opnieuw te proberen.Enable an application to handle anticipated, temporary failures when it tries to connect to a service or network resource by transparently retrying an operation that's previously failed.
Scheduler Agent SupervisorScheduler Agent Supervisor Een set acties coördineren binnen een gedistribueerde set services en andere externe resources.Coordinate a set of actions across a distributed set of services and other remote resources.
ShardingSharding Een gegevensarchief onderverdelen in een set met horizontale partities of shards.Divide a data store into a set of horizontal partitions or shards.
SidecarSidecar Onderdelen van een toepassing implementeren in een afzonderlijk proces of container om isolatie en inkapseling mogelijk te maken.Deploy components of an application into a separate process or container to provide isolation and encapsulation.
Hosting van statische inhoudStatic Content Hosting Statische inhoud implementeren naar een opslagservice in de cloud die de inhoud rechtstreeks aan de client kan leveren.Deploy static content to a cloud-based storage service that can deliver them directly to the client.
StranglerStrangler Een verouderd systeem incrementeel migreren door specifieke functionaliteit geleidelijk te vervangen door nieuwe toepassingen en services.Incrementally migrate a legacy system by gradually replacing specific pieces of functionality with new applications and services.
BeperkingThrottling Het verbruik beheren van resources die worden gebruikt door een exemplaar van een toepassing, een afzonderlijke tenant of een hele service.Control the consumption of resources used by an instance of an application, an individual tenant, or an entire service.
ValetsleutelValet Key Een token of sleutel gebruiken die clients beperkte, directe toegang biedt tot een specifieke resource of service.Use a token or key that provides clients with restricted direct access to a specific resource or service.