Cloudontwerppatronen die prestatie-efficiëntie ondersteunen
Wanneer u workloadarchitecturen ontwerpt, moet u branchepatronen gebruiken die algemene uitdagingen aanpakken. Patronen kunnen u helpen bij het maken van opzettelijke afwegingen binnen workloads en het optimaliseren voor het gewenste resultaat. Ze kunnen ook helpen bij het beperken van risico's die afkomstig zijn van specifieke problemen, die van invloed kunnen zijn op betrouwbaarheid, beveiliging, kosten en bewerkingen. Als deze niet worden beperkt, zullen risico's uiteindelijk leiden tot inefficiëntie in de prestaties. Deze patronen worden ondersteund door de praktijk, zijn ontworpen voor cloudschaal- en operationele modellen en zijn inherent leverancierneutraal. Het gebruik van bekende patronen als een manier om uw workloadontwerp te standaardiseren, is een onderdeel van operationele uitmuntendheid.
Veel ontwerppatronen ondersteunen rechtstreeks een of meer architectuurpijlers. Ontwerppatronen die ondersteuning bieden voor de pijler Prestatie-efficiëntie hebben betrekking op schaalbaarheid, het afstemmen van prestaties, taak prioritering en het verwijderen van knelpunten.
Ontwerppatronen voor prestatie-efficiëntie
De volgende tabel bevat een overzicht van cloudontwerppatronen die de doelstellingen van prestatie-efficiëntie ondersteunen.
Patroon | Samenvatting |
---|---|
Asynchroon aanvraag-antwoord | Verbetert de reactiesnelheid en schaalbaarheid van systemen door de aanvraag- en antwoordfasen van interacties te ontkoppelen voor processen die geen onmiddellijke antwoorden nodig hebben. Door een asynchroon patroon te gebruiken, kunt u de gelijktijdigheid aan de serverzijde maximaliseren. U kunt dit patroon gebruiken om te plannen dat werk moet worden voltooid naarmate de capaciteit dit toestaat. |
Back-ends voor front-ends | Hiermee kunt u de servicelaag van een workload individualiseren door afzonderlijke services te maken die exclusief zijn voor een specifieke front-endinterface. Met deze scheiding kunt u optimaliseren op manieren die mogelijk niet mogelijk zijn met een gedeelde servicelaag. Wanneer u afzonderlijke clients op een andere manier verwerkt, kunt u de prestaties optimaliseren voor de beperkingen en functionaliteit van een specifieke client. |
Bulkhead | Introduceert segmentatie tussen onderdelen om de straal van storingen te isoleren. Met dit ontwerp kan elk schot afzonderlijk schaalbaar zijn om te voldoen aan de behoeften van de taak die is ingekapseld in het schot. |
Cache-Aside | Optimaliseert de toegang tot gegevens die vaak worden gelezen door een cache te introduceren die op aanvraag wordt gevuld. De cache wordt vervolgens gebruikt voor volgende aanvragen voor dezelfde gegevens. Dit patroon is vooral handig voor leesintensieve gegevens die niet vaak veranderen en een bepaalde hoeveelheid veroudering kunnen verdragen. Het doel van deze implementatie is om betere prestaties in het systeem in het algemeen te bieden door dit type gegevens naar een cache te offloaden in plaats van het gegevensarchief te gebruiken. |
Choreografie | Coördineert het gedrag van autonome gedistribueerde onderdelen in een workload met behulp van gedecentraliseerde, gebeurtenisgestuurde communicatie. Dit patroon kan een alternatief zijn wanneer prestatieknelpunten optreden in een gecentraliseerde indelingstopologie. |
Circuitonderbreker | Hiermee voorkomt u continue aanvragen voor een defecte of niet-beschikbare afhankelijkheid. Een benadering voor opnieuw proberen bij fouten kan leiden tot overmatig resourcegebruik tijdens het herstel van afhankelijkheid en kan ook de prestaties overbelasten van een afhankelijkheid die herstel probeert uit te voeren. |
Claimcontrole | Hiermee worden gegevens gescheiden van de berichtenstroom, zodat u de gegevens met betrekking tot een bericht afzonderlijk kunt ophalen. Dit patroon verbetert de efficiëntie en prestaties van berichtuitgevers, abonnees en de berichtenbus zelf wanneer het systeem grote gegevenspayloads verwerkt. Het werkt door de grootte van berichten te verkleinen en ervoor te zorgen dat gebruikers alleen nettoladinggegevens ophalen als dat nodig is en op een geschikt moment. |
Concurrerende consumenten | Hiermee past u gedistribueerde en gelijktijdige verwerking toe om items in een wachtrij efficiënt te verwerken. Dit model ondersteunt het distribueren van belasting over alle consumentenknooppunten en dynamisch schalen op basis van de diepte van de wachtrij. |
Consolidatie van berekenbronnen | Optimaliseert en consolideert rekenresources door de dichtheid te verhogen. Dit patroon combineert meerdere toepassingen of onderdelen van een workload in een gedeelde infrastructuur. Deze consolidatie maximaliseert het gebruik van rekenresources door gebruik te maken van reserve-knooppuntcapaciteit om overprovisioning te verminderen. Containerorchestrators zijn een veelvoorkomend voorbeeld. Grote (verticaal geschaalde) rekeninstanties worden vaak gebruikt in de resourcegroep voor deze infrastructuren. |
Scheiding van verantwoordelijkheid van opdracht en query (CQRS) | Hiermee worden de lees- en schrijfbewerkingen van het gegevensmodel van een toepassing gescheiden. Deze scheiding maakt gerichte prestaties en schaaloptimalisaties mogelijk voor het specifieke doel van elke bewerking. Dit ontwerp is het handigst voor toepassingen met een hoge verhouding tussen lezen en schrijven. |
Implementatiestempels | Biedt een benadering voor het vrijgeven van een specifieke versie van een toepassing en de bijbehorende infrastructuur als een gecontroleerde implementatie-eenheid, op basis van de veronderstelling dat dezelfde of verschillende versies gelijktijdig worden geïmplementeerd. Dit patroon komt vaak overeen met de gedefinieerde schaaleenheden in uw workload: omdat er meer capaciteit nodig is dan wat één schaaleenheid biedt, wordt er een extra implementatiestempel geïmplementeerd om uit te schalen. |
Gebeurtenisbronnen | Statuswijziging wordt behandeld als een reeks gebeurtenissen en legt deze vast in een onveranderbaar logboek dat alleen kan worden toegevoegd. Afhankelijk van uw workload kan dit patroon, meestal gecombineerd met CQRS, een geschikt domeinontwerp en strategische momentopnamen, de prestaties verbeteren. Prestatieverbeteringen zijn het gevolg van de atomische toevoegbewerkingen en het vermijden van databasevergrendeling voor schrijf- en leesbewerkingen. |
Federatieve identiteit | Delegeert vertrouwensrelatie naar een id-provider die zich buiten de workload voor het beheren van gebruikers en het verstrekken van verificatie voor uw toepassing. Wanneer u gebruikersbeheer en verificatie offload, kunt u toepassingsresources besteden aan andere prioriteiten. |
Gatekeeper | Offloads van aanvraagverwerking die specifiek is voor het afdwingen van beveiliging en toegangsbeheer voor en na het doorsturen van de aanvraag naar een back-endknooppunt. Dit patroon wordt vaak gebruikt om beperking op gatewayniveau te implementeren in plaats van snelheidscontroles op knooppuntniveau te implementeren. De status van de coördinatiesnelheid tussen alle knooppunten is niet inherent goed. |
Aggregatie van gateway | Vereenvoudigt clientinteracties met uw workload door aanroepen naar meerdere back-endservices in één aanvraag samen te voegen. Dit ontwerp kan minder latentie veroorzaken dan een ontwerp waarbij de client meerdere verbindingen tot stand brengt. Caching is ook gebruikelijk in aggregatie-implementaties, omdat het aanroepen naar back-endsystemen wordt geminimaliseerd. |
Offloading van gateway | Offload aanvraagverwerking naar een gatewayapparaat voor en na het doorsturen van de aanvraag naar een back-endknooppunt. Als u een offloading-gateway toevoegt aan het aanvraagproces, kunt u minder resources per knooppunt gebruiken omdat de functionaliteit op de gateway is gecentraliseerd. U kunt de implementatie van de ge offloaded functionaliteit onafhankelijk van de toepassingscode optimaliseren. De door het offloadplatform geleverde functionaliteit is waarschijnlijk al zeer goed presterend. |
Routering van gateway | Routeert binnenkomende netwerkaanvragen naar verschillende back-endsystemen op basis van aanvraagintenties, bedrijfslogica en beschikbaarheid van back-end. Met gatewayroutering kunt u verkeer verdelen over knooppunten in uw systeem om de belasting te verdelen. |
Geode | Hiermee worden systemen geïmplementeerd die werken in actief-actief-beschikbaarheidsmodi in meerdere geografische gebieden. Dit patroon maakt gebruik van gegevensreplicatie ter ondersteuning van het ideaal dat elke client verbinding kan maken met elk geografisch exemplaar. U kunt deze gebruiken om uw toepassing te bedienen vanuit een regio die zich het dichtst bij uw gedistribueerde gebruikersbestand bevindt. Dit vermindert de latentie door langeafstandsverkeer te elimineren en omdat u de infrastructuur alleen deelt met gebruikers die momenteel dezelfde geode gebruiken. |
Eindpuntstatusbewaking | Biedt een manier om de status of status van een systeem te bewaken door een eindpunt weer te geven dat speciaal voor dat doel is ontworpen. U kunt deze eindpunten gebruiken om de taakverdeling te verbeteren door verkeer te routeren naar alleen knooppunten die zijn geverifieerd als in orde. Met aanvullende configuratie kunt u ook metrische gegevens ophalen over de beschikbare knooppuntcapaciteit. |
Indextabel | Optimaliseert het ophalen van gegevens in gedistribueerde gegevensarchieven door clients in staat te stellen metagegevens op te zoeken, zodat gegevens rechtstreeks kunnen worden opgehaald, waardoor volledige scans van het gegevensarchief niet hoeven te worden uitgevoerd. Clients worden naar hun shard, partitie of eindpunt verwezen, waardoor dynamische gegevenspartitionering kan worden ingeschakeld voor prestatieoptimalisatie. |
Gerealiseerde weergave | Maakt gebruik van vooraf gecomputeerde weergaven van gegevens om het ophalen van gegevens te optimaliseren. In de gerealiseerde weergaven worden de resultaten van complexe berekeningen of query's opgeslagen zonder dat de database-engine of client voor elke aanvraag opnieuw moet worden berekend. Dit ontwerp vermindert het totale resourceverbruik. |
Wachtrij met prioriteit | Zorgt ervoor dat items met een hogere prioriteit worden verwerkt en voltooid vóór items met een lagere prioriteit. Door items te scheiden op basis van bedrijfsprioriteit, kunt u prestatie-inspanningen richten op het meest tijdgevoelige werk. |
Uitgever/abonnee | Koppelt onderdelen van een architectuur los door directe client-naar-service- of client-to-services-communicatie te vervangen door communicatie via een tussenliggende berichtenbroker of event bus. Door uitgevers los te koppelen van consumenten, kunt u de berekening en code specifiek optimaliseren voor de taak die de consument moet uitvoeren voor het specifieke bericht. |
Load Leveling op basis van wachtrij | Hiermee bepaalt u het niveau van binnenkomende aanvragen of taken door deze in een wachtrij te bufferen en de wachtrijprocessor deze in een gecontroleerd tempo te laten verwerken. Deze benadering maakt opzettelijk ontwerp van doorvoerprestaties mogelijk, omdat de opname van aanvragen niet hoeft te correleren met de snelheid waarmee ze worden verwerkt. |
Scheduler Agent Supervisor | verdeelt en distribueert taken efficiënt over een systeem op basis van factoren die waarneembaar zijn in het systeem. Dit patroon maakt gebruik van metrische gegevens over prestaties en capaciteit om het huidige gebruik te detecteren en taken te routeren naar een agent met capaciteit. U kunt het ook gebruiken om de uitvoering van werk met een hogere prioriteit te prioriteren boven werk met een lagere prioriteit. |
Sharding | Hiermee wordt de belasting naar een specifieke logische bestemming om een specifieke aanvraag af te handelen, waardoor colocatie voor optimalisatie mogelijk wordt. Wanneer u sharding gebruikt in uw schaalstrategie, worden de gegevens of verwerking geïsoleerd tot een shard, zodat het alleen om resources concurreert met andere aanvragen die naar die shard worden omgeleid. U kunt ook sharding gebruiken om te optimaliseren op basis van geografie. |
Sidecar | Breidt de functionaliteit van een toepassing uit door niet-primaire of kruislingse taken in te kapselen in een begeleidend proces dat naast de hoofdtoepassing bestaat. U kunt kruislingse taken verplaatsen naar één proces dat kan worden geschaald over meerdere exemplaren van het hoofdproces, waardoor u minder dubbele functionaliteit hoeft te implementeren voor elk exemplaar van de toepassing. |
Hosting van statische inhoud | Optimaliseert de levering van statische inhoud aan workloadclients met behulp van een hostingplatform dat voor dat doel is ontworpen. Het offloaden van verantwoordelijkheid naar een externe host helpt congestie te beperken en stelt u in staat om uw toepassingsplatform alleen te gebruiken voor het leveren van bedrijfslogica. |
Beperking | Hiermee worden limieten opgelegd aan de snelheid of doorvoer van binnenkomende aanvragen naar een resource of onderdeel. Wanneer er veel vraag is naar het systeem, helpt dit patroon congestie te verminderen die kan leiden tot prestatieknelpunten. U kunt het ook gebruiken om proactief ruisscenario's voor buren te voorkomen. |
Valetsleutel | Verleent beveiligingsbeperkingen toegang tot een resource zonder een tussenliggende resource te gebruiken om de toegang via een proxy te gebruiken. Als u dit doet, wordt de verwerking offload als een exclusieve relatie tussen de client en de resource zonder dat er een ambassadeur-onderdeel nodig is dat alle clientaanvragen op een performante manier moet verwerken. Het voordeel van het gebruik van dit patroon is het belangrijkst wanneer de proxy geen waarde toevoegt aan de transactie. |
Volgende stappen
Bekijk de cloudontwerppatronen die ondersteuning bieden voor de andere Azure Well-Architected Framework-pijlers: