HTTP Keepalive Connections og Web Performance.

HTTP Keepalive Connections og Web Performance.

Har du noen gang benchmarked en server i laboratoriet og deretter distribuert den for ekte trafikk, bare for a finne ut at det ikke kan oppna noe n r benchmarkytelsen? CPU-utnyttelsen er lav, og det er mange gratis ressurser, men klienter klager over sakte responstider, og du kan ikke finne ut hvordan du far bedre utnyttelse fra serveren?

Det du ser er en effekt av «HTTP Heavy Lifting». I dette blogginnlegget undersoker vi hvordan HTTP fungerer, og hvordan vanlige HTTP-servere behandler HTTP-transaksjoner. Vi ser pa noen av de ytelsesproblemer som kan oppsta, og se hvordan NGINXs eventdrevne modell gjor det til en sv rt effektiv akselerasjonsproxy for disse HTTP-serverne. Med NGINX kan du forandre din virkelige prestasjon, sa den er tilbake til nivaet pa dine lokale referanser.

For a l re hvordan NGINX kan forbedre hastigheten og skalerbarheten av programmene dine, les vart blogginnlegg Tuning NGINX for Performance for en sammenbrudd av konfigurasjoner.

En introduksjon til HTTP og Keepalive Connections.

HTTP Keepalive-tilkoblinger er en nodvendig ytelsesfunksjon som reduserer latency og tillater at nettsider lastes raskere.

HTTP er en enkel, tekstbasert protokoll. Hvis du ikke har gjort det for, ta en titt pa utdataene fra et HTTP-feilsokingsverktoy, som det i nettleseren din, og sjekk ut standardforesporselen og svarstrukturen:

I sin enkleste implementering oppretter en HTTP-klient en ny TCP-tilkobling til destinationsserveren, skriver foresporselen og mottar svaret. Serveren lukker deretter TCP-tilkoblingen for a frigjore ressurser.

Denne operasjonsmodusen kan v re sv rt ineffektiv, spesielt for komplekse nettsider med et stort antall elementer eller nar nettverkskoblingene er treg. A opprette en ny TCP-tilkobling krever et «trehands handtrykk», og a rive det ned involverer ogsa en to-veis-avstengingsprosedyre. Gjentatte skaper og lukker TCP-tilkoblinger, en for hver melding, er besluttet a henge opp og ringe pa nytt en samtale mellom hver bytte i en samtale.

HTTP bruker en mekanisme som kalles keepalive-tilkoblinger for a holde TCP-forbindelsen mellom klienten og serveren apen etter at en HTTP-transaksjon har fullfort. Hvis klienten trenger a utfore en annen HTTP-transaksjon, kan den bruke tilkoblet tilkobling i stedet for a opprette en ny TCP-tilkobling.

Klienter apner vanligvis en rekke samtidige TCP-tilkoblinger til en server og utforer keepalive-transaksjoner pa tvers av dem alle. Disse forbindelsene holdes apne til enten klienten eller serveren bestemmer at de ikke lenger er nodvendig, vanligvis som folge av en tomgangstidsavbrudd.

Moderne nettlesere apner vanligvis 6 til 8 keepalive-tilkoblinger og holder dem apne i flere minutter for de slas ut. Web-servere kan konfigureres for a fjerne disse forbindelsene og lukke dem tidligere.

Hva er effekten av Keepalives pa HTTP-serveren?

Hvis mange klienter bruker HTTP-lagringsmedier, og webserveren har en begrensning for begrensning eller skalerbarhet, blir ytelsen plummet nar grensen er nadd.

Tiln rmingen ovenfor er utformet for a gi best mulig ytelse for en enkelt kunde. Dessverre, hvis alle klienter opererer pa denne maten, kan det i en �tragedie av commons� -scenario, ha en skadelig effekt pa ytelsen til mange vanlige webservere og webapplikasjoner.

Arsaken er at mange servere har en fast samtidighet grense. For eksempel, i vanlige konfigurasjoner, kan Apache HTTP Server kun behandle 150 (med multifunksjonsmodulen [MPM]) eller 256 (med prefork MPM) samtidige TCP-tilkoblinger. Hver idle HTTP-holdbar forbindelse forbruker en av disse samtidige sporene, og nar alle sporene er opptatt, kan serveren ikke godta flere HTTP-tilkoblinger.

Konvensjonell visdom sier a sla av keepalives pa webserveren, eller begrense dem til en veldig kort timeout. De gir en veldig enkel vektor for Keep-Dead og Slowloris denial-of-service-angrepene (for en rask losning, se Beskytte mot Keep-Dead Denial of Service pa serverfault.com).

Videre allokerer disse web- og applikasjonsservere vanligvis et operativsystemtrad eller -prosess for hver forbindelse. En TCP-tilkobling er et veldig lett operativsystemobjekt, men en trad eller prosess er veldig tungvektig. Trad og prosesser krever minne, de ma styres aktivt av operativsystemet, og «kontekstveksling» mellom trader eller prosesser bruker CPU. Tilordne hver forbindelse sin egen trad eller prosess er enormt ineffektiv.

Det store antallet samtidige klientforbindelser og tildeling av en trad eller prosess til hver forbindelse gir fenomenet kjent som «HTTP Heavy Lifting» – en uforholdsmessig stor innsats er nodvendig for a behandle en lett HTTP-transaksjon.

Hva betyr dette i praksis?

Det tar ikke mange kunder a utvide konsistensgrensen i mange moderne web- og applikasjonsservere.

Hvis en klient apner 8 TCP-tilkoblinger, og holder dem i live i 15 sekunder etter at de trengs, bruker klienten 8 samtidige spor i 15 sekunder. Hvis klienter kommer til ditt nettsted med en hastighet pa 1 per sekund, blir 120 samtidige slots kontinuerlig opptatt av idle keepalive-tilkoblinger. Hvis frekvensen er 2 klienter per sekund, er 240 samtidige slots okkupert. Nar sporene er oppbrukt, kan klienter ikke lenger koble til de nav rende tilkoblingstidene er ute.

Dette kan resultere i sv rt ujevn serviceniva. Kunder som har lykkes med a skaffe seg en keepalive-forbindelse, kan soke etter din tjeneste etter onske. Klienter som er last ut ma vente i ko.

Hvorfor ser du ikke disse effektene under Benchmark Testing?

Disse problemene manifesterer seg bare i langsomme nettverk med mange kunder. De vises ikke nar man sammenligner med en enkelt klient over et raskt lokalt nettverk.

Det er et par grunner til hvorfor du kanskje ikke ser disse effektene i et referanseindeks.

Hvis referanseportefoljen din ikke bruker keepalives, oppretter referanseklienten en ny TCP-tilkobling for hver transaksjon. Fordi du mest sannsynlig kjorer referansen over et raskt, lokalt nettverk, ser du ikke ytelsesproblemer opprettet ved ikke a bruke keepalives, og referansen lykkes. Hvis referanseportefoljen bruker vedlikeholdsordninger, sa sannsynligvis kan du kjore f rre samtidige tilkoblinger enn serverens grense, og referanseklienten metter hver forbindelse (bruker den gjentatte ganger) og driver serveren til sin maksimale kapasitet. Dette ligner imidlertid ikke den virkelige verdensprofilen for tilkoblingsbruk.

V r oppmerksom pa at de fleste referanseverktoy bare rapporterer om vellykkede transaksjoner. Tilkoblinger som er stoppet pa grunn av ressursutmattelse, kan ikke rapporteres, eller kan bare virke som en liten del av de vellykkede tilkoblingene. Dette skjuler den sanne naturen til problemet med ekte verdenstrafikk.

Hvor vanlig er problemet?

En hvilken som helst trad & # 8209; eller prosessbasert web- eller applikasjonsserver er sarbar for samtidighetsbegrensninger.

Dette problemet er iboende av en hvilken som helst web- eller applikasjonsplattform som tilordner en trad eller prosess til hver forbindelse. Det er ikke lett a oppdage i et optimalisert referansemiljo, men det manifesterer seg som darlig ytelse og darlig CPU-utnyttelse i et ekte verdensmiljo.

Det er flere tiltak du kan ta for a lose dette problemet:

Ok antall trader eller prosesser & ndash; Dette er en veldig kort «term» -maling. Trader og prosesser er tungt operativsystem objekter og padrar seg en raskt okende administrasjon overhead som flere og flere er oppstatt. Deaktiver eller begrense bruken av HTTP-holdninger & ndash; Dette senker konsistensgrensen, men resulterer i mye darligere ytelse for hver klient. Bruk spesialisert Keepalive behandling & ndash; Apache HTTP Server (webserver) har en relativt ny hendelse MPM som flytter tilkoblinger mellom arbeidstrad og en dedikert hendelse trad nar de beveger seg mellom & # 8216; aktiv & # 8217; og & # 8216; idle Keepalive & # 8217; stater. Dette kan v re et alternativ hvis de andre modulene du bruker stotter denne MPM; Legg merke til at SSL / TLS-tilkoblinger fortsatt behandles helt i dedikerte trader. Bruk en mer effektiv prosessormodell & ndash; Langt det enkleste og mest effektive tiltaket du kan ta, er a sette en effektiv HTTP-proxy foran web- eller applikasjonsservere. En hendelse-drevet proxy som NGINX har ikke de samme begrensningene som beskrevet ovenfor. Det ler i ansiktet av langsomme tilkoblinger og idle keepalives. Videre omdanner det effektivt langsomme klienttilkoblinger med flere ledige tilkoblinger til de raske, lokale og sv rt effektive referansestilkoblingene som trekker ut best mulig ytelse fra web- og applikasjonsservere.

Bruk NGINX som en akselererende HTTP-proxy.

NGINX bruker en annen arkitektur som ikke lider av de samtidige problemene som er beskrevet ovenfor. Den forvandler treg klientforbindelser til optimaliserte referanser som tilkoblinger for a trekke ut den beste ytelsen fra serverne dine.

NGINX bruker en sv rt effektiv hendelse-drevet modell for a administrere tilkoblinger.

Hver NGINX-prosess kan handtere flere tilkoblinger pa samme tid. Nar en ny tilkobling er akseptert, er overheaden sv rt lav (en ny filbeskrivelse og en ny hendelse for avstemning), i motsetning til prosessen eller per tradmodell som er beskrevet ovenfor. NGINX har en veldig effektiv hendelseslokke:

Dette gjor at hver NGINX-prosess enkelt kan skaleres til tiere eller tusenvis (eller hundretusener) av tilkoblinger samtidig.

NGINX proxyer disse foresporsler til oppstroms serveren. Nar det gjor det, bruker NGINX et lokalt basseng av keepalive-tilkoblinger. Det er ingen TCP apen eller n rliggende, og TCP-stablene tilpasser seg raskt til den optimale vindustorrelsen og prov pa nytt. Skrive foresporsler og lese svar er mye raskere over det lokale, optimaliserte nettverket:

Nettoeffekten er at oppstromsserveren finner seg i stand til a snakke med en enkelt lokal klient over et raskt nettverk; en klient som optimal utnyttelse av HTTP-holdbarkoblinger for a minimere tilkoblingsoppsett uten a holde tilkoblinger apne unodvendig. Dette setter serveren tilbake i sitt optimale, benchmark-lignende miljo.

Med NGINX som en HTTP-proxy ser du:

Bedre utnyttelse av eksisterende ressurser. Din web- og applikasjonsservere kan behandle flere transaksjoner per sekund fordi de ikke lenger utforer tungt loft pa HTTP. Reduserte feilrater. HTTP-tidsavbrudd er mye mindre sannsynlig fordi NGINX fungerer som en sentral planlegger for alle klienter. Bedre slutt & # 8209; brukerens ytelse. Servere kjorer mer effektivt og serviceforbindelser raskere.

Andre mater NGINX kan akselerere tjenester.

A fjerne byrden av HTTP er tung lofting bare en av de ytelsesfremmende tiltakene som NGINX kan ta med pa din overbelaste applikasjonsinfrastruktur.

NGINXs HTTP & # 8209; caching-funksjon kan cache respons fra oppstroms servere, etter standard cache semantikk for a kontrollere hva som er cached og i hvor lang tid. Hvis flere klienter ber om samme ressurs, kan NGINX svare fra cachen og ikke belastes oppstroms servere med dupliserte foresporsler.

NGINX kan ogsa laste av andre operasjoner fra oppstromsserveren. Du kan laste ut komprimering for a redusere bandbredden, sentralisere SSL-dekryptering, utfore initial autentisering, og bruke alle typer regler for a vurdere grensen trafikk nar det er nodvendig.

Ikke din typiske belastningsbalanse eller ADC.

Til slutt, ikke glem at det i motsetning til andre akselererende proxyer, laster balancere eller applikasjonsleverandorer (ADCer), er NGINX ogsa en full webserver. Du kan bruke NGINX til a betjene statisk innhold, utfore PHP, Java, Ruby, Python og andre applikasjoner, levere media (lyd og video), integrere med autentiserings- og sikkerhetssystemer, og til og med svare pa transaksjoner direkte ved hjelp av regler som er innebygd i NGINX-konfigurasjonen.

NGINX og NGINX Plus har ingen ytelse i ytelsesbegrensninger, og dra full nytte av maskinvaren du distribuerer den pa, na og i fremtiden.

For a prove NGINX Plus, start din gratis 30-dagers proveversjon i dag eller kontakt oss for en demo.

Om NGINX.

Kategorier.

Prov NGINX PLUS!

Last ned en 30 dagers gratis proveversjon og se hva du har gatt glipp av.

Har du et sporsmal til NGINX-teamet?

Har du et sporsmal til NGINX-teamet?

Var side bruker informasjonskapsler for a gi best mulig surfingopplevelse. Ved a fortsette a bruke nettstedet, godtar du bruken av vare cookies. Finn ut mer her.

Var side bruker informasjonskapsler for a gi best mulig surfingopplevelse. Ved a fortsette a bruke nettstedet, godtar du bruken av vare cookies. Finn ut mer her.


Hallo! Vil du spille i det mest heldige kasinoet? Vi forbereder det for deg. Klikk her nå!