Prestaties van een gedistribueerde toepassing afstemmen

In deze reeks bespreken we verschillende scenario's voor cloudtoepassingen, waarin wordt getoond hoe een ontwikkelingsteam belastingstests en metrische gegevens heeft gebruikt om prestatieproblemen vast te stellen. Deze artikelen zijn gebaseerd op werkelijke belastingstests die zijn uitgevoerd bij het ontwikkelen van voorbeeldtoepassingen. De code voor de scenario's is beschikbaar op GitHub.

Scenario's:

Wat zijn prestaties?

Prestaties worden vaak gemeten in termen van doorvoer, reactietijd en beschikbaarheid. Prestatiedoelen moeten worden gebaseerd op bedrijfsactiviteiten. Voor klantgerichte taken kunnen strengere eisen gelden dan operationele taken, zoals het genereren van rapporten.

Definieer een serviceniveaudoelstelling (SLO) die de prestatiedoelen voor elke workload definieert. U bereikt dit doel doorgaans door een prestatiedoel op te breken in een set KPI's (Key Performance Indicators), zoals:

  • Latentie of reactietijd van specifieke aanvragen
  • Het aantal uitgevoerde aanvragen per seconde
  • De snelheid waarmee het systeem uitzonderingen genereert.

Prestatiedoelen moeten expliciet een doelbelasting bevatten. Bovendien ontvangen niet alle gebruikers precies hetzelfde prestatieniveau, zelfs wanneer ze tegelijkertijd toegang hebben tot het systeem en hetzelfde werk uitvoeren. Daarom moet een SLO in termen van percentielen worden opgesteld.

Een voorbeeld van een SLO voor is: 'Clientaanvragen hebben een antwoord binnen 500 ms @ P90, bij het laden van maximaal 25 K aanvragen/seconde'.

Problemen met het afstemmen van de prestaties van een gedistribueerd systeem

Het kan bijzonder lastig zijn om prestatieproblemen vast te stellen in een gedistribueerde toepassing. Voorbeelden van problemen zijn:

  • Bij één zakelijke transactie of bewerking zijn doorgaans meerdere onderdelen van het systeem betrokken. Het kan lastig zijn om een holistische end-to-end-weergave van één bewerking te krijgen.

  • Resourceverbruik wordt gedistribueerd over meerdere knooppunten. Voor een consistente weergave moet u logboeken en metrische gegevens op één plek verzamelen.

  • De cloud biedt een elastische schaal. Automatisch schalen is een belangrijke techniek voor het verwerken van pieken in de belasting, maar kan ook onderliggende problemen maskeren. Het kan ook lastig zijn om te weten welke onderdelen moeten worden geschaald en wanneer.

  • Workloads schalen vaak niet over kernen of threads. Het is belangrijk om inzicht te krijgen in de vereisten van uw workloads en te kijken naar beter geoptimaliseerde grootten. Sommige grootten bieden beperkte kernen en uitgeschakelde hyperthreading om één kerngeoriënteerde en per kern gelicentieerde workloads te verbeteren.

  • Door opstapeling van fouten kunnen fouten upstream van het hoofdprobleem optreden. Als gevolg hiervan kan het eerste signaal van het probleem in een ander onderdeel voorkomen dan de hoofdoorzaak.

Algemene aanbevolen procedures

Het afstemmen van prestaties is zowel een techniek als een wetenschap, maar het kan wetenschappelijker worden gemaakt door een systematische benadering te volgen. Hier volgen enkele best practices:

  • Schakel telemetrie in voor het verzamelen van metrische gegevens. Instrumenteer uw code. Volg de best practices voor bewaking. Gebruik gecorreleerde tracering, zodat u alle stappen in een transactie kunt bekijken.

  • Houd de 90-/95-/99-percentielen in de gaten, niet alleen het gemiddelde. Het gemiddelde kan uitbijters maskeren. De steekproeffrequentie voor metrische gegevens is ook van belang. Als de steekproeffrequentie te laag is, kan dit pieken of uitbijters maskeren die op problemen kunnen wijzen.

  • Pak één knelpunt per keer aan. Stel een hypothese op en test deze door één variabele tegelijk te wijzigen. Als u één knelpunt verwijdert, leidt dit vaak tot een ander knelpunt upstream of downstream.

  • Fouten en nieuwe pogingen kunnen een grote invloed hebben op de prestaties. Als u ziet dat back-endservices uw systeem beperken, schaalt u uit of probeert u het gebruik te optimaliseren (bijvoorbeeld door databasequery's af te stemmen).

  • Zoek naar algemene antipatronen in prestaties.

  • Zoek naar mogelijkheden om te parallelliseren. Twee veelvoorkomende bronnen van knelpunten zijn berichtwachtrijen en databases. In beide gevallen kan sharding nuttig zijn. Zie Horizontale, verticale en functionele partitionering van gegevensvoor meer informatie. Zoek naar dynamische partities die kunnen wijzen op onevenwichtige lees- of schrijfbelastingen.

Volgende stappen

De scenario's voor het afstemmen van prestaties lezen