{"id":33707,"date":"2019-10-31T21:54:17","date_gmt":"2019-10-31T18:54:17","guid":{"rendered":"https:\/\/prohoster.info\/blog\/inogda-bolshe-eto-menshe-kogda-umenshenie-nagruzki-privodit-k-uvelicheniyu-zaderzhki\/"},"modified":"2019-10-31T21:54:17","modified_gmt":"2019-10-31T18:54:17","slug":"inogda-bolshe-eto-menshe-kogda-umenshenie-nagruzki-privodit-k-uvelicheniyu-zaderzhki","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/inogda-bolshe-eto-menshe-kogda-umenshenie-nagruzki-privodit-k-uvelicheniyu-zaderzhki","title":{"rendered":"Czasami wi\u0119cej to mniej. Gdy zmniejszenie obci\u0105\u017cenia prowadzi do zwi\u0119kszenia op\u00f3\u017anienia","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Jak w <noindex><a rel=\"nofollow\" href=\"https:\/\/mahdytech.com\/2019\/01\/13\/curious-case-999-latency-hike\/\">wi\u0119kszo\u015bci post\u00f3w<\/a><\/noindex>, pojawi\u0142 si\u0119 problem z rozproszon\u0105 us\u0142ug\u0105, nazwijmy t\u0119 us\u0142ug\u0119 Elwin. Tym razem nie odkry\u0142em problemu sam, poinformowali mnie o tym ch\u0142opaki z cz\u0119\u015bci klienckiej.<\/p>\n<p>Pewnego dnia obudzi\u0142em si\u0119 od niezadowolonego e-maila z powodu du\u017cych op\u00f3\u017anie\u0144 u Elwina, kt\u00f3rego planowali\u015bmy uruchomi\u0107 w najbli\u017cszym czasie. W szczeg\u00f3lno\u015bci klient napotka\u0142 op\u00f3\u017anienie 99. percentyla rz\u0119du 50 ms, znacznie wy\u017csze ni\u017c nasz bud\u017cet op\u00f3\u017anie\u0144. To by\u0142o zaskakuj\u0105ce, poniewa\u017c starannie testowa\u0142em us\u0142ug\u0119, szczeg\u00f3lnie pod k\u0105tem op\u00f3\u017anie\u0144, gdy\u017c to temat cz\u0119stych skarg.<\/p>\n<p>Zanim odda\u0142em Elwina do test\u00f3w, przeprowadzi\u0142em wiele eksperyment\u00f3w z 40 tys. zapyta\u0144 na sekund\u0119 (QPS), wszystkie wykaza\u0142y op\u00f3\u017anienie poni\u017cej 10 ms. By\u0142em got\u00f3w stwierdzi\u0107, \u017ce nie zgadzam si\u0119 z ich wynikami. Ale jeszcze raz spojrzawszy na e-mail, zwr\u00f3ci\u0142em uwag\u0119 na co\u015b nowego: dok\u0142adnie nie testowa\u0142em warunk\u00f3w, kt\u00f3re wspomnieli, ich QPS by\u0142 znacznie ni\u017cszy ni\u017c m\u00f3j. Testowa\u0142em przy 40k QPS, a oni tylko przy 1k. Przeprowadzi\u0142em jeszcze jeden eksperyment, tym razem z ni\u017cszym QPS, po prostu \u017ceby ich zadowoli\u0107.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nPoniewa\u017c pisz\u0119 o tym na blogu - prawdopodobnie ju\u017c zrozumia\u0142e\u015b: ich liczby okaza\u0142y si\u0119 prawid\u0142owe. Sprawdza\u0142em swojego wirtualnego klienta raz za razem, wci\u0105\u017c z tym samym wynikiem: niska liczba zapyta\u0144 nie tylko zwi\u0119ksza op\u00f3\u017anienie, ale te\u017c zwi\u0119ksza liczb\u0119 zapyta\u0144 z op\u00f3\u017anieniem powy\u017cej 10 ms. Innymi s\u0142owy, przy 40k QPS oko\u0142o 50 zapyta\u0144 na sekund\u0119 przekracza\u0142o 50 ms, natomiast przy 1k QPS ka\u017cd\u0105 sekund\u0119 by\u0142o 100 zapyta\u0144 powy\u017cej 50 ms. Paradoks!<\/p>\n<p><img decoding=\"async\" alt=\"Czasami wi\u0119cej to mniej. Gdy zmniejszenie obci\u0105\u017cenia prowadzi do zwi\u0119kszenia op\u00f3\u017anienia\" src=\"\/wp-content\/uploads\/2019\/05\/d181859376e2befad9ed631e8f8ff168.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h1>Zaw\u0119\u017camy kr\u0105g poszukiwa\u0144<\/h1>\n<p>\nStykaj\u0105c si\u0119 z problemem op\u00f3\u017anienia w rozproszonej systemie z wieloma komponentami, najpierw nale\u017cy sporz\u0105dzi\u0107 kr\u00f3tki wykaz podejrzanych. Zbadajmy nieco g\u0142\u0119biej architektur\u0119 Elwina:<\/p>\n<p><img decoding=\"async\" alt=\"Czasami wi\u0119cej to mniej. Gdy zmniejszenie obci\u0105\u017cenia prowadzi do zwi\u0119kszenia op\u00f3\u017anienia\" src=\"\/wp-content\/uploads\/2019\/05\/9b10198772b0e53890eb94d5e5c9afd0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDobr\u0105 punkt\u0105 wyj\u015bcia jest lista zrealizowanych przej\u015b\u0107 wej\u015bcia-wyj\u015bcia (wywo\u0142ania sieciowe\/wyszukiwanie na dysku itp.). Spr\u00f3bujmy dowiedzie\u0107 si\u0119, gdzie wyst\u0119puje op\u00f3\u017anienie. Opr\u00f3cz oczywistych wej\u015b\u0107-wyj\u015b\u0107 z klientem, Elwin wykonuje dodatkowy krok: odwo\u0142uje si\u0119 do magazynu danych. Jednak to magazyn dzia\u0142a w tym samym klastrze co Elwin, wi\u0119c op\u00f3\u017anienie tam powinno by\u0107 mniejsze ni\u017c z klientem. A wi\u0119c, lista podejrzanych:<\/p>\n<ol>\n<li>Wywo\u0142anie sieciowe od klienta do Elwina.\n<\/li>\n<li>Wywo\u0142anie sieciowe od Elwina do magazynu danych.\n<\/li>\n<li>Wyszukiwanie na dysku w magazynie danych.\n<\/li>\n<li>Wywo\u0142anie sieciowe z magazynu danych do Elwina.\n<\/li>\n<li>Wywo\u0142anie sieciowe od Elwina do klienta.<\/li>\n<\/ol>\n<p>\nSpr\u00f3bujmy wykre\u015bli\u0107 niekt\u00f3re punkty.<\/p>\n<h3>Magazyn danych nie ma w tym nic wsp\u00f3lnego.<\/h3>\n<p>\nNa pocz\u0105tku przekszta\u0142ci\u0142em Elwina w serwer ping-ping, kt\u00f3ry nie przetwarza \u017c\u0105da\u0144. Otrzymuj\u0105c \u017c\u0105danie, zwraca pust\u0105 odpowied\u017a. Je\u015bli op\u00f3\u017anienie maleje, to oznacza b\u0142\u0105d w implementacji Elwina lub magazynu danych \u2013 nic nadzwyczajnego. W pierwszym eksperymencie uzyskujemy taki wykres:<\/p>\n<p><img decoding=\"async\" alt=\"Czasami wi\u0119cej to mniej. Gdy zmniejszenie obci\u0105\u017cenia prowadzi do zwi\u0119kszenia op\u00f3\u017anienia\" src=\"\/wp-content\/uploads\/2019\/05\/bd8fed2b2cc0d07946d1c4a868ae36b3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJak wida\u0107, korzystaj\u0105c z serwera ping-ping, nie zaobserwowano \u017cadnych usprawnie\u0144. Oznacza to, \u017ce magazyn danych nie zwi\u0119ksza op\u00f3\u017anienia, a lista podejrzanych zostaje zredukowana o po\u0142ow\u0119:<\/p>\n<ol>\n<li>Wywo\u0142anie sieciowe od klienta do Elwina.\n<\/li>\n<li>Wywo\u0142anie sieciowe od Elwina do klienta.<\/li>\n<\/ol>\n<p>\nSuper! Lista szybko si\u0119 skraca. My\u015bla\u0142em, \u017ce prawie odkry\u0142em przyczyn\u0119.<\/p>\n<h3>gRPC<\/h3>\n<p>\nTeraz nadszed\u0142 czas, aby przedstawi\u0107 wam nowego gracza: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/grpc\/grpc\">gRPC<\/a><\/noindex>. To biblioteka z otwartym \u017ar\u00f3d\u0142em od Google do komunikacji wewn\u0105trz proces\u00f3w. <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Remote_procedure_call\">RPC<\/a><\/noindex>. Cho\u0107 <code>gRPC<\/code> jest dobrze zoptymalizowana i powszechnie u\u017cywana, to pierwszy raz stosuj\u0119 j\u0105 w systemie tej skali, a moja realizacja wydawa\u0142a mi si\u0119 nieoptymalna \u2013 delikatnie m\u00f3wi\u0105c.<\/p>\n<p>Obecno\u015b\u0107 <code>gRPC<\/code> w stosie spowodowa\u0142o nowe pytanie: mo\u017ce to moja realizacja lub sam <code>gRPC<\/code> wywo\u0142uje problem op\u00f3\u017anienia? Dodajemy do listy nowego podejrzanego:<\/p>\n<ol>\n<li>Klient wywo\u0142uje bibliotek\u0119, <code>gRPC<\/code>\n<\/li>\n<li>Biblioteka <code>gRPC<\/code> na kliencie realizuje wywo\u0142anie sieciowe biblioteki, <code>gRPC<\/code> na serwerze\n<\/li>\n<li>Biblioteka <code>gRPC<\/code> zwraca si\u0119 do Elwina (brak operacji w przypadku serwera ping-pong).<\/li>\n<\/ol>\n<p>\nAby\u015b zrozumia\u0142, jak wygl\u0105da kod, moja realizacja klienta\/Elwina niewiele r\u00f3\u017cni si\u0119 od przyk\u0142ad\u00f3w klient-serwer. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/grpc\/grpc\/tree\/v1.19.0\/examples\/cpp\/helloworld\">Przyk\u0142ad\u00f3w async.<\/a><\/noindex>.<\/p>\n<blockquote><p><i>Uwaga: powy\u017csza lista jest troch\u0119 uproszczona, poniewa\u017c <code>gRPC<\/code> umo\u017cliwia wykorzystanie w\u0142asnego (szablonowego?) modelu w\u0105tk\u00f3w, w kt\u00f3rym przeplataj\u0105 si\u0119 stos wykonania <code>gRPC<\/code> i realizacja u\u017cytkownika. Dla prostoty b\u0119dziemy trzyma\u0107 si\u0119 tego modelu.<\/i><\/p><\/blockquote>\n<p><\/p>\n<h3>Profilowanie wszystko naprawi.<\/h3>\n<p>\nPo wykluczeniu magazyn\u00f3w danych pomy\u015bla\u0142em, \u017ce prawie sko\u0144czy\u0142em: \u201eTeraz \u0142atwo! Zastosujemy profil i dowiemy si\u0119, gdzie wyst\u0119puje op\u00f3\u017anienie\u201d. Jestem <noindex><a rel=\"nofollow\" href=\"https:\/\/mahdytech.com\/2019\/01\/13\/curious-case-999-latency-hike\/\">wielkim zwolennikiem dok\u0142adnego profilowania,<\/a><\/noindex>poniewa\u017c CPU jest bardzo szybkie i najcz\u0119\u015bciej nie stanowi w\u0105skiego gard\u0142a. Wi\u0119kszo\u015b\u0107 op\u00f3\u017anie\u0144 wyst\u0119puje, gdy procesor musi zatrzyma\u0107 przetwarzanie, aby zrobi\u0107 co\u015b innego. Dok\u0142adne profilowanie CPU zosta\u0142o dok\u0142adnie zaprojektowane do tego celu: precyzyjnie rejestruje wszystkie <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tutorialspoint.com\/what-is-context-switching-in-operating-system\">prze\u0142\u0105czenia kontekstowe<\/a><\/noindex> i pozwala zrozumie\u0107, gdzie wyst\u0119puj\u0105 op\u00f3\u017anienia.<\/p>\n<p>Wybra\u0142em cztery profile: dla wysokiego QPS (niska latencja) oraz z serwerem ping-pong przy niskim QPS (wysoka latencja), zar\u00f3wno po stronie klienta, jak i po stronie serwera. Dla pewno\u015bci wzi\u0105\u0142em te\u017c pr\u00f3bk\u0119 profilu procesora. Por\u00f3wnuj\u0105c profile, zazwyczaj szukam anormalnego stosu wywo\u0142a\u0144. Na przyk\u0142ad, po z\u0142ej stronie z wysok\u0105 latencj\u0105 wyst\u0119puje znacznie wi\u0119cej prze\u0142\u0105cze\u0144 kontekstu (dziesi\u0119ciokrotnie i wi\u0119cej). Jednak w moim przypadku liczba prze\u0142\u0105cze\u0144 kontekstu by\u0142a niemal identyczna. Ku mojemu przera\u017ceniu, nie znaleziono nic istotnego.<\/p>\n<h1>Dodatkowe debugowanie<\/h1>\n<p>\nBy\u0142em w rozpaczy. Nie wiedzia\u0142em, jakich narz\u0119dzi mo\u017cna jeszcze u\u017cy\u0107, a m\u00f3j kolejny plan polega\u0142 zasadniczo na powt\u00f3rzeniu eksperyment\u00f3w z r\u00f3\u017cnymi wariantami, zamiast na precyzyjnym diagnozowaniu problemu.<\/p>\n<h3>Co je\u015bli<\/h3>\n<p>\nOd samego pocz\u0105tku niepokoi\u0142 mnie konkretny czas op\u00f3\u017anienia 50 ms. To bardzo du\u017cy czas. Zdecydowa\u0142em, \u017ce b\u0119d\u0119 wycina\u0142 fragmenty z kodu, a\u017c dowiem si\u0119, kt\u00f3ra cz\u0119\u015b\u0107 powoduje ten b\u0142\u0105d. Nast\u0119pnie przeprowadzi\u0142em eksperyment, kt\u00f3ry zadzia\u0142a\u0142.<\/p>\n<p>Jak to zwykle bywa, z perspektywy czasu wszystko wydaje si\u0119 oczywiste. Umie\u015bci\u0142em klienta na jednej maszynie z Elvinem - i wys\u0142a\u0142em zapytanie do <code>localhost<\/code>. I op\u00f3\u017anienie znikn\u0119\u0142o!<\/p>\n<p><img decoding=\"async\" alt=\"Czasami wi\u0119cej to mniej. Gdy zmniejszenie obci\u0105\u017cenia prowadzi do zwi\u0119kszenia op\u00f3\u017anienia\" src=\"\/wp-content\/uploads\/2019\/05\/2d8466625a264abe2110a65592ee0da8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCo\u015b by\u0142o nie tak z sieci\u0105.<\/p>\n<h3>Opanowuj\u0105c umiej\u0119tno\u015bci in\u017cyniera sieciowego<\/h3>\n<p>\nMusz\u0119 przyzna\u0107: moja wiedza o technologiach sieciowych jest straszna, zw\u0142aszcza bior\u0105c pod uwag\u0119, \u017ce pracuj\u0119 z nimi na co dzie\u0144. Ale sie\u0107 by\u0142a g\u0142\u00f3wnym podejrzanym, wi\u0119c musia\u0142em nauczy\u0107 si\u0119, jak j\u0105 debugowa\u0107.<\/p>\n<p>Na szcz\u0119\u015bcie, internet jest przyjazny dla tych, kt\u00f3rzy chc\u0105 si\u0119 uczy\u0107. Po\u0142\u0105czenie ping i tracert wydawa\u0142o si\u0119 dobrym pocz\u0105tkiem do debugowania problem\u00f3w z transportem sieciowym.<\/p>\n<p>Po pierwsze, uruchomi\u0142em <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/sysinternals\/downloads\/psping\">PsPing<\/a><\/noindex> na porcie TCP Elvina. U\u017cy\u0142em domy\u015blnych ustawie\u0144 - nic nadzwyczajnego. Z ponad tysi\u0105ca ping\u00f3w \u017caden nie przekroczy\u0142 10 ms, poza pierwszym dla rozgrzewki. To jest w sprzeczno\u015bci z zaobserwowanym wzrostem op\u00f3\u017anienia 50 ms w 99. percentylu: przy 100 zapytaniach powinni\u015bmy zobaczy\u0107 oko\u0142o jednego zapytania z op\u00f3\u017anieniem 50 ms.<\/p>\n<p>Nast\u0119pnie spr\u00f3bowa\u0142em <noindex><a rel=\"nofollow\" href=\"https:\/\/support.microsoft.com\/en-ca\/help\/314868\/how-to-use-tracert-to-troubleshoot-tcp-ip-problems-in-windows\">tracert<\/a><\/noindex>: by\u0107 mo\u017ce problem le\u017cy na jednym z w\u0119z\u0142\u00f3w na trasie mi\u0119dzy Elvinem a klientem. Ale tracert r\u00f3wnie\u017c wr\u00f3ci\u0142 z pustymi r\u0119kami.<\/p>\n<p>W ten spos\u00f3b przyczyn\u0105 op\u00f3\u017anienia nie by\u0142 m\u00f3j kod, nie implementacja gRPC ani sie\u0107. Ju\u017c zaczyna\u0142em si\u0119 martwi\u0107, \u017ce nigdy tego nie zrozumiem.<\/p>\n<h3>Na jakim systemie operacyjnym si\u0119 znajdujemy<\/h3>\n<p>\n<code>gRPC<\/code> jest szeroko stosowany w systemie Linux, ale w przypadku Windows to egzotyka. Postanowi\u0142em przeprowadzi\u0107 eksperyment, kt\u00f3ry si\u0119 powi\u00f3d\u0142: stworzy\u0142em maszyn\u0119 wirtualn\u0105 Linux, skompilowa\u0142em Elvina dla Linux i uruchomi\u0142em j\u0105.<\/p>\n<p><img decoding=\"async\" alt=\"Czasami wi\u0119cej to mniej. Gdy zmniejszenie obci\u0105\u017cenia prowadzi do zwi\u0119kszenia op\u00f3\u017anienia\" src=\"\/wp-content\/uploads\/2019\/05\/ee74c16de7e1ac6c286e401660e94ca1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI oto, co si\u0119 sta\u0142o: w serwerze ping-pong na Linuxie nie by\u0142o op\u00f3\u017anie\u0144, jak w analogicznym w\u0119\u017ale Windows, chocia\u017c \u017ar\u00f3d\u0142o danych si\u0119 nie r\u00f3\u017cni\u0142o. Okaza\u0142o si\u0119, \u017ce problem tkwi w implementacji gRPC dla Windows.<\/p>\n<h3>Algorytm Nagle'a<\/h3>\n<p>\nPrzez ca\u0142y ten czas my\u015bla\u0142em, \u017ce brakuje mi flagi <code>gRPC<\/code>. Teraz zrozumia\u0142em, \u017ce tak naprawd\u0119 brakuje mi flagi Windows. Znalaz\u0142em wewn\u0119trzn\u0105 bibliotek\u0119 RPC, w kt\u00f3rej by\u0142em pewien, \u017ce dzia\u0142a poprawnie dla wszystkich zainstalowanych flag <code>gRPC<\/code> Winsock <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/desktop\/winsock\/windows-sockets-start-page-2\">. Nast\u0119pnie doda\u0142em wszystkie te flagi do gRPC i uruchomi\u0142em Elvina na Windows, w poprawionym serwerze ping-pong na Windows!<\/a><\/noindex>Prawie<\/p>\n<p><img decoding=\"async\" alt=\"Czasami wi\u0119cej to mniej. Gdy zmniejszenie obci\u0105\u017cenia prowadzi do zwi\u0119kszenia op\u00f3\u017anienia\" src=\"\/wp-content\/uploads\/2019\/05\/ce3a4066c78f9f6a63fd68578224d6e5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>gotowe: zacz\u0105\u0142em usuwa\u0107 dodane flagi jedn\u0105 po drugiej, a\u017c regresja wr\u00f3ci\u0142a, wi\u0119c mog\u0142em dok\u0142adnie okre\u015bli\u0107 jej przyczyn\u0119. By\u0142 to nieszcz\u0119sny<\/i> , prze\u0142\u0105cznik algorytmu Nagle'a. <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/desktop\/api\/winsock\/nf-winsock-setsockopt\">Opublikowano szczeg\u00f3\u0142owy przewodnik po stroju \u015brodowiska Linux w celu osi\u0105gni\u0119cia maksymalnej wydajno\u015bci przetwarzania \u017c\u0105da\u0144 HTTP.<\/a><\/noindex>pr\u00f3buje zmniejszy\u0107 liczb\u0119 pakiet\u00f3w wysy\u0142anych przez sie\u0107 przez op\u00f3\u017anienie przesy\u0142ania wiadomo\u015bci, a\u017c rozmiar pakietu przekroczy okre\u015blon\u0105 liczb\u0119 bajt\u00f3w. Chocia\u017c mo\u017ce to by\u0107 mi\u0142e dla przeci\u0119tnego u\u017cytkownika, jest destrukcyjne dla serwer\u00f3w czasu rzeczywistego, poniewa\u017c system operacyjny op\u00f3\u017ani niekt\u00f3re wiadomo\u015bci, powoduj\u0105c op\u00f3\u017anienia przy niskim QPS. Ten<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Nagle%27s_algorithm\">Algorytm Nagle'a<\/a><\/noindex> flaga by\u0142a ustawiona w implementacji Linux dla gniazd TCP, ale nie dla Windows. Ja to <code>gRPC<\/code> Du\u017ce op\u00f3\u017anienia przy niskim QPS by\u0142y spowodowane optymalizacj\u0105 systemu operacyjnego. Patrz\u0105c wstecz, profilowanie nie wykry\u0142o op\u00f3\u017anienia, poniewa\u017c by\u0142o przeprowadzane w trybie j\u0105dra, a nie w <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/grpc\/grpc\/commit\/1dce1009e67ea4b5934a61b1bcf8a217bd12cc76\">poprawi\u0142em<\/a><\/noindex>.<\/p>\n<h1>Podsumowanie<\/h1>\n<p>\ntrybie u\u017cytkownika. <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.codinghorror.com\/understanding-user-and-kernel-mode\/\">Nie wiem, czy mo\u017cna obserwowa\u0107 algorytm Nagle'a przez przechwyty ETW, ale to by\u0142oby interesuj\u0105ce.<\/a><\/noindex>Je\u015bli chodzi o eksperyment localhost, prawdopodobnie nie dotyczy\u0142 rzeczywistego kodu sieciowego, wi\u0119c algorytm Nagle'a si\u0119 nie uruchomi\u0142, dlatego problemy z op\u00f3\u017anieniem znikn\u0119\u0142y, gdy klient skontaktowa\u0142 si\u0119 z Elvinem przez localhost.<\/p>\n<p>Nast\u0119pnym razem, gdy zauwa\u017cysz wzrost op\u00f3\u017anienia przy spadku liczby \u017c\u0105da\u0144 na sekund\u0119, algorytm Nagle'a powinien by\u0107 na twojej li\u015bcie podejrzanych!<\/p>\n<p>Jak w wi\u0119kszo\u015bci post\u00f3w, pojawi\u0142 si\u0119 problem z rozproszon\u0105 us\u0142ug\u0105, nazwijmy t\u0119 us\u0142ug\u0119 Elvin.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/451904\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u0430\u043a \u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043f\u043e\u0441\u0442\u043e\u0432, \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u043e\u0439, \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u044d\u0442\u0443 \u0441\u043b\u0443\u0436\u0431\u0443 \u042d\u043b\u0432\u0438\u043d. \u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u044f \u043d\u0435 \u0441\u0430\u043c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u043c\u043d\u0435 \u0441\u043e\u043e\u0431\u0449\u0438\u043b\u0438 \u0440\u0435\u0431\u044f\u0442\u0430 \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438. \u041e\u0434\u043d\u0430\u0436\u0434\u044b \u044f \u043f\u0440\u043e\u0441\u043d\u0443\u043b\u0441\u044f \u043e\u0442 \u043d\u0435\u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0438\u0441\u044c\u043c\u0430 \u0438\u0437-\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a \u0443 \u042d\u043b\u0432\u0438\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043a\u043b\u0438\u0435\u043d\u0442 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439 99-\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0438\u043b\u044f \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":25389,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-33707","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041a\u0430\u043a \u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043f\u043e\u0441\u0442\u043e\u0432, \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u043e\u0439, \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u044d\u0442\u0443 \u0441\u043b\u0443\u0436\u0431\u0443 \u042d\u043b\u0432\u0438\u043d.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/inogda-bolshe-eto-menshe-kogda-umenshenie-nagruzki-privodit-k-uvelicheniyu-zaderzhki\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0418\u043d\u043e\u0433\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u2014 \u044d\u0442\u043e \u043c\u0435\u043d\u044c\u0448\u0435. \u041a\u043e\u0433\u0434\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041a\u0430\u043a \u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043f\u043e\u0441\u0442\u043e\u0432, \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u043e\u0439, \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u044d\u0442\u0443 \u0441\u043b\u0443\u0436\u0431\u0443 \u042d\u043b\u0432\u0438\u043d.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/inogda-bolshe-eto-menshe-kogda-umenshenie-nagruzki-privodit-k-uvelicheniyu-zaderzhki\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:54:17+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:54:17+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Czasami wi\u0119cej to mniej. Gdy zmniejszenie obci\u0105\u017cenia prowadzi do zwi\u0119kszenia op\u00f3\u017anienia | ProHoster","description":"\ud83e\udd47Czasami wi\u0119cej to mniej. Gdy zmniejszenie obci\u0105\u017cenia prowadzi do wzrostu op\u00f3\u017anienia | ProHoster","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/inogda-bolshe-eto-menshe-kogda-umenshenie-nagruzki-privodit-k-uvelicheniyu-zaderzhki","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0418\u043d\u043e\u0433\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u2014 \u044d\u0442\u043e \u043c\u0435\u043d\u044c\u0448\u0435. \u041a\u043e\u0433\u0434\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 | ProHoster","og:description":"\u041a\u0430\u043a \u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043f\u043e\u0441\u0442\u043e\u0432, \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u043e\u0439, \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u044d\u0442\u0443 \u0441\u043b\u0443\u0436\u0431\u0443 \u042d\u043b\u0432\u0438\u043d.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/inogda-bolshe-eto-menshe-kogda-umenshenie-nagruzki-privodit-k-uvelicheniyu-zaderzhki","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:54:17+00:00","article:modified_time":"2019-10-31T18:54:17+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"33707","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 16:23:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:35:31","updated":"2026-01-21 16:23:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/33707","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=33707"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/33707\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/25389"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=33707"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=33707"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=33707"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}