Prestatietests en antipatronen voor cloudtoepassingen

Antipatroon voor prestaties, vergelijkbaar met ontwerppatronen, zijn veelvoorkomende defecte processen en implementaties binnen organisaties. Dit zijn veelvoorkomende procedures die waarschijnlijk schaalbaarheidsproblemen veroorzaken wanneer een toepassing onder druk staat. Bewustzijn van deze procedures kan helpen bij het vereenvoudigen van de communicatie van concepten op hoog niveau tussen softwarebeoefenaars en kennis van antipatroonnen kan nuttig zijn bij het controleren van code of het diagnosticeren van prestatieproblemen.

Dit is een veelvoorkomend scenario: een toepassing gedraagt zich goed tijdens het testen van de prestaties. De toepassing wordt vrijgegeven voor productie en krijgt te maken met echte workloads. Op dat moment begint het slecht te presteren: het weigeren van gebruikersaanvragen, vastlopen of het genereren van uitzonderingen. Het ontwikkelteam ziet zich dan geconfronteerd met twee vragen:

  • Waarom is dit gedrag niet aan het licht gekomen tijdens het testen?
  • Hoe lossen we dit op?

Het antwoord op de eerste vraag is niet zo moeilijk. Het is lastig om in een testomgeving echte gebruikers te simuleren, inclusief hun gedragspatronen en de hoeveelheden werk die ze verzetten. De enige gegarandeerde manier om te begrijpen hoe een systeem omgaat met belasting, is door het systeem in productie te monitoren. Dit wil niet zeggen dat u prestatietests achterwege kunt laten. Prestatietests zijn van cruciaal belang voor het ophalen van metrische basislijnprestaties. Maar u moet er op voorbereid zijn om prestatieproblemen vast te stellen en te corrigeren wanneer deze zich in het live systeem voordoen.

Het antwoord op de tweede vraag, hoe het probleem is op te lossen, is minder eenvoudig. Hier kunnen verschillende factoren een rol spelen en soms doet het probleem zich alleen voor onder bepaalde omstandigheden. Instrumentatie en logboekregistratie zijn onmisbaar om de hoofdoorzaak te vinden, maar het is ook handig om te weten waar u op moet letten.

Op basis van onze ervaring met Microsoft Azure-klanten hebben we een aantal veelvoorkomende prestatieproblemen verzameld waarmee klanten te maken krijgen in de productieomgeving. Voor elk antipatroon geven we aan waarom het antipatroon meestal optreedt, wat de symptomen van het antipatroon zijn en welke technieken er beschikbaar zijn voor het oplossen van het probleem. We bieden ook voorbeeldcode die zowel het antipatroon als een voorgestelde schaalbaarheidsoplossing illustreert.

Sommige van deze antipatronen lijken misschien duidelijk wanneer u de beschrijvingen leest, maar ze treden vaker op dan u denkt. Soms wordt voor een toepassing een ontwerp gebruikt dat on-premises prima werkt, maar dat niet geschikt is om op schaal in de cloud te worden gebruikt. Een andere reden kan zijn dat een toepassing in eerste instantie een zeer overzichtelijk ontwerp heeft, maar dat er door het toevoegen van nieuwe functies een of meer van deze antipatronen ongewild hun opwachting maken. Ongeacht de reden van het probleem, leest u in deze reeks artikelen hoe u deze antipatronen kunt herkennen en corrigeren.

Catalogus met antipatronen

Hier volgt de lijst met de antipatronen die we hebben geïdentificeerd:

Antipatroon Beschrijving
Database bezet Offloading van te veel verwerkingstaken naar een gegevensarchief.
Front-end bezet Verplaatsen van resource-intensieve taken naar achtergrond-threads.
Intensieve I/O Voortdurend verzenden van groot aantal klein netwerkaanvragen.
Ophalen van overbodige gegevens Meer gegevens ophalen dan nodig is, wat leidt tot onnodige I/O.
Onjuiste instantiëring Herhaaldelijk maken en vernietigen van objecten die zijn ontworpen om te worden gedeeld en hergebruikt.
Monolithische persistentie Hetzelfde gegevensarchief gebruiken voor gegevens met zeer verschillende gebruikspatronen.
Geen caching Gegevens niet opslaan in een cache.
Luidruchtige buurman Eén tenant maakt gebruik van een onevenredige hoeveelheid resources.
Storm opnieuw proberen Het opnieuw proberen van mislukte aanvragen naar een server is te vaak.
Synchrone I/O Aanroepende thread blokkeren terwijl I/O wordt voltooid.

Volgende stappen

Raadpleeg Prestaties van een gedistribueerde toepassing afstemmen voor meer informatie over prestaties afstemmen