Stresstesting av en webtjeneste: Grunnleggende

Jeg bygde en Drupal-installasjon på Amazon EC2, og nå vil jeg finne ut hvor skalerbar min nye Drupal-tjeneste er. For å gjøre dette, skal jeg kjøre mitt første sett med belastningstester (AKA stresstester), for å presse tjenesten min til det ytterste.

Hvordan oppfører det seg når det kommer flere forespørsler på nettstedet mitt? Klarer den den økte belastningen uten å påvirke ytelsen? Forblir det pålitelig?

Akkurat nå vet jeg ikke. Jeg kan ikke tilby en fullstendig operativ skytjeneste uten å vite hvordan den skalerer, så jeg må starte noen tester.

Jeg bruker noen få gratis verktøy for å torturere hjemmesiden til den nye kundeservicen min, i stedet for å bruke en kommersiell tjeneste som Loadstorm. Jeg legger tjenesten min under stadig større belastning for å se hva som skjer og måle resultatene.

Senere vil jeg måtte løse problemene jeg finner.

Denne tjenesten er født til å miste

En liten Amazon EC2-maskin er svak. En liten fysisk maskin takler kanskje en rimelig arbeidsmengde på nettet, men en liten EC2-maskin vil ikke. Disse testene illustrerer hvorfor du må kunne skalere opp (bruk en større maskin) og skalere ut (bruke mange maskiner).

Jeg vet at tjenesten min vil fungere dårlig. Den er så dårlig at den ikke engang har råd til å ta hensyn. Slik sikrer jeg forferdelig service.

  • Jeg bruker en liten EC2 maskintype. Apache VM-er kommer i forskjellige størrelser, fra mikro til massiv. En liten VM har få ressurser, noe som gjør at den passer perfekt for en webtjeneste.
  • Jeg bruker bare en EC2-maskin. Jeg har to identiske VM-er for å dele arbeidet, men jeg kjører testene bare på en maskin.
  • MySQL er ikke innstilt på Drupal. Jeg har ikke gjort noen endringer i bufferstørrelse, ikke jaktet på sakte spørsmål og ikke kjørt noen motorsjekker.
  • Jeg bruker ikke hurtigbuffer. Bufring ved hjelp av et program som memcached eller lakk er en populær måte å øke hastigheten på. Bare å slå på Drupal-hurtigbufferen, gir raskere respons mange ganger.

Figur A

Min last testing toolkit

Jeg kunne bruke en tredjepartstjeneste for å kjøre mer omfattende tester med nettgrensesnitt, for eksempel Jmeter-skyen og SOASTA CloudTest, men jeg trenger egentlig ikke noe så smart for nå.

Jeg genererer og overvåker den ekstra belastningen ved hjelp av noen få applikasjoner. Dette er alle kommandolinjeverktøy, så de er ikke veldig intuitive.

  • topp (topp prosessstatistikk). Dette er en prosessmonitor som viser meg hva som skjer med systemet.
  • vmstat (virtuelt minnestatistikk). Dette er som toppen, men viser informasjon på en annen måte.
  • ab (Apache HTTP-server referanseverktøy). Dette er et nettsted lastegenerator. Jeg bruker ab for å gi tjenesten min en stadig vanskeligere tid.

topp (topp prosessstatistikk)

Toppkommandoen er en av de ti mest nyttige Linux-kommandoene. Toppen viser informasjon om prosesser og hva de gjør med systemet.

Jeg vil få en grunnlinje ved å bruke topp mens systemet er inaktivt, før jeg kjører lastetestene.

 : ~ # toppen 
 topp - 17:12:40 opp 15 dager, 3:33, 2 brukere, belastningsgjennomsnitt: 0, 46, 0, 69, 0, 34 
 Oppgaver: 71 totalt, 1 løping, 70 sovende, 0 stoppet, 0 zombie 
 CPU (er): 0, 0% oss, 0, 0% sy, 0, 0% ni, 100, 0% id, 0, 0% wa, 0, 0% hei, 0, 0% si, 0, 0% st 
 Mem: 1737564k totalt, 1117352k brukt, 620212k gratis, 168248k buffere 
 Bytt: 3020212k totalt, 0k brukt, 3020212k gratis, 518672k hurtigbufret 
 PID BRUKER PR NI VIRT RES SHR S% CPU% MEM TID + COMMAND 
 1 rot 20 0 8356 800 672 S 0, 0 0, 0 0: 12, 68 init 
 2 rot 20 0 0 0 0 S 0, 0 0, 0 0: 00, 00 kthreadd 
 3 rot RT 0 0 0 0 S 0, 0 0, 0 0: 00, 00 migrasjon / 0 
 4 rot 20 0 0 0 0 S 0, 0 0, 0 0: 01.08 ksoftirqd / 0 

...

Det er vanskelig å forstå tallene. Den øverste kommandoen fyller opp kommandolinjegrensesnittet mitt med mye data pakket i to halvdeler.

  • Den øverste halvdelen - omtrent seks rader - er en tett visning av informasjon om tilstanden til systemet, for eksempel hvor opptatt det har vært, minne brukt og oppetid.
  • Den nederste halvdelen er en liste over toppprosessene. De blir bestilt av hvor mye CPU de bruker, med den største CPU-hoggen først.

Fremgangsmåten for bruk av topp er ganske grei.

    1. Åpne en CLI.
    2. Kjør toppkommandoen. Et skjermbilde som det over vises.
    3. Se tallene. Noen få sekunder endres noen av tallene.
    4. Når du har fått nok, skriver du inn bokstaven q for å avslutte. Kommandoprompten vises.
    5. Lukk CLI.

      Det er mye informasjon her: det er komprimert for å pakke mye inn i en liten plass. Jo mer du bruker, jo flere tall kan du forstå. Det er litt som å stirre på et stereogram til et 3D-bilde vises.

      Mine første målinger

      Selv før jeg kjører min første belastningstest, kan jeg gjøre noen nyttige observasjoner om EC2-maskinen min.

      I eksemplet over ser jeg et tomgangssystem. CPU-en er 100% på tomgang og ingen bytteplass brukes. Det er ganske åpenbart for en systemadministrator at denne EC2-maskinen ikke gjør noe.

      Lastens gjennomsnitt er 0, 46. Belastningsgjennomsnittet er et estimat på hvor mye boksen gjør sammenlignet med hva den kan takle - 1 er omtrent 1 CPU som jobber flatt, men holder tritt med arbeidsmengden.

      Merkelig nok er denne tomgangsboksen til å legge inn omtrent halve serverens innsats verdt. Burde ikke en boks som ikke gjør noe ha et gjennomsnittsbelastning på null? Det som skjer er at hypervisoren stjeler min VM-kapasitet og gir den til andre travlere (og kanskje høyere betalte) kunder. Det er den samme teorien som et flyselskap bruker når det over selger seter i et fly, og er avhengig av at noen passasjerer ikke vil dukke opp.

      © Copyright 2020 | mobilegn.com