Aanbevelingen voor het optimaliseren van code en infrastructuur

Is van toepassing op deze aanbeveling voor de controlelijst voor prestatie-efficiëntie van Azure Well-Architected Framework:

PE:07 Code en infrastructuur optimaliseren. Gebruik code die goed presteert en zorg ervoor dat deze verantwoordelijkheden naar het platform offloadt. Gebruik code en infrastructuur alleen voor hun kerndoel en alleen wanneer dat nodig is.

In deze handleiding worden de aanbevelingen beschreven voor het optimaliseren van de prestaties van code en infrastructuur. Als u uw code en infrastructuur wilt optimaliseren, moet u uw onderdelen alleen gebruiken voor hun kerndoel en alleen wanneer dat nodig is. Wanneer u code en infrastructuur te veel gebruikt, leidt dit tot onnodig resourceverbruik, knelpunten en trage reacties. Om deze inefficiënties te compenseren, moet u meer resources toevoegen om dezelfde taken uit te voeren.

Definities

Termijn Definitie
Gelijktijdigheid Wanneer meerdere taken of processen tegelijk worden uitgevoerd, maar niet noodzakelijkerwijs op exact hetzelfde moment.
CPU-architectuur De onderdelen en principes die van invloed zijn op de werking van de computer.
Gegevenscompressie De actie van het verkleinen van de grootte van bestanden door het minimaliseren van redundante gegevens.
Heap Een gebied in het geheugen dat wordt gebruikt voor runtimegeheugentoewijzingen.
Geheugenlekkage Wanneer een workload toegewezen geheugen niet vrijgeeft nadat het geheugen niet meer nodig is.
Parallelle uitvoering Wanneer meerdere taken of processen tegelijkertijd worden uitgevoerd.

Belangrijke ontwerpstrategieën

Het optimaliseren van code en infrastructuur omvat het verfijnen van de code en de ondersteunende infrastructuur om de efficiëntie van de prestaties te verbeteren. Hiervoor is code vereist die taken snel uitvoert en geen resources verspilt. Het vereist een goed ontworpen infrastructuur die is gestroomlijnd om onnodige complexiteit te voorkomen. Een workload moet gebruikmaken van de inherente mogelijkheden van het platform. Het is een benadering die ervoor zorgt dat zowel code als infrastructuur voornamelijk worden gebruikt voor hun kerndoeleinden en alleen wanneer dat nodig is.

Codeprestaties optimaliseren

Als u de codeprestaties wilt optimaliseren, wijzigt u de code om het resourcegebruik te verminderen, runtime te minimaliseren en de prestaties te verbeteren. U kunt code wijzigen om de efficiëntie en snelheid van een softwareprogramma te verbeteren. Verhul prestatieproblemen met beveiligingsaanvallen niet. Brute force betekent het toevoegen van rekenresources om de codeprestaties te compenseren, zoals het toevoegen van extra capaciteit in plaats van het adresseren van de bron. U moet prestatieproblemen met optimalisatie oplossen. Wanneer u de codeprestaties optimaliseert, helpt dit bij het maximaliseren van het gebruik van systeembronnen, verbetert de reactietijd, vermindert de latentie en verbetert de gebruikerservaring.

Instrumenteer uw code

Instrumentatiecode verwijst naar de praktijk van het toevoegen van codefragmenten of bibliotheken aan code waarmee gegevens worden verzameld en de codeprestaties tijdens runtime worden bewaakt. Met code-instrumentatie kunnen ontwikkelaars informatie verzamelen over belangrijke metrische gegevens, zoals resourceverbruik (CPU, geheugengebruik) en uitvoeringstijd. Door code te instrumenteren, kunnen ontwikkelaars inzicht krijgen in dynamische paden voor code, knelpunten in de prestaties identificeren en de code optimaliseren voor betere prestatie-efficiëntie.

In een ideale omgeving moet u codeanalyse vroeg in de levenscyclus van softwareontwikkeling uitvoeren. Hoe eerder u een codeprobleem ondervangt, hoe goedkoper het is om het probleem op te lossen. U wilt zoveel mogelijk van deze codeanalyse automatiseren. Gebruik hulpprogramma's voor dynamische en statische codeanalyse om de handmatige inspanning te verminderen. Houd er echter rekening mee dat deze tests nog steeds een simulatie van de productie zijn. Productie biedt het beste inzicht in codeoptimalisatie.

Compromis: hulpprogramma's voor codebewaking zullen waarschijnlijk de kosten verhogen.

Dynamische paden identificeren

Door uw code te instrumenteren, kunt u het resourceverbruik voor verschillende codepaden meten. Met deze metingen kunt u dynamische paden identificeren. Dynamische paden hebben een aanzienlijk effect op de prestaties en het resourcegebruik. Ze zijn kritieke of vaak uitgevoerde secties van een programma die hoge prestaties en lage latentie vereisen. Overweeg de volgende stappen om dynamische paden voor code te identificeren:

  • Runtimegegevens analyseren: verzamel runtimegegevens en analyseer deze om gebieden van de code te identificeren die aanzienlijke resources verbruiken, zoals CPU, geheugen of I/O-bewerkingen. Zoek naar patronen of secties met code die vaak worden uitgevoerd of die lang duren.

  • Prestaties meten: gebruik profileringshulpprogramma's of frameworks voor het testen van prestaties om de uitvoeringstijd en het resourceverbruik van verschillende codepaden te meten. Het helpt bij het identificeren van knelpunten en gebieden voor verbetering.

  • Houd rekening met bedrijfslogica en gebruikerseffect: Evalueer het belang van verschillende codepaden op basis van hun relevantie voor de functionaliteit van de toepassing of kritieke bedrijfsactiviteiten. Bepaal welke codepaden van cruciaal belang zijn voor het leveren van waarde aan gebruikers of het voldoen aan de prestatievereisten.

Codelogica optimaliseren

Het optimaliseren van codelogica gaat over het verfijnen van de structuur en het ontwerp van code om taken uit te voeren met minder resources. Verbeterde logica vermindert onnodige bewerkingen. Het zorgt voor een snellere uitvoering met minder resourceverbruik. Verwijder overbodige bewerkingen in het codepad die de prestaties kunnen beïnvloeden. Geef prioriteit aan het optimaliseren van dynamische paden om de beste prestatie-efficiëntieverbeteringen te zien. Overweeg de volgende strategieën om codelogica te optimaliseren:

  • Overbodige functie-aanroepen verwijderen: controleer uw code en identificeer eventuele functies die niet essentieel zijn voor de gewenste functionaliteit en die de prestaties mogelijk negatief beïnvloeden. Als een functie-aanroep bijvoorbeeld een validatie uitvoert die eerder in de code is voltooid, kunt u de onnodige validatiefunctie-aanroep verwijderen.

  • Logboekregistratiebewerkingen minimaliseren: logboekregistratie kan handig zijn voor foutopsporing en analyse, maar overmatige logboekregistratie kan de prestaties beïnvloeden. Evalueer de noodzaak van elke logboekbewerking en verwijder onnodige logboekregistratie-aanroepen die niet essentieel zijn voor prestatieanalyse.

  • Lussen en voorwaarden optimaliseren: analyseer lussen en voorwaarden in uw code en identificeer onnodige iteraties of voorwaarden die kunnen worden geëlimineerd. Het vereenvoudigen en optimaliseren van deze structuren kan de prestaties van uw code verbeteren. Minimaliseer functie-aanroepen binnen lussen en elimineer redundante berekeningen. Overweeg berekeningen buiten de lus te verplaatsen of lusrolling te gebruiken.

  • Onnodige gegevensverwerking verminderen: controleer uw code op onnodige gegevensverwerkingsbewerkingen, zoals redundante berekeningen of transformaties. Elimineer deze onnodige bewerkingen om de efficiëntie van uw code te verbeteren.

  • Gegevensstructuren optimaliseren. Als u gegevens efficiënt wilt opslaan en ophalen, selecteert u de juiste gegevensstructuren, zoals matrices, gekoppelde lijsten, structuren en hash-tabellen. Kies de beste gegevensstructuur voor een specifiek probleem. Een geschikte gegevensstructuur verbetert de prestaties van toepassingen.

  • Netwerkaanvragen minimaliseren: als uw code betrekking heeft op het maken van netwerkaanvragen, minimaliseert u het aantal aanvragen en optimaliseert u het gebruik ervan. Batchaanvragen indien mogelijk en vermijd onnodige retouren om de prestaties te verbeteren.

  • Toewijzingen minimaliseren: gebieden identificeren waar overmatige geheugentoewijzing plaatsvindt. Optimaliseer de code door onnodige toewijzingen te verminderen en bestaande resources waar mogelijk opnieuw te gebruiken. Door toewijzingen te minimaliseren, kunt u de geheugenefficiëntie en de algehele prestaties verbeteren. Gebruik de juiste strategieën voor geheugenbeheer en garbagecollection voor uw programmeertaal.

  • Verklein de grootte van de gegevensstructuur: evalueer de grootte van uw gegevensstructuren, zoals klassen, en identificeer gebieden waar reductie mogelijk is. Controleer de gegevensvereisten en verwijder overbodige velden of eigenschappen. Optimaliseer het geheugengebruik door de juiste gegevenstypen te selecteren en gegevens efficiënt te verpakken.

  • Gebruik sdk's en bibliotheken die zijn geoptimaliseerd voor prestaties. Gebruik systeemeigen SDK's of bibliotheken die zijn geoptimaliseerd voor prestaties. Systeemeigen SDK's zijn ontworpen om te communiceren met de services en resources op een platform of binnen een framework. Cloudeigen SDK's werken bijvoorbeeld beter met gegevensvlakken in de cloudservice dan met aangepaste API-toegang. SDK's zijn uitstekend in het verwerken van netwerkaanvragen en het optimaliseren van interacties. Bibliotheken die zijn geoptimaliseerd voor prestaties, zoals Math.NET, bevatten functies die zijn geoptimaliseerd voor prestaties. Wanneer u de functies op de juiste manier toepast, kunt u de prestaties van uw workload verbeteren.

  • Horizontale implementatie: houd rekening met de effecten van cross-cutting implementaties, zoals middleware of tokencontroles, en beoordeel of deze de prestaties negatief beïnvloeden.

Bekijk de prestatieaanbeveling die specifiek is voor de programmeertaal waarmee u werkt. Evalueer uw code op basis van deze aanbevelingen om gebieden voor verbetering te identificeren.

Compromissen:

  • Het optimaliseren van code en dynamische paden vereist expertise van ontwikkelaars bij het identificeren van code-inefficiënties is subjectief en kan zeer ervaren persoon zijn die vereist is voor andere taken.
  • SDK's bieden gemak en elimineren de complexiteit van interactie met API's. Maar SDK's kunnen uw beheer- en aanpassingsopties voor aangepaste code beperken.

Geheugenbeheer optimaliseren

Het optimaliseren van geheugenbeheer omvat het verfijnen van de manier waarop een workload geheugenresources gebruikt, toewijst en vrijgeeft om de efficiëntie te verbeteren. Het juiste geheugenbeheer verbetert de codeprestaties omdat het de overhead van geheugenbewerkingen vermindert. Efficiënt geheugengebruik vermindert de latentie, voorkomt vertragingen of crashes van het systeem en maximaliseert de doorvoer van rekentaken. Overweeg de volgende strategieën om geheugenbeheer te optimaliseren.

Fouten opsporen in geheugenproblemen. Geheugendumps zijn momentopnamen van toepassingsgeheugen. Ze leggen de geheugenstatus van een toepassing op een specifiek tijdstip vast. Geheugendumps maken een retrospectieve analyse van geheugengerelateerde problemen mogelijk. Selecteer het juiste type geheugendump op basis van de aard van het probleem dat u probeert te diagnosticeren en de beschikbare resources. U moet miniatuurdumps gebruiken voor routinematige foutopsporing en volledige dumps voor complexe, kritieke problemen. Deze strategie biedt een balans tussen resourcegebruik en diagnostische mogelijkheden. Veel codehostingservices ondersteunen geheugenfoutopsporing. U moet de voorkeur geven aan services die geheugenanalyse ondersteunen boven services die dat niet doen. Dit zijn de basisstappen voor het opsporen van geheugenproblemen:

  1. Geheugendumps vastleggen: begin met het instellen van een mechanisme voor het vastleggen van geheugendumps tijdens de runtime van uw toepassing. De opname kan handmatig, automatisch worden geactiveerd of wanneer aan bepaalde voorwaarden (zoals overmatig geheugenverbruik) wordt voldaan. Sommige cloudservices bieden dit proces mogelijk al aan.

  2. Geheugendumps analyseren: nadat u de geheugendumps hebt verzameld, analyseert u deze. Talloze hulpprogramma's kunnen u helpen bij het inspecteren van deze dumps, zoals WinDbg voor Windows-toepassingen of GDB voor Unix-systemen.

  3. Geheugenlekken identificeren: focus op het identificeren van geheugenlekken tijdens de analyse. Geheugenlekken doen zich voor wanneer uw toepassing geheugen toewijst, maar dit niet vrijgeeft wanneer het geheugen niet meer nodig is. Zoek naar objecten of gegevensstructuren die in het geheugen blijven, zelfs wanneer de toewijzing ervan ongedaan moet worden gemaakt.

  4. Oplossen en testen: bij het identificeren van de problematische code kunt u zich concentreren op het oplossen van de geheugenproblemen. Oplossingen kunnen betrekking hebben op het correct vrijgeven van geheugen, het optimaliseren van gegevensstructuren of het opnieuw evalueeren van geheugenbeheerprocedures. Controleer of uw oplossingen grondig worden getest om de doeltreffendheid ervan te garanderen.

  5. Herhalen en bewaken: Geheugenbeheer is een continu proces. Controleer regelmatig het geheugengebruik van uw toepassing en houd vast aan het verzamelen van geheugendumps in productie. Ga regelmatig opnieuw naar de analyse- en optimalisatiefasen om ervoor te zorgen dat geheugenproblemen niet opnieuw worden weergegeven bij volgende codewijzigingen.

Door geheugendumpanalyse op te nemen in de levenscyclus van uw softwareontwikkeling, kunt u de betrouwbaarheid en efficiëntie van uw toepassingen vergroten. Het helpt om de kans op geheugengerelateerde problemen in de productie te verminderen.

Geheugentoewijzingen verminderen. Minimaliseer geheugentoewijzingen om de totale geheugenvoetafdruk van de code te verminderen. Uw workload kan het beschikbare geheugen efficiënt gebruiken. Er is minder behoefte aan de garbagecollector om ongebruikt geheugen vrij te maken en het vermindert de frequentie en duur van garbagecollection-cycli. Geheugentoewijzingen kunnen kostbaar zijn, vooral als u ze regelmatig uitvoert. Minimaliseer geheugentoewijzingen, zodat de code snel en efficiënt kan worden uitgevoerd.

Caches slaan vaak gebruikte gegevens dicht bij de processor op, waardoor de prestaties worden verbeterd. Wanneer u geheugentoewijzingen minimaliseert, is er minder conflicten over cacheruimte, zodat u de cache effectief kunt gebruiken. Een groot aantal geheugentoewijzingen kan de prestaties van toepassingen verminderen en fouten genereren. Andere manieren om geheugentoewijzingen te minimaliseren, zijn:

  • Lokale variabelen: gebruik lokale variabelen in plaats van globale variabelen om het geheugenverbruik te minimaliseren.

  • Luie initialisatie: implementeer luie initialisatie om het maken van objecten of resources uit te stellen totdat ze nodig zijn.

  • Buffers: beheer buffers effectief om het toewijzen van grote geheugenbuffers te voorkomen.

  • Objectgroepering: overweeg objectgroepering om grote objecten opnieuw te gebruiken in plaats van ze toe te wijzen en te verdelen.

Zie Geheugentoewijzingen verminderen en De grote object-heap op Windows-systemen voor meer informatie.

Gelijktijdigheid en parallellisme gebruiken

Het gebruik van gelijktijdigheid en parallellisme omvat het uitvoeren van meerdere taken of processen tegelijk of op een overlappende manier om efficiënt gebruik te maken van rekenresources. Deze technieken verhogen de algehele doorvoer en het aantal taken dat een workload kan verwerken. Wanneer u taken gelijktijdig of parallel uitvoert, vermindert dit de runtime van de toepassing en vermindert de latentie en de reactietijden. Gelijktijdigheid en parallellisme maken efficiënt gebruik van computerresources mogelijk, zoals CPU-kernen of gedistribueerde systemen. Gelijktijdigheid en parallellisme verdelen de workload effectief over de computerresources.

Gebruik parallellisme. Parallellisme is de mogelijkheid van een systeem om tegelijkertijd meerdere taken of processen op meerdere computerresources te activeren. Parallellisme verdeelt een workload in kleinere taken die parallel worden uitgevoerd. U kunt parallellisme bereiken met behulp van technieken zoals multiprocessing of gedistribueerde computing. Taken verdelen over multicore-processors om workloadbeheer te optimaliseren. Optimaliseer code om te profiteren van de CPU-architectuur, threadingmodellen en multicore-processors. Wanneer u code parallel uitvoert, worden de prestaties verbeterd omdat de workload over meerdere kernen wordt verdeeld.

Gelijktijdigheid gebruiken. Gelijktijdigheid is de mogelijkheid van een systeem om meerdere taken of processen uit te voeren. Gelijktijdigheid stelt verschillende onderdelen van een programma in staat om onafhankelijk van elkaar voortgang te boeken, waardoor de algehele prestaties kunnen worden verbeterd. U kunt gelijktijdigheid implementeren met behulp van technieken zoals multithreading, waarbij meerdere threads gelijktijdig worden uitgevoerd binnen één proces. U kunt ook asynchroon programmeren gebruiken, waarbij taken gelijktijdig worden geactiveerd.

  • Asynchroon programmeren: Asynchroon programmeren is een methode om taken te activeren zonder de hoofdthread te blokkeren. Met asynchrone programmering kan een programma taken activeren terwijl wordt gewacht tot langdurige bewerkingen zijn voltooid. Met asynchrone programmering kan het programma meerdere taken initiëren en wachten tot ze asynchroon zijn voltooid. Het programma hoeft niet te wachten tot elke taak is voltooid voordat u verdergaat met de volgende taak.

    Er zijn veel asynchrone programmeertechnieken en -patronen, afhankelijk van de programmeertaal en het platform. Een veelvoorkomende aanpak is het gebruik van asynchrone trefwoorden en -constructies, zoals async en await, in talen zoals C#. Met deze trefwoorden kunt u asynchrone methoden definiëren. Voor HTTP-verkeer kunt u het patroon Asynchroon Request-Reply gebruiken.

    Veel frameworks en bibliotheken bieden ingebouwde ondersteuning voor asynchrone programmering. In het .NET-platform kunt u bijvoorbeeld asynchrone bewerkingen implementeren met behulp van patronen zoals taakgebaseerd asynchroon patroon en gebeurtenisgebaseerd asynchroon patroon. De specifieke implementatie van asynchrone programmering varieert, afhankelijk van de programmeertaal, het platform en de vereisten van de toepassing.

  • Wachtrijen: een wachtrij is een opslagbuffer die zich bevindt tussen een aanvragend onderdeel (producent) en het verwerkingsonderdeel (consument) van de workload. Er kunnen meerdere consumenten zijn voor één wachtrij. Naarmate de taken toenemen, moet u de consumenten schalen om aan de vraag te voldoen. De producent plaatst taken in een wachtrij. In de wachtrij worden de taken opgeslagen totdat een consument capaciteit heeft. Een wachtrij is vaak de beste manier om werk over te dragen aan een verwerkingsservice die pieken in de vraag ondervindt. Zie Op wachtrijen gebaseerd taakverdelingspatroon en Opslagwachtrijen en Service Bus-wachtrijen voor meer informatie.

Groepsgewijze verbinding gebruiken

Groepsgewijze verbindingen is de praktijk van het opnieuw gebruiken van bestaande database verbindingen in plaats van een nieuwe verbinding te maken voor elke aanvraag. Het kan duur zijn om een verbinding met een database tot stand te brengen. U moet een geverifieerde netwerkverbinding met de externe databaseserver maken. Databaseverbindingen zijn vooral duur voor toepassingen die vaak nieuwe verbindingen openen. Groepsgewijze verbindingen hergebruiken bestaande verbindingen en elimineert de kosten van het openen van een nieuwe verbinding voor elke aanvraag. Groepsgewijze verbindingen vermindert de verbindingslatentie en maakt een hoge databasedoorvoer (transacties per seconde) op de server mogelijk. U moet een poolgrootte kiezen die meer verbindingen kan verwerken dan u momenteel hebt. Het doel is om de verbindingsgroep nieuwe binnenkomende aanvragen snel te laten verwerken.

Inzicht in limieten voor groepsgewijze verbindingen. Sommige services beperken het aantal netwerkverbindingen. Wanneer u deze limiet overschrijdt, kunnen verbindingen vertragen of worden beëindigd. U kunt groepsgewijze verbindingen gebruiken om tijdens het opstarten een vaste set verbindingen tot stand te brengen en deze verbindingen vervolgens te onderhouden. In veel gevallen kan een standaardgroepsgrootte bestaan uit slechts enkele verbindingen die snel presteren in eenvoudige testscenario's. Uw toepassing kan de standaardgrootte van de pool op schaal uitputten en een knelpunt creëren. U moet een poolgrootte instellen die is toegewezen aan het aantal gelijktijdige transacties dat wordt ondersteund op elk toepassingsexemplaar.

Test de verbindingsgroep. Elke database en elk toepassingsplatform heeft iets andere vereisten voor het instellen en gebruiken van een pool. Test uw verbindingsgroep om te controleren of deze efficiënt werkt onder belasting.

Risico: groepsgewijze verbindingen kunnen fragmentatie van de groep tot stand brengen en de prestaties verslechteren.

Achtergrondtaken optimaliseren

Veel toepassingen vereisen achtergrondtaken die onafhankelijk van de gebruikersinterface worden uitgevoerd. De toepassing kan de taak starten en interactieve aanvragen van gebruikers blijven verwerken. Voorbeelden van achtergrondtaken zijn batchtaken, processorintensieve taken en langlopende processen, zoals werkstromen. Achtergrondtaken mogen de toepassing niet blokkeren of inconsistenties veroorzaken als gevolg van vertraagde bewerking wanneer het systeem wordt belast. Als u de prestaties wilt verbeteren, kunt u rekenprocessen schalen die achtergrondtaken hosten. Zie Achtergrondtaken en Overwegingen voor schalen en prestaties voor meer informatie.

Infrastructuurprestaties optimaliseren

Het optimaliseren van de prestaties van de infrastructuur betekent het verbeteren en aanpassen van infrastructuurelementen om een optimale werking en optimaal gebruik van resources voor een workload te garanderen. Door de infrastructuur af te stemmen, kunt u verspilling minimaliseren, vertragingen verminderen en meer bereiken met de beschikbare resources. Het zorgt ervoor dat workloads betrouwbaar en snel worden uitgevoerd, wat leidt tot verbeterde gebruikerservaringen en kostenbesparingen. Overweeg de volgende strategieën om de prestaties van de infrastructuur te optimaliseren:

Gebruikslimieten toevoegen. U kunt gebruikslimieten implementeren voor sommige workloadonderdelen. Als u bijvoorbeeld instabiele pods wilt verwijderen, kunt u cpu- en geheugenlimieten voor pods definiëren in Azure Kubernetes Service (AKS). Als u de prestaties wilt optimaliseren, kunt u geheugenlimieten definiëren in virtuele Java-machines (VM's).

Stroomlijn de infrastructuur. Vereenvoudig uw workload om de kans op interactie, afhankelijkheid en compatibiliteitsproblemen te verminderen. Wanneer u uw workload vereenvoudigt, optimaliseert u het resourcegebruik van geheugen, verwerkingskracht en opslag.

Verminder de belasting. Als u de belasting van een workload wilt verminderen, minimaliseert u de vraag van een toepassing en stelt u resources in staat om hun primaire taken uit te voeren. Het is bijvoorbeeld gebruikelijk om te voorkomen dat beveiligingsoplossingen worden uitgevoerd in uw code of op afzonderlijke rekeninstanties. In plaats daarvan moeten webservers HTTP-aanvragen verwerken. Web Application Firewalls en gatewayresources kunnen beveiligingscontroles verwerken. De volgende strategieën helpen de belasting van uw workload te verminderen:

  • Uiteindelijke consistentie: Gebruik een uiteindelijke consistentiemodel om de prestaties te verbeteren door toe te staan dat gegevens enigszins worden gedateerd. Uiteindelijke consistentie vermindert de onmiddellijke vraag naar CPU-cycli en netwerkbandbreedte voor constante gegevensupdates.

  • Taken delegeren: delegeer servertaken aan clients of tussenpersonen, zoals zoekindexen en caches. Delegeer taken zoals het sorteren van gegevens, het filteren van gegevens of het weergeven van weergaven. Wanneer u deze taken offloadt, vermindert u de werkbelasting op uw servers en verbetert u de prestaties.

Optimaliseer het netwerk. Als u een workloadnetwerk wilt optimaliseren voor prestaties, configureert en verfijnt u de netwerkinfrastructuur. Zorg ervoor dat de workload op het hoogste efficiëntieniveau kan werken.

  • Netwerkprotocollen: upgrade naar moderne protocollen zoals HTTP/2, waarmee meerdere aanvragen via één verbinding kunnen worden verzonden. Moderne protocollen verminderen de overhead van het tot stand brengen van nieuwe verbindingen.

    Afweging: moderne protocollen kunnen oudere clients uitsluiten.

  • Netwerkchattiness: Batch netwerkaanvragen samen om het aantal aanvragen te verminderen. In plaats van meerdere kleine aanvragen te maken, kunt u deze combineren tot grotere aanvragen om de netwerkoverhead te verminderen.

  • Databasequery's: zorg ervoor dat databasequery's alleen de benodigde informatie ophalen. Vermijd het ophalen van grote hoeveelheden onnodige gegevens, wat kan leiden tot meer netwerkverkeer en trage prestaties.

  • Statische gegevens: Gebruik een netwerk voor inhoudslevering om vaak gebruikte statische inhoud in de cache op te cachen die zich dicht bij de gebruikers bevindt. Wanneer u gegevens in de cache opslaat, hoeft deze niet over lange afstanden te reizen. Caching verbetert de reactietijden en vermindert het netwerkverkeer.

  • Logboekverzameling: verzamel en bewaar alleen de logboekgegevens die nodig zijn om uw vereisten te ondersteunen. Configureer regels voor gegevensverzameling en implementeer ontwerpoverwegingen om uw Log Analytics-kosten te optimaliseren.

  • Gegevenscompressie: comprimeer en bundel HTTP-inhoud en -bestandsgegevens om snelle overdracht tussen clients en servers mogelijk te maken. Compressie verkleint de gegevens die een pagina of API retourneert en terugstuurt naar de browser of client-app. Compressie optimaliseert het netwerkverkeer, waardoor de communicatie van toepassingen kan worden versneld.

    Afweging: met compressie wordt verwerking aan de serverzijde en clientzijde toegevoegd. De toepassing moet gegevens comprimeren, verzenden en decomprimeren. Multicast-communicatie, of communicatie met meerdere geadresseerden, kan zorgen voor decompressieoverhead. U moet de prestatievariaties testen en meten voor en na het implementeren van gegevenscompressie om te bepalen of deze geschikt is voor uw workload. Zie Antwoordcompressie in ASP.NET Core voor meer informatie.

Azure-facilitering

Instrumentatiecode: Azure Monitor Application Insights ondersteunt automatische instrumentatie (automatische instrumentatie) en handmatige instrumentatie van toepassingscode. Automatische instrumentatie maakt het verzamelen van telemetrie mogelijk zonder de code van de toepassing aan te raken. Handmatige instrumentatie vereist codewijzigingen om de Application Insights- of OpenTelemetry-API te implementeren. U kunt Application Insights Profiler gebruiken om dynamische paden te optimaliseren.

Codelogica optimaliseren: Azure biedt SDK's en bibliotheken voor verschillende programmeertalen om te communiceren met Azure-services. Gebruik SDK's om interacties tussen toepassingen en Azure-resources te vereenvoudigen. SDK's bieden een optimale interactie met Azure-services, waardoor de latentie wordt verminderd en de efficiëntie wordt verbeterd.

Geheugenbeheer optimaliseren: gebruik de functie voor slimme detectie van Application Insights om het geheugenverbruik te analyseren en geheugenlekken te identificeren en aan te pakken.

Azure App Service heeft een profiler en functie voor het verzamelen en analyseren van geheugendumps. Met de functie App Service automatische healing kunnen automatisch geheugendumps en profieltraceringen van .NET- en Java-apps worden uitgevoerd.

Gelijktijdigheid en parallellisme gebruiken: verschillende Azure-services bieden unieke ondersteuning voor gelijktijdigheid, zoals Azure Cosmos DB, Azure Functions en Blob Storage. Voor parallelle uitvoering biedt AKS ondersteuning voor het implementeren van toepassingen in containers, waardoor parallelle verwerking wordt verbeterd.

Azure Batch is een cloudservice voor het plannen van taken die u kunt gebruiken om parallelle en high-performance computing mogelijk te maken zonder dat hiervoor infrastructuur hoeft te worden ingesteld. Zie Achtergrondtaken voor meer informatie.

Infrastructuurprestaties optimaliseren: Implementeer Azure Resource Manager-sjablonen om infrastructuur te definiëren en implementeren met behulp van code. Gebruik deze sjablonen om efficiënte, herhaalbare en consistente resource-implementaties te implementeren. Azure Policy biedt governancemogelijkheden om ervoor te zorgen dat resource-implementaties voldoen aan de best practices en standaarden van de organisatie.

Gebruik voor asynchrone programmering schaalbare wachtrijservices, zoals Azure Queue Storage en Azure Service Bus, om asynchrone programmering mogelijk te maken. U kunt taken in de wachtrij plaatsen en deze onafhankelijk verwerken. Ter ondersteuning van asynchrone bewerkingen biedt Azure Marketplace wachtrijen en hulpprogramma's van derden die u kunt integreren met Azure-services.

Controlelijst voor efficiëntie van prestaties

Raadpleeg de volledige set aanbevelingen.