Marc Brooker, inxhinier nga Amazon Web Services (AWS), ka shpjeguar keqkuptimet në lidhje me përmirësimin e efikasitetit të transmetimit të mesazheve të vogla duke përdorur algoritmin e Nagle, i cili aplikohet si parazgjedhje në stakun TCP/IP. Rekomandimet përfshijnë çaktivizimin e algoritmit të Nagle si parazgjedhje, çka mund të bëhet përmes vendosjes së opsionit TCP_NODELAY për soketët rrjetorë me thirrjen e setsockopt, e cila është përdorur prej kohësh në projekte si Node.js dhe curl.
Algoritmi i Nagle mundëson agregimin e mesazheve të vogla për të zvogëluar trafikun - ai pezullon dërgimin e segmenteve të reja TCP deri në marrjen e konfirmimit për pranim të të dhënave të dërguara më parë. Për shembull, pa përdorimin e agregimit, kur dërgoni 1 byte, dërgohen gjithashtu 40 byte të dhëna nga titujt TCP dhe IP të paketës. Në kushtet moderne, përdorimi i algoritmit të Nagle çon në rritje të dukshme të vonesave, të papranueshme për aplikacione interaktive dhe të shpërndara.
Tre arsye kryesore për të përdorur si opsion parazgjedhje TCP_NODELAY, që çaktivizon algoritmin e Nagle, paraqiten si vijon:
- Inkompatibiliteti i algoritmit të Nagle me optimizimin e 'delayed ACK', ku përgjigja ACK dërgohet jo menjëherë, por pas marrjes së të dhënave përgjigjëse. Problemi është se në algoritmin e Nagle, pranimi i paketës ACK është një sinjal për dërgimin e të dhënave të agreguara, dhe nëse nuk ka paketa ACK, dërgimi ndodh përmes skadimit të kohës. Kështu, krijohet një cikël vicioz dhe paketa ACK si sinjal nuk funksionon, pasi pala tjetër nuk merr të dhënat për shkak të grumbullimit në anën e dërguesit, dhe dërguesi nuk i dërgon ato deri në skadimin e kohës, pasi nuk merr paketën ACK.
- RFC për algoritmin e Nagle është miratuar në 1984 dhe ai nuk është projektuar për parametrat e rrjeteve moderne me shpejtësi të lartë dhe serverësh në qendrat e të dhënave, çka sjell probleme me reagimin. Vonesa ndërmjet dërgimit të kërkesës dhe marrjes së përgjigjes (RTT) në rrjetet moderne është 0.5 ms + disa milisekonda gjatë shkëmbimit të të dhënave ndërmjet qendrave të të dhënave brenda një regione + deri në njëqind milisekonda gjatë dërgimit për nëpër botë. Gjatë këtyre milisekondave, një server modern është në gjendje të kryejë një sasi të madhe pune.
- Aplikacionet moderne të shpërndara nuk dërgojnë më bajta individualë të dhënash, dhe agregimi i të dhënave të vogla zakonisht realizohet në nivel aplikacioni. Edhe nëse madhësia e të dhënave të dobishme është disa bajta, në përgjithësi, madhësia aktuale e informacionit të dërguar rritet ndjeshëm pas aplikimit të serializimit, përdorimit të API-ve në JSON dhe dërgimit me përdorimin e enkriptimit TLS. Kursimi i 40 bajtëve nuk bëhet më kaq i rëndësishëm.
Burimi: opennet.ru
