Aanbevelingen voor het optimaliseren van codekosten
Van toepassing op deze controlelijst voor Azure Well-Architected Framework Cost Optimization:
CO:11 | Codekosten optimaliseren. Evalueer en wijzig code om te voldoen aan functionele en niet-functionele vereisten met minder of goedkopere resources. |
---|
In deze handleiding worden de aanbevelingen voor het optimaliseren van codekosten beschreven. Codeoptimalisatie is het proces voor het verbeteren van de efficiëntie, prestaties en kosteneffectiviteit van toepassingscode. Effectieve codeoptimalisatie omvat het aanbrengen van wijzigingen in de code om het resourceverbruik te verminderen, de uitvoeringstijd te minimaliseren en de algehele prestaties te verbeteren.
Door code te optimaliseren, kunt u inefficiënties identificeren en elimineren die kunnen leiden tot een verhoogd resourceverbruik en hogere kosten. U kunt de verwerkingstijd, het geheugengebruik en de netwerkoverhead verminderen, wat kan leiden tot toepassingen die sneller en sneller reageren. Verbeterde prestaties verbeteren de gebruikerservaring en stelt uw systeem in staat om grotere workloads efficiënt te verwerken.
Definities
Termijn | Definitie |
---|---|
Code-instrumentatie | De praktijk van het toevoegen van codefragmenten of bibliotheken aan code waarmee gegevens worden verzameld en de codeprestaties tijdens runtime worden bewaakt. |
Gelijktijdigheid | De uitvoering van meerdere processen tegelijk. |
Gegevensserialisatie | Het proces van het converteren van gegevensobjecten naar een indeling die kan worden opgeslagen of verzonden en deze vervolgens weer kunt reconstrueren naar het oorspronkelijke formulier wanneer dat nodig is. |
Dynamische paden | Kritieke of vaak uitgevoerde secties van een programma waarvoor hoge prestaties en lage latentie zijn vereist. |
Belangrijke ontwerpstrategieën
Kosten optimaliseren van code betekent het verbeteren van code om dezelfde functionaliteit te bereiken met minder resources per exemplaar, zoals CPU-cycli, geheugen en opslag. Door het verbruik van resources te verminderen, kunt u geld besparen wanneer toepassingen grote hoeveelheden gegevens verwerken of hoge verkeersbelastingen ervaren.
Codeverbeteringen zijn het meest effectief wanneer u andere inspanningen voor kostenoptimalisatie volgt om te schalen, rechten, redundantie en beperking. Nadat u deze fundamentele elementen hebt afgehandeld, kunt u overwegen om codeoptimalisatie te overwegen.
Misschien weet u niet of u inefficiënte code hebt. Serverloze functies, automatische schaalaanpassing en betrouwbaarheid kunnen inefficiënties van code maskeren. Met de volgende strategieën kunt u toepassingscode identificeren en oplossen die meer kost dan nodig is.
Instrumenteer uw code
Het instrumenteren van code is de praktijk van het toevoegen van codefragmenten of bibliotheken die gegevens verzamelen en codeprestaties bewaken tijdens runtime. Hiermee kunnen ontwikkelaars informatie verzamelen over belangrijke metrische gegevens, zoals resourceverbruik (CPU of geheugengebruik) en uitvoeringstijd. Door code te instrumenteren, kunnen ontwikkelaars inzicht krijgen in dynamische codepaden, prestatieknelpunten identificeren en de code optimaliseren voor een betere efficiëntie en kosteneffectiviteit.
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 dit op te lossen.
Automatiseer zoveel mogelijk van deze codeanalyse. 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 optimaliseren
Door uw code te instrumenteren, kunt u het resourceverbruik van codepaden meten. Met deze metingen kunt u dynamische paden identificeren. Dynamische paden hebben een aanzienlijk effect op prestaties en resourcegebruik. Ze zijn kritieke of vaak uitgevoerde secties van een programma waarvoor hoge prestaties en lage latentie zijn vereist.
Als u dynamische paden wilt identificeren, kunt u deze taken overwegen:
Runtimegegevens analyseren: runtimegegevens verzamelen en analyseren 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 codepaden te meten. Deze meting helpt knelpunten en gebieden voor verbetering te identificeren.
Houd rekening met bedrijfslogica en gebruikerseffect: evalueer het belang van 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.
Bekijk aanbevelingen voor prestaties die specifiek zijn voor de programmeertaal waarmee u werkt. Evalueer uw code op basis van deze aanbevelingen om gebieden voor verbetering te identificeren. Verwijder overbodige bewerkingen in het codepad die van invloed kunnen zijn op de prestaties.
Verwijder overbodige functie-aanroepen: Controleer uw code. Identificeer functies die niet essentieel zijn voor de gewenste functionaliteit en kan een negatieve invloed hebben op de prestaties. Als een functieoproep bijvoorbeeld een validatie uitvoert die eerder in de code is opgetreden, kunt u deze onnodige functie-aanroep 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: lussen en voorwaarden in uw code analyseren. Identificeer eventuele onnodige iteraties of voorwaarden die u kunt elimineren. Het vereenvoudigen en optimaliseren van deze structuren kan de prestaties van uw code verbeteren.
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.
Netwerkaanvragen minimaliseren: als uw code netwerkaanvragen doet, 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.
Evalueer cross-cutting implementaties: Houd rekening met de effecten van cross-cutting implementaties, zoals middleware- of tokencontroles. Beoordeel of ze een negatieve invloed hebben op de prestaties.
Compromis: het optimaliseren van code en dynamische paden vereist ontwikkelaarsexpertise bij het identificeren van inefficiënties van code. Deze hoogopgeleide personen moeten mogelijk tijd besteden aan andere taken.
Het gebruik van gelijktijdigheid evalueren
Het evalueren van het gebruik van gelijktijdigheid omvat het beoordelen of asynchrone verwerking, multithreading of multiprocessing het resourcegebruik kan maximaliseren en de kosten kan verlagen. Met behulp van asynchrone verwerking, multithreading of multiprocessing kunt u meer taken met dezelfde resources afhandelen. Het is echter van cruciaal belang om een goede implementatie te garanderen om meer overhead te voorkomen en kosteneffectiviteit te handhaven.
Als u wilt evalueren of gelijktijdigheid geschikt is, kunt u de volgende richtlijnen volgen:
Asynchrone verwerking: Asynchrone verwerking maakt niet-blokkerende uitvoering mogelijk. U kunt bijvoorbeeld een proces starten en vervolgens onderbreken om een tweede proces te voltooien.
Bepaal de codeonderdelen of bewerkingen die u asynchroon kunt uitvoeren. Identificeer de programmeertaal of het framework dat u gebruikt en begrijp het asynchrone programmeermodel dat wordt ondersteund, zoals
async
/await
in .NET of beloften in JavaScript.Herstructureer uw code om asynchrone programmeerconstructies te gebruiken door het niet blokkeren van de uitvoering van taken mogelijk te maken. Koppel langlopende of I/O-intensieve bewerkingen los van de belangrijkste uitvoeringsthread met behulp van asynchrone methoden of callbacks. Gebruik asynchrone API's of bibliotheken die uw programmeertaal of framework biedt voor het afhandelen van asynchrone werkstromen.
Multithreading: Bij multithreading voert u meerdere threads van één proces gelijktijdig uit.
Identificeer secties van uw code die u gelijktijdig en onafhankelijk kunt uitvoeren. Lees documentatie of richtlijnen die specifiek zijn voor de programmeertaal of het framework dat u gebruikt voor aanbevolen procedures voor multithreading. Maak meerdere threads of threadgroepen om parallelle uitvoering van taken af te handelen.
Implementeer synchronisatiemechanismen, zoals vergrendelingen, mutexes of semaphores, om threadveiligheid te garanderen en racevoorwaarden te voorkomen wanneer code toegang heeft tot gedeelde resources. Overweeg abstracties op een hoger niveau te gebruiken, zoals threadgroepen of op taken gebaseerde parallellismebibliotheken, om het beheer van meerdere threads te stroomlijnen en gelijktijdigheidsbeheer te vereenvoudigen.
Multiprocessing: Met meerdere processen kunnen processen parallel worden uitgevoerd. Het kan een beter gebruik van meerdere CPU-kernen bieden dan multithreading.
Bepaal of de werkbelasting of bewerkingen in uw code zich lenen voor parallelle verwerking. Identificeer de programmeertaal of het framework dat u gebruikt en verken de mogelijkheden voor meervoudige verwerking. Denk bijvoorbeeld aan de module voor meerdere processen in Python of parallelle streams in Java. Ontwerp uw code om de workload te splitsen in meerdere onafhankelijke taken die gelijktijdig kunnen worden verwerkt.
Gebruik API's of bibliotheken voor meerdere verwerkingen om parallelle processen te maken en te beheren. Distribueer de workload tussen deze API's of bibliotheken. Als u coördinatie en het delen van gegevens tussen meerdere processen wilt inschakelen, implementeert u communicatiemechanismen zoals IPC (Interprocess Communication), gedeeld geheugen of berichtdoorgifte, afhankelijk van uw programmeertaal of framework.
De juiste SDK's gebruiken
Voor kostenoptimalisatie selecteert u SDK's die zijn ontworpen om het resourcegebruik te optimaliseren en de prestaties te verbeteren. Het is belangrijk om de functies en mogelijkheden van elke SDK te evalueren. Overweeg de compatibiliteit met uw programmeertaal en ontwikkelomgeving.
Hier vindt u richtlijnen voor het kiezen van de beste SDK's voor uw workload:
Voer prestatietests uit: Vergelijk het resourcegebruik en de prestaties van SDK's door middel van prestatietests. Kies de SDK die het beste aan uw behoeften voldoet in termen van resourceoptimalisatie en prestatieverbetering. Integreer de gekozen SDK in uw codebasis door de opgegeven documentatie en richtlijnen te volgen.
Resourcegebruik bewaken en code optimaliseren: Resourcegebruik bewaken met de geïmplementeerde SDK. Verzamel inzichten uit bewaking en analyse om uw code te optimaliseren.
Het juiste besturingssysteem kiezen
De meeste programmeertalen kunnen worden uitgevoerd op verschillende besturingssystemen, dus het is belangrijk om uw besturingssysteem te evalueren tegen goedkopere alternatieven. Als een alternatief besturingssysteem ondersteuning biedt voor dezelfde of vergelijkbare functionaliteit tegen lagere kosten, is het de moeite waard om rekening mee te houden. Door een goedkoper besturingssysteem te kiezen, kunt u de kosten van licentiekosten en infrastructuurkosten mogelijk verlagen.
Het juiste besturingssysteem kan bijdragen aan de algehele kostenoptimalisatie voor uw workload. Als u het juiste besturingssysteem voor uw workload wilt kiezen, probeert u deze activiteiten:
Evalueer uw vereisten: inzicht in de specifieke behoeften van uw workload, inclusief de programmeertalen en frameworks die u gebruikt. Overweeg eventuele afhankelijkheden of integraties met andere systemen.
Overweeg compatibiliteit: zorg ervoor dat het besturingssysteem dat u kiest compatibel is met uw programmeertalen, frameworks en bibliotheken van derden of hulpprogramma's die u gebruikt. Raadpleeg de documentatie en ondersteuning van de community voor het besturingssysteem om ervoor te zorgen dat het goed compatibel is met uw technologiestack.
Functionaliteit evalueren: Bepaal of het alternatieve besturingssysteem dezelfde of vergelijkbare functionaliteit ondersteunt als uw huidige besturingssysteem. Evalueer of deze de benodigde functies en mogelijkheden biedt die uw workload nodig heeft.
Kosten vergelijken: vergelijk de kosten die zijn gekoppeld aan besturingssystemen. Denk aan factoren zoals licentiekosten, ondersteuningskosten en infrastructuurvereisten. Zoek naar goedkopere alternatieven die aan de vereisten van uw workload kunnen voldoen zonder de functionaliteit in gevaar te brengen.
Overweeg prestaties en optimalisatie: evalueer de prestaties en optimalisatiemogelijkheden van het alternatieve besturingssysteem. Zoek naar benchmarks, casestudy's of prestatievergelijkingen om te begrijpen hoe het presteert in praktijkscenario's.
Controleer de beveiliging en stabiliteit: Beoordeel de beveiliging en stabiliteit van het alternatieve besturingssysteem. Zoek naar beveiligingsupdates, patches en communityondersteuning om ervoor te zorgen dat het besturingssysteem actief wordt onderhouden en veilig en stabiel is in het algemeen.
Overweeg ondersteuning van leveranciers: evalueer het niveau van de ondersteuning van leveranciers dat beschikbaar is voor het alternatieve besturingssysteem. Controleer of er officiële ondersteuningskanalen, documentatie en een community van gebruikers zijn die hulp kunnen bieden als u dit nodig hebt.
Netwerkverkeer optimaliseren
Het optimaliseren van netwerkdoorkruising gaat over het minimaliseren van netwerkverkeer tussen workloadonderdelen. Gegevensoverdracht heeft vaak een bijbehorende kosten. Door netwerkverkeer te minimaliseren, kunt u de hoeveelheid gegevens verminderen die moet worden overgedragen terwijl de kosten worden verlaagd.
Analyseer uw workload en identificeer overbodige gegevensoverdrachten tussen onderdelen. Vermijd het overdragen van redundante of dubbele gegevens en verzend alleen essentiële informatie. Als een onderdeel bijvoorbeeld herhaaldelijk dezelfde gegevens van een ander onderdeel aanvraagt, is het een kandidaat voor optimalisatie. U kunt uw code herstructureren om onnodige aanroepen of batchaanvragen te verminderen, waardoor de overgedragen gegevens worden geminimaliseerd. Toepassingen kunnen hele objecten of gegevensstructuren verzenden wanneer er slechts enkele velden nodig zijn. Door de code te optimaliseren om alleen de vereiste gegevens te verzenden, minimaliseert u de grootte van elke gegevensoverdracht.
Netwerkprotocollen optimaliseren
Netwerkprotocollen spelen een cruciale rol bij de efficiëntie van netwerkcommunicatie. Door netwerkprotocollen te optimaliseren, kunt u de algehele efficiëntie van gegevensoverdracht verbeteren en het resourceverbruik verminderen.
Houd rekening met deze suggesties:
Kies efficiënte protocollen: selecteer protocollen die bekend staan om hun efficiëntie in termen van snelheid van gegevensoverdracht en het minimaliseren van overhead. U kunt bijvoorbeeld protocollen zoals HTTP/2 via HTTP/1.1 gebruiken. Deze protocollen zijn ontworpen om de prestaties te verbeteren door de latentie te verminderen en de gegevensoverdracht te optimaliseren. Gebruik bibliotheken en frameworks in uw toepassing om deze protocollen te gebruiken.
Ondersteuningscompressie: Implementeer compressiemechanismen in uw netwerkprotocollen om de grootte van gegevens die worden overgedragen te verminderen. Compressie kan de hoeveelheid gegevens die via het netwerk worden verzonden aanzienlijk verminderen, wat leidt tot verbeterde prestaties en minder bandbreedtegebruik. Compressie aan de serverzijde wordt doorgaans ingeschakeld in de toepassingscode of serverconfiguratie.
Groepsgewijze verbindingen gebruiken: met verbindingspooling kunt u bestaande netwerkverbindingen hergebruiken om de overhead van het tot stand brengen van nieuwe verbindingen voor elke aanvraag te verminderen. Verbindingspooling kan de efficiëntie van netwerkcommunicatie verbeteren door de overhead van het instellen en afbreken van verbindingen te voorkomen. Kies een bibliotheek of framework voor groepsgewijze verbindingen en configureer deze om te voldoen aan de behoeften van de werkbelasting.
Andere optimalisaties implementeren: Verken andere optimalisaties die specifiek zijn voor uw workload en netwerkomgeving. U kunt bijvoorbeeld inhoud opslaan in cache, taakverdeling en het vormgeven van verkeer gebruiken om netwerkkruising verder te optimaliseren.
Netwerkoverhead minimaliseren
Minimaliseer de hoeveelheid netwerkverkeer en gegevensoverdracht tussen onderdelen van uw workload. Door de netwerkoverhead te verminderen, kunt u de kosten voor uitgaand gegevens en inkomend verkeer verlagen en de algehele netwerkprestaties verbeteren.
Houd rekening met deze technieken:
Redundante aanvragen verminderen: analyseer de code om dubbele of onnodige aanvragen te identificeren. In plaats van meerdere aanvragen voor dezelfde gegevens te doen, kunt u de code wijzigen om de gegevens eenmaal op te halen en deze zo nodig opnieuw te gebruiken.
Gegevensgrootte optimaliseren: controleer de gegevens die worden verzonden tussen onderdelen of systemen en zoek naar mogelijkheden om de grootte te minimaliseren. Overweeg technieken zoals het comprimeren van de gegevens vóór verzending of het gebruik van efficiëntere gegevensindelingen. Door de gegevensgrootte te verminderen, kunt u het netwerkbandbreedtegebruik verlagen en de algehele efficiëntie verbeteren.
Batchaanvragen: Overweeg, indien van toepassing, meerdere kleinere aanvragen in één grotere aanvraag te batcheren. Batchverwerking vermindert de overhead van het tot stand brengen van meerdere verbindingen en vermindert de algehele gegevensoverdracht.
Gegevensserialisatie gebruiken: gegevensserialisatie is het proces van het converteren van complexe gegevensstructuren of objecten naar een indeling die eenvoudig kan worden verzonden via een netwerk of kan worden opgeslagen in een permanent opslagsysteem. Deze strategie omvat het weergeven van de gegevens in een gestandaardiseerde indeling, zodat de gegevens efficiënt kunnen worden verzonden, verwerkt en gereconstrueerd aan het ontvangende einde.
Selecteer een serialisatie-indeling die compact, snel en geschikt is voor de vereisten van uw workload.
Serialisatie-indeling Beschrijving Protocolbuffers (protobuf) Een binaire serialisatie-indeling die efficiënte codering en decodering van gestructureerde gegevens biedt. Er worden getypte definitiebestanden gebruikt om berichtstructuren te definiëren. MessagePack Een binaire serialisatie-indeling voor compacte overdracht via de kabel. Het ondersteunt verschillende gegevenstypen en biedt snelle serialisatie- en deserialisatieprestaties. JavaScript Object Notation (JSON) Een veelgebruikte indeling voor gegevensserialisatie die door mensen kan worden gelezen en waarmee u gemakkelijk kunt werken. JSON is gebaseerd op tekst en biedt brede platformoverschrijdende ondersteuning. Binaire JSON (BSON) Een binaire serialisatie-indeling die vergelijkbaar is met JSON, maar is ontworpen voor efficiënte serialisatie en deserialisatie. BSON bevat extra gegevenstypen die niet beschikbaar zijn in JSON. Afhankelijk van de serialisatie-indeling moet u logica implementeren om objecten of gegevensstructuren te serialiseren in de gekozen indeling en deze weer te deserialiseren in de oorspronkelijke vorm. U kunt deze logica implementeren met behulp van bibliotheken of frameworks die serialisatiemogelijkheden bieden voor de indeling.
Gegevenstoegang optimaliseren
Het optimaliseren van gegevenstoegang verwijst naar het stroomlijnen van de patronen en technieken voor het ophalen en opslaan van gegevens om onnodige bewerkingen te minimaliseren. Wanneer u gegevenstoegang optimaliseert, kunt u kosten besparen door het resourcegebruik te verminderen, het ophalen van gegevens te verminderen en de efficiëntie van gegevensverwerking te verbeteren. Overweeg technieken zoals het opslaan van gegevens in cache, efficiënte gegevensquery's en gegevenscompressie.
Cachemechanismen gebruiken
Caching omvat het opslaan van veelgebruikte gegevens dichter bij de onderdelen die hiervoor nodig zijn. Deze techniek vermindert de noodzaak van netwerkkruising door de gegevens uit de cache te leveren in plaats van deze via het netwerk op te halen.
Houd rekening met deze cachingmechanismen:
Een externe cache gebruiken: een populaire cacheoplossing is een netwerk voor contentlevering. Het helpt latentie te minimaliseren en netwerkkruising te verminderen door statische inhoud dichter bij consumenten in de cache te plaatsen.
Cacheparameters afstemmen: Configureer cacheparameters, zoals time to live (TTL), om het voordeel van caching te optimaliseren terwijl potentiële nadelen worden geminimaliseerd. Het instellen van een juiste TTL zorgt ervoor dat gegevens in de cache actueel en relevant blijven.
Gebruik in-memory caching: naast externe caching-oplossingen kunt u overwegen om caching in het geheugen in uw toepassing te implementeren. In-memory caching kan helpen bij het gebruik van niet-actieve rekenresources en het verhogen van de rekendichtheid van toegewezen resources.
Databaseverkeer optimaliseren
U kunt de efficiëntie van toepassingscommunicatie naar de database verbeteren. Hier volgen enkele belangrijke overwegingen en technieken voor het optimaliseren van databaseverkeer:
Indexen maken: Indexeren is het proces van het maken van gegevensstructuren die de snelheid van het ophalen van gegevens verbeteren. Door indexen te maken voor vaak opgevraagde kolommen, kunt u de tijd die nodig is voor het uitvoeren van query's aanzienlijk verminderen. Als u bijvoorbeeld een tabel met gebruikers hebt met een kolom voor gebruikersnamen, kunt u een index maken in de kolom gebruikersnaam om query's te versnellen die zoeken naar specifieke gebruikersnamen.
Identificeer de meest gebruikte kolommen en maak indexen voor deze kolommen om het ophalen van gegevens te versnellen. Analyseer en optimaliseer regelmatig de bestaande indexen om ervoor te zorgen dat ze nog steeds effectief zijn. Vermijd overindexering omdat dit negatieve invloed kan hebben op invoeg- en updatebewerkingen.
Query's optimaliseren: ontwerp efficiënte query's door rekening te houden met de specifieke gegevensvereisten en onnodige gegevens ophalen te minimaliseren. Begin met het gebruik van de juiste jointypen (bijvoorbeeld inner join en left join), op basis van de relatie tussen tabellen. Gebruik technieken voor queryoptimalisatie, zoals hints voor query's, analyse van queryplannen en het herschrijven van query's om de prestaties te verbeteren.
Resultaten van cachequery's: u kunt de resultaten van query's die vaak worden uitgevoerd, opslaan in het geheugen of in een cache. Volgende uitvoeringen van dezelfde query kunnen vervolgens worden uitgevoerd vanuit de cache, waardoor dure databasebewerkingen niet meer nodig zijn.
Gebruik een ORM-framework (Object-Relational Mapping): Gebruik ORM-functies zoals luie laden, opslaan in cache en batchverwerking om het ophalen van gegevens te optimaliseren en retourbewerkingen van databases te minimaliseren. Gebruik ORM-frameworks zoals Entity Framework voor C# of Sluimerstand voor Java.
Opgeslagen procedures optimaliseren: de logica en prestaties van opgeslagen procedures analyseren en optimaliseren. Het doel is om onnodige berekeningen of redundante query's in opgeslagen procedures te voorkomen. Optimaliseer het gebruik van tijdelijke tabellen, variabelen en cursors om het resourceverbruik te minimaliseren.
Gegevens ordenen
Het ordenen van gegevens voor efficiënte toegang en ophalen omvat het structureren en opslaan van gegevens op een manier waarmee de prestaties worden gemaximaliseerd en het resourceverbruik wordt geminimaliseerd. Het kan de reactietijden van query's verbeteren, de kosten voor gegevensoverdracht verminderen en het opslaggebruik optimaliseren.
Hier volgen enkele technieken voor het efficiënt ordenen van gegevens:
Partitie: Partitionering omvat het verdelen van een grote gegevensset in kleinere, beter beheerbare subsets die partities worden genoemd. U kunt elke partitie afzonderlijk opslaan om parallelle verwerking en verbeterde queryprestaties mogelijk te maken. U kunt bijvoorbeeld gegevens partitioneren op basis van een specifiek bereik van waarden of door gegevens over servers te distribueren. Deze techniek kan de schaalbaarheid verbeteren, conflicten verminderen en het resourcegebruik optimaliseren.
Shard: Sharding is een techniek voor het horizontaal verdelen van gegevens over meerdere database-exemplaren of -servers. Elke shard bevat een subset van de gegevens en query's kunnen parallel worden verwerkt in deze shards. Sharding kan de queryprestaties verbeteren door de workload te distribueren en de hoeveelheid gegevens te verminderen waartoe elke query toegang heeft.
Comprimeren: Gegevenscompressie omvat het verminderen van de grootte van gegevens om de opslagvereisten te minimaliseren en de efficiëntie van gegevensoverdracht te verbeteren. Omdat gecomprimeerde gegevens minder schijfruimte in beslag neemt, kunnen er besparingen in de opslagkosten worden bespaard. Gecomprimeerde gegevens kunnen ook sneller worden overgedragen via netwerken en kosten voor gegevensoverdracht verlagen.
Denk bijvoorbeeld aan een scenario waarin u een grote gegevensset met klantgegevens hebt. Door de gegevens te partitioneren op basis van klantregio's of demografische gegevens, kunt u de workload over meerdere servers verdelen en de queryprestaties verbeteren. U kunt de gegevens ook comprimeren om de opslagkosten te verlagen en de efficiëntie van gegevensoverdracht te verbeteren.
Oplossingsontwerp optimaliseren
Evalueer uw workloadarchitectuur om mogelijkheden voor resourceoptimalisatie te identificeren. Het doel is om de juiste services voor de juiste taak te gebruiken.
Om dit doel te bereiken, moet u mogelijk onderdelen van de architectuur opnieuw ontwerpen om minder resources te gebruiken. Overweeg serverloze of beheerde services en optimaliseer resourcetoewijzing. Door uw architectuur te optimaliseren, kunt u voldoen aan de functionele en niet-functionele vereisten terwijl u minder resources per instantie verbruikt.
Ontwerppatronen gebruiken
Ontwerppatronen zijn herbruikbare oplossingen waarmee ontwikkelaars terugkerende ontwerpproblemen kunnen oplossen. Ze bieden een gestructureerde benadering voor het ontwerpen van code die efficiënt, onderhoudbaar en schaalbaar is.
Ontwerppatronen helpen bij het optimaliseren van het gebruik van systeemresources door richtlijnen te bieden voor efficiënte resourcetoewijzing en -beheer. Het circuitonderbrekerpatroon helpt bijvoorbeeld onnodig resourceverbruik te voorkomen door een mechanisme te bieden voor het afhandelen en herstellen van fouten op een gecontroleerde manier.
Met ontwerppatronen kunt u code op de volgende manieren optimaliseren:
Kortere ontwikkeltijd: Ontwerppatronen bieden bewezen oplossingen voor veelvoorkomende ontwerpproblemen, waardoor ontwikkeltijd kan worden bespaard. Door vastgestelde patronen te volgen, kunnen ontwikkelaars terugkerende werkzaamheden vermijden en zich richten op het implementeren van de specifieke vereisten van hun toepassingen.
Verbeterde onderhoudbaarheid: ontwerppatronen bevorderen modulaire en gestructureerde code die gemakkelijker te begrijpen, te wijzigen en te onderhouden is. Ze kunnen leiden tot kostenbesparingen in termen van verminderde foutopsporing en onderhoudsinspanningen.
Schaalbaarheid en prestaties: Ontwerppatronen helpen bij het ontwerpen van schaalbare en performante systemen. Patronen zoals het cache-aside-patroon kunnen de prestaties verbeteren door vaak gebruikte gegevens in de cache op te cachen om de noodzaak van dure berekeningen of externe aanroepen te verminderen.
Om ontwerppatronen te implementeren, moeten ontwikkelaars de principes en richtlijnen van elk patroon begrijpen en deze toepassen in de code. Overweeg het juiste patroon te identificeren voor een probleem, inzicht te krijgen in de structuur en onderdelen ervan en het patroon te integreren in het algemene ontwerp.
Er zijn verschillende resources beschikbaar, zoals documentatie, zelfstudies en voorbeeldcode. Deze resources kunnen ontwikkelaars helpen bij het effectief leren en implementeren van ontwerppatronen.
Configuraties wijzigen
Controleer en werk uw workloadconfiguratie regelmatig bij om ervoor te zorgen dat deze overeenkomt met uw huidige vereisten. Overweeg om de grootte en configuratie-instellingen van resources aan te passen op basis van de workloadvereisten. Door configuraties te optimaliseren, kunt u resources effectief toewijzen en overprovisioning voorkomen om kosten te besparen.
Architectuur herstructureren
Evalueer uw workloadarchitectuur en identificeer mogelijkheden voor het herstructureren of opnieuw ontwerpen van onderdelen om het resourceverbruik te optimaliseren. Overweeg technieken zoals het aannemen van een microservicesarchitectuur, het implementeren van het circuitonderbrekerpatroon en het gebruik van serverloze computing. Door uw architectuur te optimaliseren, kunt u beter resourcegebruik en kostenefficiëntie bereiken.
Resourcegrootten wijzigen
Bewaak en analyseer continu het resourcegebruik van uw workload. Pas op basis van de waargenomen patronen en trends de grootte en configuratie-instellingen van resources aan om het resourceverbruik te optimaliseren.
Overweeg om virtuele machines aan te passen, geheugentoewijzing aan te passen en opslagcapaciteit te optimaliseren. Door resources te rechten te geven, kunt u onnodige kosten voorkomen die zijn gekoppeld aan onderbezetting of overprovisioning.
Compromis: het herwerken van code en architectuur past mogelijk niet bij de huidige projectplanningen en kan leiden tot een planning en een kostenslip.
Azure-facilitering
Instrumenteringscode: Azure biedt hulpprogramma's voor bewaking en logboekregistratie, zoals Azure Monitor, Application Insights en Log Analytics. U kunt deze hulpprogramma's gebruiken om de prestaties en het gedrag van uw code in realtime bij te houden en te analyseren.
Dynamische paden identificeren en optimaliseren: Application Insights en Application Insights Profiler helpen bij het identificeren en optimaliseren van de dynamische paden in uw code door uitvoeringstijden en resourcegebruik te analyseren. U kunt onnodige geheugentoewijzingen minimaliseren en het geheugengebruik optimaliseren met Profiler.
De juiste SDK's gebruiken: Azure biedt SDK's in meerdere programmeertalen, geoptimaliseerd voor prestaties en gebruiksgemak. Deze SDK's bieden vooraf gedefinieerde functies en bibliotheken die communiceren met Azure-services om de behoefte aan aangepaste implementatie te verminderen.
Netwerkdoorkruising optimaliseren: Verschillende Azure-services ondersteunen snelle netwerkprotocollen zoals HTTP/2 en QUIC voor efficiënte communicatie tussen services en toepassingen.
Azure-services, zoals Azure Database for PostgreSQL - Flexible Server, ondersteunen groepsgewijze verbindingen.
ondersteuning voor Azure batchverwerking in verschillende services, zodat u meerdere bewerkingen kunt groeperen en in één aanvraag kunt uitvoeren. Batchverwerking kan de efficiëntie aanzienlijk verbeteren en de netwerkoverhead verminderen.
Wat betreft gegevensserialisatie ondersteuning voor Azure verschillende serialisatie-indelingen, waaronder JSON en XML. Kies de juiste serialisatie-indeling op basis van gegevensgrootte, prestatievereisten en interoperabiliteitsbehoeften.
Gegevenstoegang optimaliseren: Azure biedt cachingservices zoals Azure Cache voor Redis. U kunt caching gebruiken om veelgebruikte gegevens dichter bij de toepassing op te slaan, wat resulteert in een snellere ophaal- en verminderde back-endbelasting.
Indexering en queryoptimalisatie: Azure-services zoals Azure SQL Database en Azure Cosmos DB bieden indexeringsmogelijkheden om queryprestaties te optimaliseren. Door de juiste indexeringsstrategie te kiezen en query's te optimaliseren, kunt u de algehele efficiëntie van het ophalen van gegevens verbeteren.
Object-relationele toewijzing (ORM): ondersteuning voor Azure ORM-frameworks zoals Entity Framework. Deze frameworks vereenvoudigen gegevenstoegang en toewijzing tussen objectgeoriënteerde code en relationele of NoSQL-databases.
Opgeslagen procedures optimaliseren: u kunt Azure-services zoals Azure SQL Database gebruiken om opgeslagen procedures te maken en te optimaliseren. Opgeslagen procedures kunnen de prestaties verbeteren door netwerkrondes te verminderen en SQL-instructies vooraf te compileren.
Partitionering en sharding: Azure biedt partitionerings- en shardingmogelijkheden in services zoals Azure Cosmos DB en Azure SQL Database. U kunt partitionering gebruiken om gegevens over meerdere knooppunten te verdelen voor schaalbaarheid en optimalisatie van prestaties.
Gegevens comprimeren: Azure-services ondersteunen technieken voor gegevenscompressie, zoals GZIP en DEFLATE.
Architectuur optimaliseren: Azure biedt architectuurrichtlijnen en ontwerppatronen voor het ontwerpen van schaalbare, tolerante en performante toepassingen. Zie Ontwerppatronen voor meer informatie.
Verwante koppelingen
- Azure Monitor
- Application Insights
- Log Analytics
- Application Insights Profiler
- Groepsgewijze verbinding
- Azure Database for PostgreSQL - Flexible Server-verbindingspooling
- Indexafstemming in Azure SQL Database
- Indexeringsbeleid voor Azure Cosmos DB
- Partitionering van Azure Cosmos DB
- Partitionering van Azure SQL Database
Controlelijst voor kostenoptimalisatie
Raadpleeg de volledige set aanbevelingen.