Aanbevelingen voor het optimaliseren van schalen en partitioneren
Is van toepassing op deze aanbeveling voor de controlelijst voor prestatie-efficiëntie van Azure Well-Architected Framework:
PE:05 | Schaling en partitionering optimaliseren. Neem betrouwbare en gecontroleerde schaal- en partitionering op. Het ontwerp van de schaaleenheid van de workload is de basis van de strategie voor schalen en partitioneren. |
---|
In deze handleiding worden de aanbevelingen beschreven voor het schalen en partitioneren van een workload. Schalen is de mogelijkheid om de resources die aan een workload zijn toegewezen, te verhogen of te verlagen op basis van de vraag. Partitioneren omvat het opsplitsen van de workload in kleinere, beheerbare eenheden om gegevens en verwerking over meerdere resources te verdelen. Een workload die niet schaalt of partitioneert, kan slechte prestaties ondervinden in perioden met veel vraag en onderbenutte capaciteit in perioden met weinig vraag.
Definities
Termijn | Definitie |
---|---|
Automatisch schalen | Een functie waarmee de capaciteitslimieten van een service automatisch worden aangepast op basis van vooraf gedefinieerde configuraties, zodat deze naar behoefte omhoog of omlaag kan worden geschaald. |
Capaciteit | De bovengrens of maximumcapaciteit van een bepaalde service of functie. |
Clientaffiniteit (sessieaffiniteit) | De opzettelijke routering van aanvragen van één client naar een exemplaar van één server om consistent sessiebeheer te garanderen. |
Consistentie (gedistribueerde database) | De uniformiteit van gegevens over meerdere knooppunten in een gedistribueerde database, zodat alle replica's op een bepaald moment dezelfde gegevens hebben. |
Consistentie (relationele database) | De eigenschap van een transactie die een database van de ene geldige status naar de andere brengt, met behoud van gegevensintegriteit. |
Consistentieniveau | Een configuratie die definieert hoe en wanneer gegevens worden gerepliceerd in een gedistribueerd databasesysteem, waarbij de balans tussen consistentie en prestaties wordt bepaald. |
Gegevensvergrendeling | Een mechanisme dat wordt gebruikt om gelijktijdige updates van dezelfde gegevens te voorkomen. |
Horizontale schaalaanpassing | Een schaalbenadering waarmee instanties van een bepaald type resource worden toegevoegd. |
Optimistische gelijktijdigheid | Een benadering voor het bijwerken van databases waarbij momentopnamen worden gebruikt om updates uit te voeren in plaats van traditionele vergrendelingsmechanismen. |
Partitionering | Het proces van het fysiek verdelen van gegevens in afzonderlijke gegevensarchieven. |
Schaalbaarheid | De mogelijkheid van een workload om de capaciteitslimieten dynamisch te wijzigen om tegemoet te komen aan verschillende vraagniveaus. |
Schaaleenheid | Een groep resources die proportioneel samen worden geschaald. |
Statusaffiniteit | De opslag van clientsessiegegevens op één server, zodat dezelfde server volgende aanvragen van dezelfde client verwerkt. |
Verticale schaalaanpassing | Een schaalbenadering waarmee rekencapaciteit wordt toegevoegd aan bestaande resources. |
Belangrijke ontwerpstrategieën
Zowel schalen als partitioneren dragen bij aan de efficiëntie van de prestaties door ervoor te zorgen dat resources effectief worden gebruikt en dat de workload verschillende belastingen kan verwerken. Deze procedures zijn met name belangrijk in cloudomgevingen waar toepassingen flexibel moeten zijn en moeten kunnen worden aangepast aan veranderende eisen. Schalen zorgt ervoor dat u de workloadcapaciteit kunt uitbreiden om te voldoen aan de toenemende vraag. Met partitionering kunt u taken of gegevens efficiënt verdelen om aan deze groeiende behoeften te voldoen. De basis van beide processen is het ontwerp van de schaaleenheid van de workload. Het bepaalt hoe uw workload moet groeien en taken moeten verdelen. Door een betrouwbare en gecontroleerde benadering voor schalen en partitioneren op te nemen, kunt u potentiële inefficiënties van workloads omzeilen.
Schalen optimaliseren
Schalen optimaliseren is het proces van het aanpassen van het aantal servers, exemplaren of resources om te voldoen aan de fluctuerende vereisten van een workload. Het zorgt ervoor dat de workload meer verkeer of vraag kan verwerken zonder prestatievermindering of downtime.
Een schaalstrategie kiezen
Bij het kiezen van een schaalstrategie moet u kiezen tussen verticale of horizontale methoden om de capaciteit van een workload te verbeteren op basis van de specifieke vereisten. Het selecteren van de juiste strategie zorgt ervoor dat resources efficiënt worden aangepast om te voldoen aan de workloadvereisten, zonder overmatig gebruik of verspilling. Als u de juiste schaalstrategie wilt kiezen, moet u inzicht hebben in de gebruiksscenario's voor verticaal en horizontaal schalen en hoe deze voldoen aan de behoeften van uw workload.
Inzicht in verticaal schalen. Met verticaal schalen kunt u de capaciteit van één resource verhogen, zoals een upgrade naar een grotere server of instantiegrootte. Verticaal schalen is handig wanneer de workload kan profiteren van meer verwerkingskracht, geheugen of andere resources binnen één exemplaar. Verticaal schalen is geschikt voor workloads die niet eenvoudig in kleinere delen kunnen worden verdeeld of wanneer de toepassingsarchitectuur geen ondersteuning biedt voor horizontaal schalen.
Inzicht in horizontaal schalen. Met horizontaal schalen kunt u meer exemplaren of resources toevoegen om de workload over meerdere servers te verdelen. Horizontaal schalen biedt voordelen zoals verbeterde tolerantie, verhoogde capaciteit en de mogelijkheid om toegenomen verkeer of vraag naar werkbelasting aan te kunnen. Het is effectief voor cloudeigen toepassingen die zijn ontworpen om op meerdere knooppunten te worden uitgevoerd. Horizontaal schalen is geschikt voor workloads die kunnen worden onderverdeeld in kleinere delen die onafhankelijk van elkaar worden uitgevoerd.
Inzicht in de workload. De geschiktheid van verticaal of horizontaal schalen is afhankelijk van de specifieke kenmerken en vereisten van de workload. Regelmatige prestatiebewaking en -tests op de volgende gebieden kunnen helpen om de schaalstrategie in de loop van de tijd te optimaliseren:
Vereisten: krijg inzicht in de specifieke vereisten van de workload door rekening te houden met factoren zoals resourcevereisten, schaalbaarheidsbehoeften en de beperkingen van de workload.
Schaaleenheden: maak een schaaleenheidontwerp voor onderdelen die naar verwachting samen moeten worden geschaald. Voor 100 virtuele machines zijn bijvoorbeeld mogelijk twee wachtrijen en drie opslagaccounts nodig om de extra werkbelasting af te handelen. De schaaleenheid bestaat uit 100 virtuele machines, twee wachtrijen en drie opslagaccounts. U moet alle onderdelen die schommelingen in capaciteitsgebruik ondervinden, onafhankelijk schalen.
Architectuur: Evalueer het ontwerp van de toepassingsarchitectuur. Sommige toepassingen zijn mogelijk inherent ontworpen om horizontaal te schalen, met stateless onderdelen die eenvoudig over meerdere exemplaren kunnen worden gedistribueerd. Andere toepassingen hebben mogelijk stateful onderdelen of afhankelijkheden die verticaal schalen geschikter maken. Evalueer de vereisten voor schaalbaarheid en elasticiteit van de workload.
Infrastructuur ontwerpen om te schalen
Het ontwerpen van infrastructuur op schaal is het proces van het maken van een architectuur die kan omgaan met toenemende eisen en werkbelasting door resources toe te voegen of aan te passen indien nodig. Het omvat het plannen en implementeren van oplossingen die horizontaal of verticaal kunnen worden geschaald om groei mogelijk te maken. Strategieën omvatten het vermijden van singletons die knelpunten kunnen worden en het loskoppelen van toepassingsonderdelen om onafhankelijke schaalbaarheid te garanderen. Wanneer u een workload schaalbaar ontwerpt, kan deze de workload effectief verdelen over meerdere resources, waardoor knelpunten worden voorkomen en het resourcegebruik wordt gemaximaliseerd.
Vermijd singletons. Vermijd het gebruik van één gecentraliseerde resource voor de hele workload. Verdeel in plaats daarvan uw workload over meerdere resources voor betere schaalbaarheid, fouttolerantie en prestaties. Bekijk enkele specifieke voorbeelden en ontwerpoverwegingen om singletons in workloadresources te voorkomen:
Load leveling op basis van wachtrijen: In plaats van te vertrouwen op één wachtrij voor het verwerken van berichten, kunt u overwegen om de workload te partitioneren over meerdere wachtrijen om de verwerkingsbelasting te verdelen. Het biedt betere schaalbaarheid en parallelle verwerking.
Gegevensverwerking: Singleton-patronen komen vaak voor in gegevensverwerkingsscenario's waarin de verwerking niet uitwaaierend is. Deel langlopende taken op in kleinere taken die beter kunnen worden geschaald om de workload over meerdere resources te verdelen en te profiteren van parallelle uitvoering.
Ontwerppatronen: Ontwerppatronen zoals Uitwaaieren/Fan-in of Pijpen en filters kunnen helpen om singletons in werkstromen te voorkomen. Deze patronen maken de distributie van verwerkingstaken over meerdere resources mogelijk en bevorderen schaalbaarheid en flexibiliteit.
Onderdelen loskoppelen. Het loskoppelen van toepassingsonderdelen is een belangrijk aspect van het ontwerpen voor schaalbaarheid. Het omvat het opsplitsen van de toepassing in kleinere, onafhankelijke onderdelen die onafhankelijk van elkaar kunnen werken en schalen op basis van specifieke workloadvereisten. Als een onderdeel bijvoorbeeld meer resources nodig heeft vanwege een verhoogde vraag, kunt u dat onderdeel schalen zonder dat dit van invloed is op de andere onderdelen. Deze flexibiliteit zorgt voor een efficiënte toewijzing van resources en voorkomt knelpunten. Door onderdelen te ontkoppelen, kunt u fouten isoleren en het effect op de algehele toepassing minimaliseren. Als het ene onderdeel uitvalt, kunnen de andere onderdelen onafhankelijk blijven functioneren.
Losgekoppelde onderdelen zijn eenvoudiger te onderhouden en bij te werken. Wijzigingen of updates in een onderdeel kunnen worden aangebracht zonder dat dit van invloed is op de andere onderdelen, omdat ze onafhankelijk zijn. Volg deze richtlijnen om toepassingsonderdelen te ontkoppelen voor schaalbaarheid:
Scheiding van problemen: identificeer de verantwoordelijkheden en functionaliteiten van uw toepassing. Verdeel de verantwoordelijkheden in afzonderlijke onderdelen op basis van hun specifieke taken. U kunt bijvoorbeeld afzonderlijke onderdelen hebben voor gebruikersverificatie, gegevensverwerking en gebruikersinterface.
Losse koppeling: ontwerp de onderdelen om met elkaar te communiceren via goed gedefinieerde interfaces en protocollen. Dit ontwerp vermindert de afhankelijkheden tussen onderdelen en maakt het eenvoudiger om afzonderlijke onderdelen te vervangen of te schalen.
Asynchrone communicatie: gebruik asynchrone communicatiepatronen zoals berichtenwachtrijen of gebeurtenisgestuurde architecturen om onderdelen verder los te koppelen. Met deze patronen kunnen onderdelen taken onafhankelijk in hun eigen tempo verwerken, waardoor de algehele schaalbaarheid wordt verbeterd.
Microservices: overweeg microservices te implementeren. Dit zijn kleine, onafhankelijke services die gericht zijn op specifieke bedrijfsfuncties. Elke microservice kan onafhankelijk worden ontwikkeld, geïmplementeerd en geschaald, wat meer flexibiliteit en schaalbaarheid biedt.
Een toepassing ontwerpen om te schalen
Wanneer u een workload schaalt, moet u de toepassing ontwerpen om de belasting te verdelen. Het feit dat u meer replica's op infrastructuurniveau kunt toevoegen, betekent niet dat uw toepassing de replica's kan gebruiken. Bij het ontwerpen van een toepassing op schaal gaat het om het structureren van een toepassing, zodat deze de toegenomen vraag kan verwerken door de workload over resources te verdelen. Vermijd indien mogelijk oplossingen waarvoor clientaffiniteit, gegevensvergrendeling of statusaffiniteit voor één exemplaar is vereist. U wilt een client of proces doorsturen naar een resource met beschikbare capaciteit. Als u wilt ontwerpen voor schaalbaarheid van toepassingen, moet u de volgende strategieën overwegen:
Sessiestatus aan serverzijde elimineren. U moet toepassingen waar mogelijk zo ontwerpen dat ze staatloos zijn. Voor stateful toepassingen moet u een statusarchief gebruiken dat zich buiten uw server bevindt. Sessiestatus externaliseren is het opslaan van sessiegegevens buiten de toepassingsserver of container. U kunt de sessiestatus externaliseren om sessiegegevens over meerdere servers of services te distribueren, waardoor naadloos sessiebeheer in een gedistribueerde omgeving mogelijk is. Houd rekening met het volgende bij het externaliseren van de sessiestatus:
Evalueer uw sessievereisten. Inzicht in de sessiegegevens die moeten worden opgeslagen en beheerd. Overweeg sessiekenmerken, sessietime-outs en eventuele specifieke vereisten voor sessiereplicatie of persistentie. Bepaal de grootte van uw sessiestatus en de frequentie van lees- en schrijfbewerkingen.
Kies een oplossing. Selecteer een opslagoplossing die is afgestemd op uw prestatie- en schaalbaarheidsbehoeften. Opties zijn onder andere het gebruik van een gedistribueerde cache, een database of een sessiestatusservice. Houd rekening met factoren zoals gegevensconsistentie, latentie en schaalbaarheid bij het maken van uw keuze.
Uw toepassing instellen. Werk uw toepassing bij om de gekozen oplossing voor sessiestatusopslag te gebruiken. Mogelijk moet u de configuratiebestanden of code van uw toepassing wijzigen om verbinding te maken met de externe opslagservice.
Werk uw logica bij. Wijzig de sessiebeheerlogica van uw toepassing om sessiegegevens op te slaan en op te halen uit de externe opslagoplossing. Mogelijk moet u API's of bibliotheken van de opslagoplossing gebruiken om de sessiestatus te beheren.
Elimineer clientaffiniteit. Clientaffiniteit wordt ook wel sessieaffiniteit of plaksessies genoemd. Wanneer u clientaffiniteit elimineert, distribueert u clientaanvragen gelijkmatig over meerdere replica's of servers, zonder alle aanvragen van een client naar dezelfde replica te routeren. Deze configuratie kan de schaalbaarheid en prestaties van toepassingen verbeteren door elke beschikbare replica toe te staan de aanvragen te verwerken.
Controleer uw taakverdelingsalgoritmen. Een taakverdelingsalgoritmen kunnen onbedoelde en kunstmatige clientpinnen veroorzaken, waarbij te veel aanvragen naar één back-endexemplaar worden verzonden. Vastmaken kan plaatsvinden als het algoritme is ingesteld om altijd aanvragen van dezelfde gebruiker naar hetzelfde exemplaar te verzenden. Dit kan ook gebeuren als de aanvragen te veel op elkaar lijken.
Gegevensvergrendeling elimineren. Gegevensvergrendeling zorgt voor consistentie, maar heeft prestatienadelen. Dit kan leiden tot escalatie van vergrendelingen en kan de gelijktijdigheid, latentie en beschikbaarheid negatief beïnvloeden. Als u gegevensvergrendeling wilt elimineren, moet u optimistische gelijktijdigheid implementeren. Niet-relationele databases moeten gebruikmaken van optimistisch gelijktijdigheidsbeheer en het juiste consistentieniveau hebben. Uw strategie voor gegevenspartitionering moet ook uw gelijktijdigheidsbehoeften ondersteunen.
Dynamische servicedetectie gebruiken. Dynamische servicedetectie is het proces van het automatisch detecteren en registreren van services in een gedistribueerd systeem. Hiermee kunnen clients beschikbare services detecteren zonder nauw gekoppeld te zijn aan specifieke exemplaren. Clients mogen geen directe afhankelijkheid hebben van een specifiek exemplaar in de workload. Als u deze afhankelijkheden wilt voorkomen, moet u een proxy gebruiken om clientverbindingen te distribueren en opnieuw te distribueren. De proxy fungeert als intermediair tussen clients en services en biedt een abstractielaag waarmee services kunnen worden toegevoegd of verwijderd zonder dat dit van invloed is op clients.
Achtergrondtaken gebruiken. Wanneer een toepassing wordt geschaald, kan deze een toenemende workload of een hoger aantal gelijktijdige aanvragen verwerken. Door intensieve taken als achtergrondtaken te offloaden, kan de hoofdtoepassing gebruikersaanvragen verwerken zonder dat resource-intensieve bewerkingen dit overweldigen. Volg deze stappen om taken te offloaden als achtergrondtaken:
Zoek de CPU-intensieve en I/O-intensieve taken in uw toepassing die u kunt offloaden. Deze taken omvatten doorgaans zware berekeningen of interacties met externe resources, zoals databases of netwerkbewerkingen.
Ontwerp uw toepassing ter ondersteuning van achtergrondtaken. Koppel de intensieve taken los van de hoofdtoepassingslogica en bied een mechanisme om achtergrondtaken te starten en te beheren.
Implementeer de verwerking van achtergrondtaken met de juiste technologieën of frameworks. Functies opnemen die worden geleverd door uw programmeertaal of platform, zoals asynchrone programmering, threading of taakwachtrijen. Bevatten intensieve bewerkingen in afzonderlijke taken of threads. Deze taken kunnen gelijktijdig of gepland worden uitgevoerd met specifieke intervallen.
Distribueer achtergrondtaken als er veel zijn, of als de taken veel tijd of resources vereisen. Zie het patroon Concurrerende consumenten voor een mogelijke oplossing.
Schalen configureren
Het configureren van schaalaanpassing is het proces van het instellen en aanpassen van parameters om resources dynamisch toe te wijzen op basis van de workloadvereisten. Het omvat strategieën zoals het gebruik van functies voor automatisch schalen, inzicht in de grenzen van het schalen van services en het implementeren van zinvolle metrische belastinggegevens. De juiste configuratie zorgt ervoor dat een toepassing kan reageren op verschillende eisen terwijl de efficiëntie wordt gemaximaliseerd. Wanneer u schalen configureert, moet u rekening houden met de volgende strategieën:
Services gebruiken met automatisch schalen. Met de functie voor automatisch schalen wordt de infrastructuur automatisch geschaald om aan de vraag te voldoen. Gebruik PaaS-aanbiedingen (Platform as a Service) met ingebouwde functies voor automatisch schalen. Het gemak van schalen op PaaS is een groot voordeel. Het uitschalen van virtuele machines vereist bijvoorbeeld een afzonderlijke load balancer, verwerking van clientaanvragen en extern opgeslagen status. PaaS-aanbiedingen verwerken de meeste van deze taken.
Automatisch schalen beperken. Stel limieten voor automatisch schalen in om overschaling te minimaliseren die tot onnodige kosten kan leiden. Soms kunt u geen schaallimieten instellen. In dergelijke gevallen moet u waarschuwingen instellen om u te waarschuwen wanneer het onderdeel de maximale schaallimiet bereikt en te groot wordt geschaald.
Inzicht in de grenzen van het schalen van services. Wanneer u inzicht hebt in de limieten, stappen en beperkingen voor het schalen van services, kunt u weloverwogen beslissingen nemen wanneer u een service selecteert. Schaalgrenzen bepalen of de door u gekozen service de verwachte workload kan verwerken, efficiënt kan schalen en aan de prestatievereisten van uw toepassing kan voldoen. Schaalgrenzen om rekening mee te houden, zijn onder andere:
Schaallimieten: Schaallimieten zijn de maximale capaciteit die een locatie of service kan verwerken. Het is belangrijk om deze limieten te kennen om ervoor te zorgen dat de service de verwachte workload kan verwerken en pieken in het gebruik kan verwerken zonder prestatievermindering. Elke resource heeft een bovengrens voor schaalaanpassing. Als u de schaallimieten wilt overschrijden, moet u uw workload partitioneren.
Schaalverhogingen: Services schalen met gedefinieerde stappen. Rekenservices kunnen bijvoorbeeld worden geschaald op exemplaren en pods, terwijl databases kunnen worden geschaald op exemplaren, transactie-eenheden en virtuele kernen. Het is belangrijk dat u deze stappen begrijpt om de toewijzing van resources te optimaliseren en te voorkomen dat resources worden overgeslagen.
Schaalbeperkingen: Met sommige services kunt u omhoog of uitschalen, maar wordt de mogelijkheid om automatisch om te schalen beperkt. U wordt gedwongen om handmatig in te schalen of u moet mogelijk een nieuwe resource opnieuw implementeren. Deze beperkingen zijn vaak bedoeld om de workload te beschermen. Omlaag schalen of inschalen kan gevolgen hebben voor de beschikbaarheid en prestaties van de workload. Een service kan bepaalde beperkingen of beperkingen afdwingen om ervoor te zorgen dat de workload voldoende resources heeft om effectief te werken. Deze beperkingen kunnen van invloed zijn op gegevensconsistentie en -synchronisatie, met name in gedistribueerde systemen. De service heeft mogelijk mechanismen voor het afhandelen van gegevensreplicatie en consistentie tijdens het omhoog of uitschalen, maar biedt mogelijk niet hetzelfde ondersteuningsniveau voor omlaag of inschalen.
Gebruik zinvolle metrische gegevens over belasting. Schalen moet zinvolle metrische belastingsgegevens gebruiken als schaaltriggers. Zinvolle metrische gegevens over belasting zijn eenvoudige metrische gegevens, zoals CPU of geheugen. Ze bevatten ook meer geavanceerde metrische gegevens, zoals de diepte van de wachtrij, SQL-query's, aangepaste metrische query's en de lengte van de HTTP-wachtrij. Overweeg het gebruik van een combinatie van eenvoudige en geavanceerde metrische gegevens over belasting als uw schaaltrigger.
Gebruik een buffer. Een buffer is ongebruikte capaciteit die kan worden gebruikt om pieken in de vraag te verwerken. Een goed ontworpen workloadplanning voor onverwachte pieken in de workload. U moet een buffer toevoegen om pieken voor horizontaal en verticaal schalen af te handelen.
Klappen voorkomen. Flappen is een lusvoorwaarde die optreedt wanneer een schaalgebeurtenis een tegenovergestelde schaalgebeurtenis activeert, waardoor een doorlopende actie heen en weer schalen wordt gemaakt. Als inschalen bijvoorbeeld het aantal exemplaren vermindert, kan dit ertoe leiden dat het CPU-gebruik in de resterende exemplaren toeneemt, waardoor een uitschaalgebeurtenis wordt geactiveerd. De uitschaalgebeurtenis zorgt er op zijn beurt voor dat het CPU-gebruik daalt, waardoor het proces wordt herhaald.
Het is belangrijk om een voldoende marge te kiezen tussen de drempelwaarden voor uitschalen en inschalen om flapping te voorkomen. U kunt frequente en onnodige in- en uitschaalacties voorkomen door drempelwaarden in te stellen die een aanzienlijk verschil in CPU-gebruik opleveren.
Gebruik Implementatiestempels. Er zijn technieken die het gemakkelijker maken om een workload te schalen. U kunt het patroon Implementatiestempels gebruiken om een workload eenvoudig te schalen door een of meer schaaleenheden toe te voegen.
Risico: hoewel schalen helpt bij het optimaliseren van de kosten door capaciteit aan de vraag aan te passen, kan dit leiden tot hogere kosten tijdens lange perioden van hoge vraag.
Schalen testen
Het testen van schaalaanpassing omvat het simuleren van verschillende workloadscenario's in een gecontroleerde omgeving om te evalueren hoe een workload reageert op verschillende vraagniveaus. Het helpt ervoor te zorgen dat de workload efficiënt wordt geschaald, waardoor de prestatie-efficiëntie tijdens uiteenlopende belasting wordt gemaximaliseerd.
U moet ervoor zorgen dat uw workload efficiënt wordt geschaald onder werkelijke omstandigheden. Het is essentieel om belastings- en stresstests uit te voeren in een omgeving die uw productie-installatie weerspiegelt. Met deze tests, uitgevoerd in niet-productieomgevingen, kunt u zowel verticale als horizontale schaalstrategieën evalueren en bepalen welke de prestaties het meest effectief optimaliseert. Hier volgt een aanbevolen benadering voor het testen van schaalaanpassing:
Workloadscenario's definiëren. Identificeer de belangrijkste workloadscenario's die u moet testen, zoals toename van gebruikersverkeer, gelijktijdige aanvragen, gegevensvolume of resourcegebruik.
Gebruik een testomgeving die lijkt op een productieomgeving. Maak een afzonderlijke testomgeving die qua infrastructuur, configuratie en gegevens sterk lijkt op de productieomgeving.
Metrische prestatiegegevens instellen. Definieer de metrische prestatiegegevens die moeten worden gemeten, zoals reactietijd, doorvoer, CPU- en geheugengebruik en foutpercentages.
Testcases ontwikkelen. Ontwikkel testcases die verschillende workloadscenario's simuleren, waarbij de belasting geleidelijk wordt verhoogd om de prestaties op verschillende niveaus te beoordelen.
Voer tests uit en controleer deze. Voer de tests uit met behulp van de gedefinieerde testcases en verzamel prestatiegegevens op elk laadniveau. Bewaak het gedrag van workloads, het resourceverbruik en de prestatievermindering.
Schaalaanpassing analyseren en optimaliseren. Analyseer de testresultaten om prestatieknelpunten, schaalbaarheidsbeperkingen of verbeterpunten vast te stellen. Optimaliseer de configuratie, infrastructuur of code om de schaalbaarheid en prestaties te verbeteren. Het duurt even voordat het schalen is voltooid, dus test de effecten van vertragingen bij het schalen.
Adresafhankelijkheden. Potentiële afhankelijkheidsproblemen zoeken. Schalen of partitioneren in één gebied van een workload kan prestatieproblemen voor een afhankelijkheid veroorzaken. De stateful onderdelen van een workload, zoals databases, zijn de meest voorkomende oorzaak van prestatieproblemen met afhankelijkheden. Databases vereisen een zorgvuldig ontwerp om horizontaal te schalen. U moet maatregelen overwegen, zoals optimistische gelijktijdigheid of gegevenspartitionering, om meer doorvoer naar de database mogelijk te maken.
Opnieuw testen na aanpassingen. Herhaal de schaalbaarheidstests na het implementeren van optimalisaties om de verbeteringen te valideren en ervoor te zorgen dat de workload de verwachte workloads efficiënt kan verwerken.
Afweging: houd rekening met de budgetbeperkingen en kostenefficiëntiedoelen van uw workload. Verticaal schalen kan hogere kosten met zich meebrengen vanwege de behoefte aan grotere en krachtigere resources. Horizontaal schalen biedt kostenbesparingen door gebruik te maken van kleinere exemplaren die op basis van vraag kunnen worden toegevoegd of verwijderd.
Partitieworkload
Partitioneren is het proces van het opsplitsen van een grote gegevensset of workload in kleinere, beter beheerbare delen, partities genoemd. Elke partitie bevat een subset van de gegevens of workload en wordt doorgaans afzonderlijk opgeslagen of verwerkt. Partitioneren maakt parallelle verwerking mogelijk en vermindert conflicten. Door de workload op te delen in kleinere eenheden, kan de toepassing elke eenheid onafhankelijk verwerken. Het resultaat is een beter gebruik van resources en snellere verwerkingstijden. Partitionering helpt ook bij het verdelen van de gegevens over meerdere opslagapparaten, waardoor de belasting op afzonderlijke apparaten wordt verminderd en de algehele prestaties worden verbeterd.
Inzicht in partitioneren
De specifieke partitioneringsbenadering die u gebruikt, is afhankelijk van het type gegevens of workload dat u hebt en de technologie die u gebruikt. Enkele veelvoorkomende strategieën voor partitionering zijn:
Horizontale partitionering: Bij deze benadering wordt de gegevensset of workload verdeeld op basis van specifieke criteria, zoals waardenbereiken of specifieke kenmerken. Elke partitie bevat een subset van de gegevens die voldoen aan de gedefinieerde criteria.
Verticale partitionering: Bij deze benadering wordt de gegevensset of workload verdeeld op basis van specifieke kenmerken of kolommen. Elke partitie bevat een subset van de kolommen of kenmerken, zodat u efficiënter toegang hebt tot de vereiste gegevens.
Functionele partitionering: Bij deze benadering worden de gegevens of workload verdeeld op basis van de specifieke functies of bewerkingen die moeten worden uitgevoerd. Elke partitie bevat de gegevens of onderdelen die nodig zijn voor een specifieke functie, waardoor geoptimaliseerde verwerking en prestaties mogelijk zijn.
Partitionering plannen
Het is belangrijk om bij het partitioneren rekening te houden met factoren zoals gegevensdistributie, querypatronen, gegevensgroei en workloadvereisten. De juiste planning en het juiste ontwerp zijn essentieel om de effectiviteit van partitionering te garanderen en de efficiëntie van de prestaties te maximaliseren. Als u partitionering achteraf aan de hand hebt, is het lastiger omdat u al een live workload hebt om te onderhouden. Mogelijk moet u de logica voor gegevenstoegang wijzigen, grote hoeveelheden gegevens over partities verdelen en ondersteuning bieden voor voortgezet gebruik tijdens de distributie van gegevens.
Partitionering implementeren
Het is belangrijk om de kenmerken van uw gegevens, toegangspatronen, gelijktijdigheidsvereisten en schaalbaarheidsdoelen te analyseren wanneer u besluit welk type partitionering u wilt gebruiken. Elk type partitionering heeft zijn eigen voordelen en overwegingen. Hier volgen enkele factoren om rekening mee te houden voor elk type partitionering:
Horizontale partitionering is geschikt als u de gegevens wilt distribueren over meerdere resources of servers voor betere schaalbaarheid en prestaties. Het is effectief wanneer de workload onafhankelijk van elke partitie kan worden geparallelliseerd en verwerkt. Overweeg horizontale partitionering wanneer meerdere gebruikers of processen gelijktijdig toegang moeten hebben tot de gegevensset of deze moeten kunnen bijwerken.
Verticale partitionering is geschikt wanneer bepaalde kenmerken of kolommen vaak worden geopend, terwijl andere minder vaak worden geopend. Verticale partitionering zorgt voor efficiënte toegang tot de vereiste gegevens door onnodig gegevens ophalen te minimaliseren.
Functionele partitionering is geschikt wanneer verschillende functies verschillende subsets van de gegevens vereisen en onafhankelijk kunnen worden verwerkt. Functionele partitionering kan de prestaties optimaliseren door elke partitie toe te staan specifieke bewerkingen te richten.
Partitionering testen en optimaliseren
Test het partitioneringsschema om de effectiviteit en efficiëntie van de strategie te controleren, zodat u aanpassingen kunt aanbrengen om de prestaties te verbeteren. Meet factoren zoals reactietijd, doorvoer en schaalbaarheid. Vergelijk de resultaten met prestatiedoelen en identificeer eventuele knelpunten of problemen. Identificeer op basis van de analyse mogelijke optimalisatiemogelijkheden. Mogelijk moet u gegevens opnieuw distribueren over partities, partitiegrootten aanpassen of de partitioneringscriteria wijzigen.
Compromis: partitioneren voegt complexiteit toe aan het ontwerp en de ontwikkeling van een workload. Partitionering vereist gesprekken en planning tussen ontwikkelaars en databasebeheerders.
Risico: partitionering introduceert een aantal mogelijke problemen die moeten worden overwogen en opgelost, waaronder:
Scheeftrekken van gegevens: partitioneren kan leiden tot gegevensscheefheid, waarbij bepaalde partities een onevenredige hoeveelheid gegevens of werkbelasting ontvangen in vergelijking met andere partities. Scheeftrekken van gegevens kunnen leiden tot onevenwichtige prestaties en meer conflicten op specifieke partities.
Queryprestaties: slecht ontworpen partitioneringsschema's kunnen de queryprestaties negatief beïnvloeden. Als query's toegang nodig hebben tot gegevens over meerdere partities, is mogelijk extra coördinatie en communicatie tussen partities vereist, wat leidt tot een verhoogde latentie.
Azure-facilitering
Schalen optimaliseren. Azure heeft de infrastructuurcapaciteit ter ondersteuning van verticaal en horizontaal schalen. Azure-services hebben verschillende prestatielagen, ook wel SKU's genoemd. Met SKU's kunt u verticaal schalen. Veel van de resources van Azure ondersteunen automatisch schalen of andere in-place schaalopties. Sommige resources ondersteunen geavanceerde metrische gegevens of aangepaste invoer om het schaalgedrag nauwkeurig af te stemmen. De meeste schaalaanpassings-implementaties in Azure kunnen limieten instellen en de benodigde waarneembaarheid ondersteunen om te worden gewaarschuwd voor wijzigingen.
Met Azure Monitor kunt u verschillende metrische gegevens en voorwaarden in uw toepassingen en infrastructuur bewaken. U kunt Monitor gebruiken om geautomatiseerde schaalacties te activeren op basis van vooraf gedefinieerde regels. In Azure Kubernetes Service (AKS) kunt u bijvoorbeeld Monitor gebruiken om horizontaal automatisch schalen van pods (HPA) en automatisch schalen van clusters in te schakelen. Met behulp van de bewakings- en waarschuwingsmogelijkheden van Monitor kunt u het schalen in Azure effectief vergemakkelijken en ervoor zorgen dat uw toepassingen en infrastructuur zich dynamisch kunnen aanpassen aan de vraag.
U kunt ook aangepast automatisch schalen bouwen in Azure. U kunt waarschuwingen in Monitor gebruiken voor resources die geen functie voor automatisch schalen hebben. Deze waarschuwingen kunnen worden ingesteld op query's of op basis van metrische gegevens en kunnen acties uitvoeren met behulp van Azure Automation. Automation biedt een platform voor het hosten en uitvoeren van PowerShell- en Python-code in Azure, de cloud en on-premises omgevingen. Het biedt functies zoals het implementeren van runbooks op aanvraag of volgens een schema, uitvoeringsgeschiedenis en logboekregistratie, geïntegreerde geheimenopslag en integratie van broncodebeheer.
Toepassing op schaal ontwerpen: hier volgen enkele manieren waarop Azure het ontwerp van het schalen van toepassingen faciliteert;
Gegevensvergrendeling elimineren: in Azure SQL Database kunt u geoptimaliseerde vergrendeling inschakelen om de prestaties te verbeteren van databases waarvoor strikte consistentie is vereist.
Achtergrondtaken gebruiken: Azure biedt services en richtlijnen voor het implementeren van achtergrondtaken. Zie Achtergrondtaken voor meer informatie.
Taakverdeling implementeren: Azure biedt load balancers waarvoor geen clientaffiniteit is vereist. Deze load balancers omvatten Azure Front Door, Azure Application Gateway en Azure Load Balancer.
Partitionering van een workload: Azure biedt verschillende partitioneringsstrategieën voor verschillende gegevensarchieven. Deze strategieën helpen de prestaties en schaalbaarheid te verbeteren door de gegevens over meerdere partities te distribueren. Zie Strategieën voor gegevenspartitie voor meer informatie.
Verwante koppelingen
- Waarom gegevens partitioneren?
- Aanbevolen procedures voor automatisch schalen
- Overzicht van de functie voor automatisch schalen in Azure
- Horizontale, verticale en functionele gegevenspartitionering
- Ontwerpoverwegingen voor toepassingen
Controlelijst voor efficiëntie van prestaties
Raadpleeg de volledige set aanbevelingen.