Marc Brooker, insener Amazon Web Services (AWS)ist, selgitas mĂŒĂŒte, mis seonduvad vĂ€ikeste sĂ”numite edastamise efektiivsuse suurendamisega, kui kasutatakse TCP/IP virna vaikealgotit Nagleâi. Soovitused koosnevad Nagleâi algoritmi vaikimisi vĂ€ljalĂŒlitamisest, mida saab teatud rakenduste kontekstis teha, seadistades TCP_NODELAY vĂ”rgu sokettide jaoks, kasutades setsockopt kutset, mida on juba ammu rakendatud sellistes projektides nagu Node.js ja curl.
Nagleâi algoritm vĂ”imaldab vĂ€ikeste sĂ”numite kogumist liikluse vĂ€hendamiseks â see peatab uute TCP segmentide saatmise, kuni edastatud andmete vastuvĂ”tmise kinnitus on saadud. NĂ€iteks, ilma kogumiseta 1 baidi saatmine hĂ”lmab 40 baidi edastamist TCP ja IP paketi pĂ€istega. Kaasaegsetes tingimustes Nagleâi algoritmi kasutamine toob kaasa mĂ€rkimisvÀÀrse viivituse, mis on vastuvĂ”etamatu interaktiivsetele ja jagatud rakendustele.
Toodud on kolm peamist pĂ”hjendust TCP_NODELAY suvandi vaikimisi kasutamiseks, mis keelab Nagleâi algoritmi:
- Neigle'i algoritmi ĂŒhilduvus probleem 'delayed ACK' optimeerimisega, kus ACK-vastus saadetakse mitte kohe, vaid pĂ€rast vastusandmete saamist. Probleem on selles, et Neigle'i algoritmi puhul on ACK-paketi saabumine signaaliks andmete edastamiseks, ja kui ACK-paketti ei ole saadud, toimub edastamine ajaĂŒlesande tĂ”ttu. Seega tekib suletud ring ning ACK-pakett kui signaal ei toimi, kuna vastaspool ei saa andmeid, mis on saatja poolel kuhjunud, ja saatja ei saada neid enne ajaĂŒlesande tĂ€itumist, kuna ei saa ACK-paketti.
- Neigle'i algoritmi RFC kiideti heaks 1984. aastal ja see ei ole kavandatud tĂ€napĂ€evaste kĂ”rgkiiruslike vĂ”rgu parameetrite jaoks ning serverite andmekeskustes, mis toob kaasa reageerimisprobleemide tekkimise. Taotlemise ja vastamise vahel (RTT) viibimine tĂ€napĂ€evastes vĂ”rkudes on 0,5 ms + mitu millisekundit andmevahetuse korral andmekeskuste vahel ĂŒhes regioonis + kuni sada millisekundit ĂŒlemaailmselt saatmisel. Nende millisekundite jooksul on kaasaegne server vĂ”imeline sooritama tohutult palju tööd.
- Kaasaegsed jaotatud rakendused ei edasta enam ĂŒksikuid andmebaite, vaid vĂ€ikeste andmete kogumine toimub reeglina rakenduse tasandil. Isegi kui kasulik andme suurus on vaid paar bait, suureneb tegelik edastatav teave tavaliselt oluliselt pĂ€rast serialiseerimise, JSON API-sidemete ja TLS-krĂŒpteerimise kasutamist. 40 baidi kokkuhoid pole enam nii oluline.
Allikas: opennet.ru
