Delen via


Ontwerp zo dat u kunt uitschalen

Toepassingen geschikt maken voor horizontaal schalen

Een belangrijk voordeel van de cloud is elastisch schalen: de mogelijkheid om zoveel capaciteit te gebruiken als u nodig hebt, uitschalen naarmate de belasting toeneemt en inschalen wanneer de extra capaciteit niet nodig is. Ontwerp uw toepassing zodat deze horizontaal kan worden geschaald, exemplaren kunt toevoegen of verwijderen, zodat het aanbod aan de vraag wordt aangepast.

Schaalbaarheid wordt gemeten door de verhouding tussen doorvoerwinst en toename van resources. Idealiter in een goed ontworpen systeem zijn beide getallen proportioneel: een tweevoudige toewijzing van resources verdubbelt de doorvoer. Schaalbaarheid wordt doorgaans beperkt door de introductie van knelpunten of synchronisatiepunten binnen het systeem.

Aanbevelingen

Voorkom persistentie van exemplaren. Er is sprake van persistentie, ook wel sessie-affiniteit genoemd, als aanvragen van dezelfde client altijd naar dezelfde server worden gestuurd. Stickiness beperkt de mogelijkheid van de toepassing om uit te schalen. Verkeer van een gebruiker met een hoog volume wordt bijvoorbeeld niet verdeeld over exemplaren. Oorzaken van persistentie zijn het opslaan van de sessiestatus in het geheugen en het gebruik van machine-specifieke sleutels voor versleuteling. Zorg ervoor dat elk exemplaar elke aanvraag kan afhandelen.

Identificeer knelpunten. Uitschalen is niet voor elk prestatieprobleem een magische oplossing. Als de back-end-database bijvoorbeeld het knelpunt is, lost u het probleem niet op door webservers toe te voegen. Identificeer en verhelp eerst de knelpunten in het systeem in plaats van meer exemplaren los te laten op het probleem. Knelpunten worden meestal veroorzaakt door stateful onderdelen van het systeem.

Verdeel werkbelastingen afhankelijk van de vereisten voor schaalbaarheid. Toepassingen bestaan vaak uit meerdere werkbelastingen, elk met verschillende vereisten voor schaalbaarheid. Zo kan een toepassing een openbare site hebben en een afzonderlijke beheersite. De openbare site kan te maken krijgen met plotselinge pieken in het verkeer, terwijl de beheersite een kleinere, beter voorspelbare belasting heeft.

Ontwerp autonome en losgekoppelde onderdelen die communiceren via asynchrone communicatieprotocollen. In het ideale geval moeten onderdelen hun eigen, onafhankelijke status hebben en gebeurtenissen gebruiken om wijzigingen of activiteiten aan externe onderdelen te communiceren. Dit helpt om alleen het overbelaste onderdeel onafhankelijk te schalen. Implementeer mechanismen voor stroombeheer om verkeer te beheren en om probleemloos te verslechteren. Consumenten moeten hun eigen verbruikssnelheid beheersen. De producenten moeten hun eigen transmissiesnelheid beheersen, met inbegrip van stopzetting. Berichtenwachtrijen zijn goede opties om extra werkbelasting te absorberen en om consumenten in staat te stellen het werk op hun vrije tijd leeg te maken.

Vermijd onnodige communicatie, coördinatie en wachten.

Offload natuurlijk asynchrone taken. Taken zoals het verzenden van e-mailberichten, acties waarvoor de gebruiker geen onmiddellijke reactie nodig heeft en integratie met andere systemen zijn allemaal goede plaatsen om gebruik te maken van asynchrone berichtenpatronen.

Resource-intensieve taken offloaden. Taken die veel CPU-tijd of I/O-resources nodig hebben, moeten indien mogelijk worden verplaatst naar achtergrondtaken om zo de belasting van de front-end te minimaliseren, zodat de afhandeling van aanvragen van gebruikers soepel verloopt.

Automatisch schalen op basis van metrische gegevens over livegebruik en ingebouwde functies voor automatisch schalen gebruiken. Veel services van Azure Compute hebben ingebouwde ondersteuning voor automatisch schalen. Als de toepassing een voorspelbare en normale werkbelasting heeft, kunt u uitschalen volgens een schema, bijvoorbeeld tijdens kantooruren. Als de werkbelasting niet voorspelbaar is, gebruikt u metrische gegevens voor prestaties zoals CPU-gebruik of lengte van de wachtrij met aanvragen om automatisch schalen te activeren. Bekijk toepassingen en hun communicatie om knelpunten te identificeren en nauwkeurigere beslissingen te nemen. Zie Automatisch schalen voor aanbevolen procedures voor automatisch schalen.

Overweeg agressief automatisch schalen voor kritieke werkbelastingen. In het geval van kritieke werkbelastingen is het essentieel om de vraag voor te blijven. Het is beter om bij zware belasting snel nieuwe exemplaren toe te voegen voor het afhandelen van het extra verkeer, om vervolgens geleidelijk terug te schalen.

Houd bij het ontwerp rekening met inschalen. Als u kiest voor elastisch schalen, zijn er ook momenten dat de toepassing gaat inschalen en er dus exemplaren worden verwijderd. De toepassing moet zorgvuldig omgaan met het verwerken van exemplaren. Dit kan onder andere op deze manieren:

  • Luisteren naar afsluitgebeurtenissen (indien beschikbaar) en deze op de juiste manier afhandelen.
  • Clients/consumenten van een service moeten ondersteuning bieden voor de afhandeling van tijdelijke fouten en het opnieuw proberen van bewerkingen.
  • Voor langlopende taken kan het zinvol zijn om het werk op te splitsen, met behulp van controlepunten of het patroon Pijpen en filters.
  • Plaats werkitems in een wachtrij zodat een ander exemplaar het werk kan overnemen als een exemplaar tijdens de verwerking van een item wordt verwijderd.

Overweeg om te schalen voor redundantie. Uitschalen kan de betrouwbaarheid van uw toepassing verbeteren. Overweeg bijvoorbeeld uit te schalen over meerdere beschikbaarheidszones, zoals door zone-redundante services te gebruiken. Deze aanpak kan de doorvoer van uw toepassing verbeteren en tolerantie bieden als één zone een storing ondervindt.

De schaalbaarheid van uw systeem modelleren en optimaliseren. U kunt uw systeem modelleren met behulp van een benadering zoals amdahl's wet. De schaalbaarheid kwantificeren op basis van parameters zoals conflicten en coherentie. Conflicten verwijst naar vertraging als gevolg van wachten of wachtrijen voor gedeelde resources. Coherentie verwijst naar vertraging voor het consistent worden van gegevens. Als u bijvoorbeeld een hoog conflict hebt, geeft sequentiële verwerking aan die kan worden geparallelliseerd, terwijl een hoge coherentie overmatige afhankelijkheden tussen processen voorstelt, waardoor u wordt gevraagd om interacties te minimaliseren. Tijdens het ontwerpen van werkbelastingen kunt u de maximale effectieve capaciteit van uw systeem berekenen om te voorkomen dat er meer vraag is dan de vraag die tot afval leidt.