Nabídka pro výchozí zapnutí režimu TCP_NODELAY

Marc Brooker, inženýr společnosti Amazon Web Services (AWS), vyvrátil mýty spojené se zvyšováním efektivity přenosu malých zpráv pomocí algoritmu Nagle, který je ve výchozím nastavení používán v TCP/IP zásobníku. Doporučení spočívá v tom, že algoritmus Nagle by měl být ve výchozím nastavení vypnut, což je možné v kontextu jednotlivých aplikací nastavením volby TCP_NODELAY pro síťové sokety pomocí volání setsockopt, což je již dlouho implementováno v takových projektech jako Node.js a curl.

Algoritmus Nagle umožňuje agregaci malých zpráv, aby se snížila datová zátěž - pozastavuje odesílání nových TCP segmentů do doby, než je přijato potvrzení o přijetí předchozích dat. Například bez použití agregace, při odesílání 1 bajtu, je navíc odesláno 40 bajtů s TCP a IP hlavičkami paketu. V moderních podmínkách používání algoritmu Nagle vede k výrazným prodlevám, které jsou nepřijatelné pro interaktivní a distribuované aplikace.

Uvádí se tři základní důvody pro výchozí použití volby TCP_NODELAY, která vypíná algoritmus Nagle:

  • Nekompatibilita algoritmu Nagle s optimalizací „delayed ACK“, kdy je ACK odpověď zaslána ne okamžitě, ale až po obdržení odpovídajících dat. Problém je v tom, že v algoritmu Nagle přijetí ACK paketu je signálem pro odeslání agregovaných dat, a pokud ACK paket nepřijde, odeslání se provede až po vypršení časového limitu. Tak vzniká začarovaný kruh a ACK paket jako signál nefunguje, protože druhá strana nedostává data kvůli jejich hromadění na straně odesílatele, zatímco odesílatel je neodesílá, dokud nenastane časový limit, neboť nedostává ACK paket.
  • RFC pro algoritmus Nagle byl přijat v roce 1984 a není určen pro parametry moderních vysokorychlostních sítí a servery datacenter, což vede k problémům s odezvou. Zpoždění mezi odesláním požadavku a přijetím odpovědi (RTT) v moderních sítích činí 0,5 ms + několik milisekund při výměně dat mezi datacentry v jednom regionu + až stovky milisekund při odesílání po celém světě. Během těchto milisekund je moderní server schopen provést ohromné množství práce.
  • Modern distributed applications no longer send single bytes of data; instead, the aggregation of small data is usually implemented at the application level. Even if the size of the useful data is just a few bytes, the actual size of the information sent tends to increase significantly after serialization, the use of JSON API wrappers, and transmission using TLS encryption. The saving of 40 bytes becomes less relevant.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster