Delen via


Architectuurstrategieën voor het optimaliseren van code en infrastructuur

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

PE:07 Code en infrastructuur optimaliseren. Gebruik code die goed presteert en zorg ervoor dat de verantwoordelijkheden worden offload naar het platform. 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, worden onnodig resourceverbruik, knelpunten en trage reacties gemaakt. Als u deze inefficiënties wilt compenseren, moet u meer resources toevoegen om dezelfde taken uit te voeren.

Definities

Termijn Definition
Concurrency 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 verminderen van de grootte van bestanden door redundante gegevens te minimaliseren.
Hoop 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.
Parallellisme Wanneer meerdere taken of processen tegelijkertijd worden uitgevoerd.

Het optimaliseren van code en infrastructuur omvat het verfijnen van de code en de ondersteunende infrastructuur om de prestatie-efficiëntie te verbeteren. Het vereist krachtige code 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 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. Masker geen prestatieproblemen met brute force. Brute force betekent het toevoegen van rekenresources om codeprestaties te compenseren, zoals het toevoegen van extra capaciteit in plaats van de bron aan te pakken. U moet prestatieproblemen met optimalisatie oplossen. Wanneer u de codeprestaties optimaliseert, helpt dit het gebruik van systeembronnen te maximaliseren, de reactietijd te verbeteren, de latentie te verminderen en de gebruikerservaring te verbeteren.

Instrumenteer uw code

Het instrumenteren van code 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 codepaden, prestatieknelpunten identificeren en de code optimaliseren voor betere prestatie-efficiëntie.

In een ideale omgeving moet u vroeg in de levenscyclus van softwareontwikkeling codeanalyses uitvoeren. Hoe eerder u een codeprobleem onderscheppen, hoe goedkoper het is om het probleem op te lossen. U wilt zoveel mogelijk van deze codeanalyse automatiseren. Gebruik dynamische en statische hulpprogramma's voor codeanalyse om de handmatige inspanning te verminderen. Houd er echter rekening mee dat deze test nog steeds een simulatie van productie is. Productie biedt het duidelijkste 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 prestaties en resourcegebruik. Het zijn kritieke of vaak uitgevoerde secties van een programma waarvoor hoge prestaties en lage latentie zijn vereist. Als u dynamische codepaden wilt identificeren, kunt u de volgende stappen overwegen:

  • 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 prestatietests om de uitvoeringstijd en het resourceverbruik van verschillende codepaden te meten. Het helpt knelpunten en gebieden voor verbetering te identificeren.

  • 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 essentieel zijn voor het leveren van waarde aan gebruikers of het voldoen aan prestatievereisten.

Codelogica optimaliseren

Het optimaliseren van codelogica gaat over het verfijnen van de structuur en het ontwerp van code om taken met minder resources uit te voeren. Verbeterde logica vermindert onnodige bewerkingen. Er wordt een snellere uitvoering gemaakt met minder resourceverbruik. Verwijder overbodige bewerkingen in het codepad die van invloed kunnen zijn op de prestaties. Prioriteit geven aan het optimaliseren van dynamische paden om de beste prestatie-efficiëntieverbeteringen te zien. Als u codelogica wilt optimaliseren, moet u rekening houden met de volgende strategieën:

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

  • Logboekregistratiebewerkingen minimaliseren: logboekregistratie kan nuttig zijn voor foutopsporing en analyse, maar overmatige logboekregistratie kan van invloed zijn op de prestaties. Evalueer de noodzaak van elke logboekregistratiebewerking en verwijder onnodige logboekregistratie-aanroepen die niet essentieel zijn voor prestatieanalyse.

  • Lussen en voorwaarden optimaliseren: analyseer lussen en voorwaarden in uw code en identificeer overbodige 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 overbodige berekeningen. Overweeg berekeningen buiten de lus te verplaatsen of de registratie van de lus ongedaan te maken.

  • Verminder onnodige gegevensverwerking: controleer uw code op onnodige gegevensverwerkingsbewerkingen, zoals redundante berekeningen of transformaties. Verwijder 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: identificeer gebieden waar overmatige geheugentoewijzing plaatsvindt. Optimaliseer de code door onnodige toewijzingen te verminderen en bestaande resources indien 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 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 voor prestaties geoptimaliseerde SDK's en bibliotheken. 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 cloudservicegegevensvlakken dan met aangepaste API-toegang. SDK's excelleren bij 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.

  • Cross-cutting 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 prestatieaanveling die specifiek is voor de programmeertaal waarmee u werkt. Evalueer uw code op basis van deze aanbevelingen om gebieden voor verbetering te identificeren.

compromissen:

  • Voor het optimaliseren van code en dynamische paden is ontwikkelaarsexpertise vereist bij het identificeren van inefficiënties van code subjectief en kunnen zeer ervaren personen zijn die nodig zijn voor andere taken.
  • SDK's bieden gemak en elimineren de complexiteit van interactie met API's. Maar SDK's kunnen uw besturings- en aanpassingsopties voor aangepaste code beperken.

Geheugenbeheer optimaliseren

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

Problemen met geheugen opsporen. Geheugendumps zijn momentopnamen van toepassingsgeheugen. Ze leggen de geheugenstatus van een toepassing vast op een bepaald tijdstip. Geheugendumps maken retrospectieanalyse 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 routine-foutopsporing en volledige dumps voor complexe, kritieke problemen. Deze strategie biedt een balans tussen resourcegebruik en diagnostische mogelijkheden. Veel hostingservices voor code ondersteunen geheugenopsporing. U moet de voorkeur geven aan services die geheugenanalyse ondersteunen ten opzichte van die services die dat niet doen. Hier volgen de basisstappen voor het opsporen van fouten in het geheugen:

  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 of wanneer aan specifieke 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. Er treden geheugenlekken op wanneer uw toepassing geheugen toewijst, maar niet vrijgeeft wanneer het geheugen niet meer nodig is. Zoek naar objecten of gegevensstructuren die in het geheugen blijven, zelfs wanneer ze de toewijzing ongedaan moeten worden gemaakt.

  4. Oplossing en test: bij het identificeren van de problematische code moet 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 beoordelen van procedures voor geheugenbeheer. Bevestig dat uw oplossingen grondig worden getest om de werkzaamheid ervan te garanderen.

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

Door geheugendumpanalyse op te nemen in de levenscyclus van softwareontwikkeling, kunt u de betrouwbaarheid en efficiëntie van uw toepassingen versterken. 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 efficiënt gebruikmaken van het beschikbare geheugen. Er is minder behoefte aan de garbagecollector om ongebruikt geheugen vrij te maken en vermindert de frequentie en duur van garbagecollectioncycli. Geheugentoewijzingen kunnen kostbaar zijn, met name als u ze regelmatig uitvoert. Minimaliseer geheugentoewijzingen, zodat de code snel en efficiënt kan worden uitgevoerd.

Caches slaan veelgebruikte gegevens dicht bij de processor op, waardoor de prestaties worden verbeterd. Wanneer u geheugentoewijzingen minimaliseert, is er minder conflicten voor cacheruimte, zodat u de cache effectief kunt gebruiken. Een groot aantal geheugentoewijzingen kan de prestaties van toepassingen verlagen 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.

  • Objectpooling: Overweeg objectpooling om grote objecten opnieuw te gebruiken in plaats van ze toe te wijzen en de toewijzing ervan ongedaan te maken.

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

Gelijktijdigheid en parallelle uitvoering gebruiken

Het gebruik van gelijktijdigheid en parallelle uitvoering 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 totale doorvoer en het aantal taken dat een workload kan verwerken. Wanneer u taken gelijktijdig of parallel uitvoert, vermindert deze de runtime van de toepassing en vermindert de latentie en verhoogt de reactietijden. Gelijktijdigheid en parallelle uitvoering maken een efficiënt gebruik van rekenresources mogelijk, zoals CPU-kernen of gedistribueerde systemen. Gelijktijdigheid en parallelle uitvoering verdelen de workload effectief over de rekenresources.

Parallelle uitvoering gebruiken. Parallellisme is de mogelijkheid van een systeem om meerdere taken of processen tegelijk te activeren op meerdere rekenresources. 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 vooruitgang te boeken, waardoor de algehele prestaties kunnen worden verbeterd. U kunt gelijktijdigheid implementeren met behulp van technieken zoals multithreading, waarbij meerdere threads gelijktijdig binnen één proces worden uitgevoerd. U kunt ook asynchrone programmering gebruiken, waarin taken gelijktijdig worden geactiveerd.

  • Asynchrone programmering: 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 langlopende 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 totdat 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 benadering 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 overwegen het Asynchrone Request-Reply patroon te 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 Task-Based Asynchroon patroon en Event-Based 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 tussen een aanvraagonderdeel (producent) en het verwerkingsonderdeel (consument) van de workload. Er kunnen meerdere consumenten zijn voor één wachtrij. Naarmate de taken toenemen, moet u de gebruikers schalen om aan de vraag te voldoen. De producent plaatst taken in een wachtrij. De wachtrij slaat de taken op totdat een consument capaciteit heeft. Een wachtrij is vaak de beste manier om werk af te leveren aan een verwerkingsservice die pieken in de vraag ondervindt. Zie Queue-Based patroon Load Leveling en Storage-wachtrijen en Service Bus-wachtrijen voor meer informatie.

Groepsgewijze verbindingen gebruiken

Het groeperen van verbindingen is het gebruik van het hergebruik van bestaande databaseverbindingen 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 maken met de externe databaseserver. Databaseverbindingen zijn met name duur voor toepassingen die vaak nieuwe verbindingen openen. Bij het groeperen van verbindingen worden bestaande verbindingen hergebruikt en worden de kosten voor het openen van een nieuwe verbinding voor elke aanvraag weggenomen. Verbindingspooling 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 snel nieuwe binnenkomende aanvragen te laten verwerken.

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

Test de verbindingsgroep. Elk database- en toepassingsplatform heeft iets andere vereisten voor het instellen en gebruiken van een pool. Test uw verbindingsgroep om ervoor te zorgen dat deze efficiënt werkt onder belasting.

Risico: Verbindingspooling kan poolfragmentatie en verminderde prestaties tot stand brengen.

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 vanwege vertraagde bewerkingen wanneer het systeem wordt belast. Om de prestaties te verbeteren, kunt u rekeninstanties 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 piekbewerkingen en het beste gebruik van resources voor een workload te garanderen. Door de infrastructuur te verfijnen, 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. Houd rekening met 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). Om de prestaties te 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 die op een toepassing wordt geplaatst en stelt u resources in staat om hun primaire taken uit te voeren. Het is bijvoorbeeld gebruikelijk om beveiligingsoplossingen in uw code of op afzonderlijke rekeninstanties te voorkomen. In plaats daarvan moeten webservers HTTP-aanvragen verwerken. Web Application Firewalls en gatewaybronnen kunnen beveiligingscontroles afhandelen. 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 op CPU-cycli en netwerkbandbreedte voor constante gegevensupdates.

  • Taken delegeren: servertaken delegeren aan clients of tussenpersonen, zoals zoekindexen en caches. Taken delegeren, zoals het sorteren van gegevens, het filteren van gegevens of het weergeven van weergaven. Wanneer u deze taken offload, vermindert u de workload 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 niveau van efficiëntie kan werken.

  • Netwerkprotocollen: voer een upgrade uit 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.

    Compromis: Moderne protocollen kunnen oudere clients uitsluiten.

  • Netwerkchattiness: Batch-netwerkaanvragen samen om het aantal aanvragen te verminderen. In plaats van meerdere kleine aanvragen te maken, combineert u deze in 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 contentlevering om vaak gebruikte statische inhoud in de cache op te cachen die zich dicht bij de gebruikers bevindt. Wanneer u gegevens cachet, hoeft deze niet over lange afstanden te reizen. Caching verbetert de reactietijden en vermindert 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: HTTP-inhoud en bestandsgegevens comprimeren en bundelen om snelle overdracht tussen clients en servers mogelijk te maken. Compressie verkleint de gegevens die een pagina of API retourneert en stuurt terug naar de browser of client-app. Compressie optimaliseert netwerkverkeer, waardoor de communicatie van toepassingen kan worden versneld.

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

Azure-ondersteuning

Instrumenteringscode: Azure Monitor Application Insights ondersteunt automatische instrumentatie (autoinstrumentatie) en handmatige instrumentatie van toepassingscode. Automatische instrumentatie maakt het verzamelen van telemetrie mogelijk zonder de code van de toepassing aan te raken. Voor handmatige instrumentatie zijn codewijzigingen vereist voor het implementeren van de Application Insights- of OpenTelemetry-API. 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 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 geheugenverbruik te analyseren en te helpen geheugenlekken te identificeren en op te pakken.

Azure App Service heeft een profiler- en geheugendumpverzamelings- en analysefunctie. Met de functie voor automatisch herhalen van App Service kunnen automatisch geheugendumps en profieltraceringen van .NET- en Java-apps worden gebruikt.

Gelijktijdigheid en parallelle uitvoering gebruiken: verschillende Azure-services bieden unieke ondersteuning voor gelijktijdigheid, zoals Azure Cosmos DB, Azure Functions en Blob Storage. Voor parallelle uitvoering biedt services 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 in te schakelen zonder dat hiervoor infrastructuur hoeft te worden ingesteld. Zie Achtergrondtaken voor meer informatie.

Infrastructuurprestaties optimaliseren: Azure Resource Manager-sjablonen implementeren 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.

Voor asynchrone programmering gebruikt u schaalbare wachtrijservices, zoals Azure Queue Storage en Azure Service Bus, om asynchrone programmering te vergemakkelijken. U kunt taken in de wachtrij plaatsen en onafhankelijk verwerken. Azure Marketplace biedt wachtrijen en hulpprogramma's van derden die u kunt integreren met Azure-services om asynchrone bewerkingen te ondersteunen.

Controlelijst voor prestatie-efficiëntie

Raadpleeg de volledige set aanbevelingen.