{"id":84876,"date":"2020-06-11T13:43:18","date_gmt":"2020-06-11T11:43:18","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/uskoryaem-internet-zaprosy-i-spim-spokojno"},"modified":"2020-06-11T13:43:18","modified_gmt":"2020-06-11T11:43:18","slug":"uskoryaem-internet-zaprosy-i-spim-spokojno","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/uskoryaem-internet-zaprosy-i-spim-spokojno","title":{"rendered":"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/07e2e32d406b8b5d6d6cb3f627a31c3a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNetflix to lider rynku telewizji internetowej \u2013 firma, kt\u00f3ra stworzy\u0142a i aktywnie rozwija ten segment. Netflix jest znany nie tylko z rozbudowanego katalogu film\u00f3w i seriali dost\u0119pnych z prawie ka\u017cdego zak\u0105tka \u015bwiata i na ka\u017cdym urz\u0105dzeniu z wy\u015bwietlaczem, ale tak\u017ce z niezawodnej infrastruktury i unikalnej kultury in\u017cynieryjnej. <\/p>\n<p>Przyk\u0142ad podej\u015bcia Netflix do rozwijania i wspierania z\u0142o\u017conych system\u00f3w zosta\u0142 zaprezentowany na DevOops 2019. <noindex><a rel=\"nofollow\" href=\"https:\/\/sfedov.com\">Siergiej Fedorow<\/a><\/noindex> \u2013 dyrektor ds. rozwoju w Netflix. Absolwent Wydzia\u0142u Matematyki, Informatyki i Mechaniki Uniwersytetu Nizhegorodzkiego im. Lobaczewskiego, Siergiej jest jednym z pierwszych in\u017cynier\u00f3w w Open Connect \u2013 zespole CDN w Netflix. Zbudowa\u0142 systemy monitorowania i analizy danych wideo, uruchomi\u0142 popularn\u0105 us\u0142ug\u0119 do oceny pr\u0119dko\u015bci po\u0142\u0105czenia internetowego FAST.com i przez ostatnie kilka lat pracowa\u0142 nad optymalizacj\u0105 zapyta\u0144 internetowych, aby aplikacja Netflix dzia\u0142a\u0142a jak najszybciej dla u\u017cytkownik\u00f3w.<\/p>\n<p>Prezentacja zdoby\u0142a najlepsze opinie od uczestnik\u00f3w konferencji, a my przygotowali\u015bmy dla was wersj\u0119 tekstow\u0105.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<center><div class=\"youtube-placeholder\" data-id=\"n7Te9WIz1ho\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/n7Te9WIz1ho\/hqdefault.jpg\" alt=\"Odtwarzaj wideo\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h2>W prezentacji Siergiej szczeg\u00f3\u0142owo om\u00f3wi\u0142<\/h2>\n<p><\/p>\n<ul>\n<li>czynniki wp\u0142ywaj\u0105ce na op\u00f3\u017anienia w zapytaniach internetowych mi\u0119dzy klientem a serwerem;<\/li>\n<li>jak te op\u00f3\u017anienia zredukowa\u0107;<\/li>\n<li>jak projektowa\u0107, utrzymywa\u0107 i monitorowa\u0107 systemy odporne na b\u0142\u0119dy;<\/li>\n<li>jak osi\u0105ga\u0107 rezultaty w kr\u00f3tkim czasie przy minimalnym ryzyku dla biznesu;<\/li>\n<li>jak analizowa\u0107 wyniki i uczy\u0107 si\u0119 na b\u0142\u0119dach.<\/li>\n<\/ul>\n<p>\nOdpowiedzi na te pytania s\u0105 wa\u017cne nie tylko dla os\u00f3b pracuj\u0105cych w du\u017cych korporacjach. <\/p>\n<p>Przedstawione zasady i techniki powinien zna\u0107 i stosowa\u0107 ka\u017cdy, kto rozwija i wspiera produkty internetowe.<\/p>\n<p><b>Dalsza cz\u0119\u015b\u0107 to relacja z punktu widzenia m\u00f3wcy.<\/b><\/p>\n<h2>Znaczenie pr\u0119dko\u015bci internetu<\/h2>\n<p>\nPr\u0119dko\u015b\u0107 zapyta\u0144 internetowych ma bezpo\u015bredni zwi\u0105zek z biznesem. Rozwa\u017cmy obszar zakup\u00f3w: firma Amazon w 2009 roku <noindex><a rel=\"nofollow\" href=\"https:\/\/www.gigaspaces.com\/blog\/amazon-found-every-100ms-of-latency-cost-them-1-in-sales\/\">podkre\u015bla\u0142a,<\/a><\/noindex>\u017ce op\u00f3\u017anienie o 100 ms prowadzi do utraty 1% sprzeda\u017cy.<\/p>\n<p>Coraz wi\u0119cej jest urz\u0105dze\u0144 mobilnych, a za nimi mobilnych stron i aplikacji. Je\u015bli twoja strona \u0142aduje si\u0119 d\u0142u\u017cej ni\u017c 3 sekundy, tracisz oko\u0142o po\u0142owy u\u017cytkownik\u00f3w. Od <noindex><a rel=\"nofollow\" href=\"https:\/\/webmasters.googleblog.com\/2018\/01\/using-page-speed-in-mobile-search.html\">lipca 2018 roku<\/a><\/noindex> Google bierze pod uwag\u0119 pr\u0119dko\u015b\u0107 \u0142adowania twojej strony w wynikach wyszukiwania: im szybsza strona, tym wy\u017csza jej pozycja w Google.<\/p>\n<p>Pr\u0119dko\u015b\u0107 po\u0142\u0105czenia jest r\u00f3wnie\u017c wa\u017cna w instytucjach finansowych, gdzie op\u00f3\u017anienia s\u0105 krytyczne. W 2015 roku firma Hibernia Networks <noindex><a rel=\"nofollow\" href=\"https:\/\/www.submarinenetworks.com\/en\/systems\/trans-atlantic\/project-express\/hibernia-express-connects-new-york-to-london-in-under-58-95ms\">zako\u0144czy\u0142a<\/a><\/noindex> kabel do \u0142\u0105czenia Nowego Jorku z Londynem za 400 mln dolar\u00f3w, aby zmniejszy\u0107 op\u00f3\u017anienie mi\u0119dzy miastami o 6 ms. Wyobra\u017a sobie, 66 mln dolar\u00f3w za zmniejszenie op\u00f3\u017anienia o 1 ms!<\/p>\n<p>Zgodnie z <noindex><a rel=\"nofollow\" href=\"https:\/\/hpbn.co\/primer-on-web-performance\/\">badaniem<\/a><\/noindex>, pr\u0119dko\u015b\u0107 po\u0142\u0105czenia powy\u017cej 5 Mbit\/s przestaje bezpo\u015brednio wp\u0142ywa\u0107 na czas \u0142adowania typowej strony internetowej. Niemniej jednak mi\u0119dzy op\u00f3\u017anieniem po\u0142\u0105czenia a pr\u0119dko\u015bci\u0105 \u0142adowania strony istnieje liniowa zale\u017cno\u015b\u0107:<\/p>\n<p><img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/340ca1f2c5bdd6ca95a5caf02f67e3fd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJednak Netflix to nie typowy produkt. Wp\u0142yw op\u00f3\u017anienia i pr\u0119dko\u015bci na u\u017cytkownika to obszar intensywnych analiz i rozwoju. Istnieje \u0142adowanie aplikacji oraz wyb\u00f3r tre\u015bci, kt\u00f3re zale\u017c\u0105 od op\u00f3\u017anienia, ale \u0142adowanie element\u00f3w statycznych i strumieniowanie r\u00f3wnie\u017c zale\u017c\u0105 od pr\u0119dko\u015bci po\u0142\u0105czenia. Analiza i optymalizacja kluczowych czynnik\u00f3w wp\u0142ywaj\u0105cych na jako\u015b\u0107 us\u0142ugi dla u\u017cytkownik\u00f3w to aktywne pole dzia\u0142alno\u015bci kilku zespo\u0142\u00f3w w Netflix. Jednym z zada\u0144 jest zmniejszenie op\u00f3\u017anienia zapyta\u0144 mi\u0119dzy urz\u0105dzeniami Netflix a infrastruktur\u0105 chmurow\u0105.<\/p>\n<p>W tym raporcie skoncentrujemy si\u0119 na zmniejszeniu op\u00f3\u017anie\u0144 (latency) na przyk\u0142adzie infrastruktury Netflix. Z praktycznego punktu widzenia zbadamy, jak podchodzi\u0107 do proces\u00f3w projektowania, rozwoju i operowania z\u0142o\u017conymi systemami rozproszonymi, aby skupi\u0107 si\u0119 na innowacjach i wynikach, a nie na diagnozowaniu problem\u00f3w operacyjnych i usterek.<\/p>\n<h2>Wewn\u0105trz Netflix<\/h2>\n<p>\nTysi\u0105ce r\u00f3\u017cnych urz\u0105dze\u0144 wspieraj\u0105 aplikacje Netflix. Ich rozw\u00f3j jest realizowany przez cztery r\u00f3\u017cne zespo\u0142y, kt\u00f3re tworz\u0105 oddzielne wersje klienta dla Androida, iOS, TV i przegl\u0105darek internetowych. Wk\u0142adamy ogromny wysi\u0142ek w popraw\u0119 i personalizacj\u0119 interfejsu u\u017cytkownika. W tym celu r\u00f3wnolegle uruchamiamy setki test\u00f3w A\/B.<\/p>\n<p>Personalizacja jest wspierana dzi\u0119ki setkom mikroserwis\u00f3w w chmurze AWS, kt\u00f3re dostarczaj\u0105 spersonalizowane dane dla u\u017cytkownik\u00f3w, zarz\u0105dzaj\u0105 zapytaniami, zapewniaj\u0105 telemetri\u0119, Big Data i transkodowanie. Wizualizacja ruchu wygl\u0105da nast\u0119puj\u0105co:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/n7Te9WIz1ho?t=364\">Link do filmu z demonstracj\u0105 (6:04-6:23)<\/a><\/noindex><\/p>\n<p>Po lewej stronie znajduje si\u0119 punkt wej\u015bcia, a nast\u0119pnie ruch jest rozdzielany mi\u0119dzy kilkaset mikroserwis\u00f3w, kt\u00f3re s\u0105 wspierane przez r\u00f3\u017cne zespo\u0142y backendowe.<\/p>\n<p>Kolejnym wa\u017cnym komponentem naszej infrastruktury jest Open Connect CDN, kt\u00f3ry dostarcza do ko\u0144cowego u\u017cytkownika statyczne tre\u015bci \u2014 wideo, obrazy, kod dla klient\u00f3w itp. CDN znajduje si\u0119 na niestandardowych serwerach (OCA \u2014 Open Connect Appliance). Wewn\u0105trz znajduj\u0105 si\u0119 macierze dysk\u00f3w SSD i HDD zarz\u0105dzane przez zoptymalizowany system FreeBSD, z NGINX oraz zestawem us\u0142ug. Projektujemy i optymalizujemy komponenty sprz\u0119towe i programowe w taki spos\u00f3b, aby serwer CDN m\u00f3g\u0142 przesy\u0142a\u0107 jak najwi\u0119cej danych do u\u017cytkownik\u00f3w. <\/p>\n<p>\u201e\u015aciana\u201d z tych serwer\u00f3w w punkcie wymiany ruchu internetowego (Internet eXchange \u2014 IX) wygl\u0105da nast\u0119puj\u0105co:<\/p>\n<p><img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/8155601c344acb1eb05b925193af8f9a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nInternet Exchange umo\u017cliwia dostawcom internetu i dostawcom tre\u015bci \u201epo\u0142\u0105czenie si\u0119\u201d ze sob\u0105 w celu bardziej bezpo\u015bredniej wymiany danych w internecie. Na ca\u0142ym \u015bwiecie jest oko\u0142o 70-80 punkt\u00f3w Internet Exchange, w kt\u00f3rych zainstalowane s\u0105 nasze serwery, a my zajmujemy si\u0119 ich instalacj\u0105 i konserwacj\u0105 samodzielnie:<\/p>\n<p><img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/77a2465314e47c0b2c90dbf7a2fb5e6b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOpr\u00f3cz tego dostarczamy r\u00f3wnie\u017c serwery bezpo\u015brednio dostawcom internetu, kt\u00f3rzy instaluj\u0105 je w swojej sieci, poprawiaj\u0105c lokalizacj\u0119 ruchu Netflix i jako\u015b\u0107 streamingu dla u\u017cytkownik\u00f3w:<\/p>\n<p><img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/63e077d2649bfafea5c7af43a0faaf85.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZestaw us\u0142ug AWS odpowiada za kierowanie zapyta\u0144 wideo od klient\u00f3w do serwer\u00f3w CDN, a tak\u017ce konfigurowanie samych serwer\u00f3w \u2014 aktualizacj\u0119 tre\u015bci, kodu programowego, ustawie\u0144 itp. W tym celu zbudowali\u015bmy r\u00f3wnie\u017c sie\u0107 backbone, kt\u00f3ra \u0142\u0105czy serwery w punktach Internet Exchange z AWS. Sie\u0107 backbone to globalna sie\u0107 kabli \u015bwiat\u0142owodowych i router\u00f3w, kt\u00f3re mo\u017cemy projektowa\u0107 i konfigurowa\u0107 w zale\u017cno\u015bci od naszych potrzeb.<\/p>\n<p>Wed\u0142ug <noindex><a rel=\"nofollow\" href=\"https:\/\/www.sandvine.com\/hubfs\/Sandvine_Redesign_2019\/Downloads\/Internet%20Phenomena\/Internet%20Phenomena%20Report%20Q32019%2020190910.pdf\">oprogramowaniu Sandvine<\/a><\/noindex>, nasza infrastruktura CDN dostarcza w godzinach szczytu oko\u0142o \u215b \u015bwiatowego ruchu internetowego i \u2153 ruchu w Ameryce P\u00f3\u0142nocnej, gdzie Netflix dzia\u0142a najd\u0142u\u017cej. Imponuj\u0105ce liczby, ale dla mnie jednym z najwspanialszych osi\u0105gni\u0119\u0107 jest to, \u017ce ca\u0142y system CDN jest opracowywany i utrzymywany przez zesp\u00f3\u0142 licz\u0105cy mniej ni\u017c 150 os\u00f3b.<\/p>\n<p>Pocz\u0105tkowo infrastruktura CDN zosta\u0142a zaprojektowana do dostarczania danych wideo. Jednak z biegiem czasu zrozumieli\u015bmy, \u017ce mo\u017cemy j\u0105 wykorzysta\u0107 r\u00f3wnie\u017c do optymalizacji dynamicznych zapyta\u0144 od klient\u00f3w w chmurze AWS.<\/p>\n<h2>O przyspieszaniu internetu<\/h2>\n<p>\nDzisiaj Netflix ma trzy regiony AWS, a op\u00f3\u017anienie \u017c\u0105da\u0144 w chmurze b\u0119dzie zale\u017ca\u0142o od tego, jak daleko klient znajduje si\u0119 od najbli\u017cszego regionu. Posiadamy r\u00f3wnie\u017c wiele serwer\u00f3w CDN, kt\u00f3re s\u0105 wykorzystywane do dostarczania statycznych tre\u015bci. Czy mo\u017cna jako\u015b wykorzysta\u0107 t\u0119 infrastruktur\u0119 do przyspieszenia dynamicznych \u017c\u0105da\u0144? Niestety, nie mo\u017cna tych \u017c\u0105da\u0144 buforowa\u0107 \u2014 API s\u0105 spersonalizowane, a ka\u017cdy wynik jest unikalny.<\/p>\n<p>Utw\u00f3rzmy proxy na serwerze CDN i zacznijmy przepuszcza\u0107 przez niego ruch. Czy to b\u0119dzie szybsze?<\/p>\n<h2>Sprz\u0119t<\/h2>\n<p>\nPrzypomnijmy sobie, jak dzia\u0142aj\u0105 protoko\u0142y sieciowe. Dzisiaj wi\u0119kszo\u015b\u0107 ruchu w internecie korzysta z HTTPs, kt\u00f3ry opiera si\u0119 na protoko\u0142ach ni\u017cszego poziomu TCP i TLS. Aby klient po\u0142\u0105czy\u0142 si\u0119 z serwerem, przeprowadza handshake, a do nawi\u0105zania zabezpieczonego po\u0142\u0105czenia klient musi wymieni\u0107 wiadomo\u015bci z serwerem trzy razy i jeszcze co najmniej raz, aby przes\u0142a\u0107 dane. Przy op\u00f3\u017anieniu jednego wymiany (RTT) wynosz\u0105cym 100 ms potrzeba 400 ms, aby otrzyma\u0107 pierwszy bit danych:<\/p>\n<p><img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/ab12024f5a9940ca470f27821ca3c631.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJe\u015bli certyfikaty zostan\u0105 umieszczone na serwerze CDN, czas \u201eu\u015bcisku d\u0142oni\u201d mi\u0119dzy klientem a serwerem mo\u017cna znacznie skr\u00f3ci\u0107, je\u015bli CDN znajduje si\u0119 bli\u017cej. Za\u0142\u00f3\u017cmy, \u017ce op\u00f3\u017anienie do serwera CDN wynosi 30 ms. W takim przypadku uzyskanie pierwszego bitu zajmie ju\u017c 220 ms:<\/p>\n<p><img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/d63134bb51592aaa6a5e0c86f1a070e0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJednak korzy\u015bci na tym si\u0119 nie ko\u0144cz\u0105. Po nawi\u0105zaniu po\u0142\u0105czenia TCP zwi\u0119ksza congestion window (liczba informacji, kt\u00f3r\u0105 mo\u017ce przesy\u0142a\u0107 przez to po\u0142\u0105czenie r\u00f3wnolegle). Je\u015bli utracony zostanie pakiet danych, klasyczne realizacje protoko\u0142u TCP (takie jak TCP New Reno) zmniejszaj\u0105 otwarte \u201eokno\u201d o po\u0142ow\u0119. Wzrost congestion window oraz szybko\u015b\u0107 jego odbudowy po utracie zn\u00f3w zale\u017cy od op\u00f3\u017anienia (RTT) do serwera. Je\u015bli to po\u0142\u0105czenie prowadzi tylko do serwera CDN, odbudowa b\u0119dzie szybsza. Przy tym utrata pakiet\u00f3w to standardowe zjawisko, szczeg\u00f3lnie w sieciach bezprzewodowych.<\/p>\n<p>Przepustowo\u015b\u0107 internetu mo\u017ce male\u0107, szczeg\u00f3lnie w godzinach szczytu z powodu ruchu od u\u017cytkownik\u00f3w, co mo\u017ce prowadzi\u0107 do \"kork\u00f3w\". W internecie nie ma sposobu, aby nada\u0107 priorytet jednym zapytaniom w stosunku do innych. Na przyk\u0142ad, nada\u0107 priorytet ma\u0142ym, op\u00f3\u017anieniowym zapytaniom w por\u00f3wnaniu do \"ci\u0119\u017ckich\" strumieni danych, kt\u00f3re obci\u0105\u017caj\u0105 sie\u0107. Jednak w naszym przypadku posiadanie w\u0142asnej sieci backbone pozwala na to na cz\u0119\u015bci trasy zapytania \u2013 mi\u0119dzy CDN a chmur\u0105, i mo\u017cemy j\u0105 ca\u0142kowicie skonfigurowa\u0107. Mo\u017cna tak ustawi\u0107, aby ma\u0142e i sp\u00f3\u017anione pakiety by\u0142y priorytetowe, a du\u017ce strumienie danych przesz\u0142y nieco p\u00f3\u017aniej. Im bli\u017cej CDN do klienta, tym wi\u0119ksza efektywno\u015b\u0107.<\/p>\n<p>Na op\u00f3\u017anienie wp\u0142ywaj\u0105 r\u00f3wnie\u017c protoko\u0142y aplikacji (OSI Level 7). Nowe protoko\u0142y, takie jak HTTP\/2, pozwalaj\u0105 na optymalizacj\u0119 wydajno\u015bci r\u00f3wnoleg\u0142ych zapyta\u0144. Jednak mamy klient\u00f3w Netflixa z starymi urz\u0105dzeniami, kt\u00f3re nie obs\u0142uguj\u0105 nowych protoko\u0142\u00f3w. Nie wszystkich klient\u00f3w mo\u017cna zaktualizowa\u0107 lub optymalnie skonfigurowa\u0107. Przy tym mamy pe\u0142n\u0105 kontrol\u0119 mi\u0119dzy CDN a chmur\u0105 oraz mo\u017cliwo\u015b\u0107 korzystania z nowych, optymalnych protoko\u0142\u00f3w i ustawie\u0144. Nieefektywna cz\u0119\u015b\u0107 ze starymi protoko\u0142ami dzia\u0142a tylko mi\u0119dzy klientem a serwerem CDN. Co wi\u0119cej, mo\u017cemy multiplexowa\u0107 zapytania na ju\u017c ustanowionym po\u0142\u0105czeniu mi\u0119dzy CDN a chmur\u0105, poprawiaj\u0105c wykorzystanie po\u0142\u0105czenia na poziomie TCP.<\/p>\n<p><img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/a05b49680734670dcfce9111f3ba1919.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Mierzymy<\/h2>\n<p>\nMimo \u017ce teoria obiecuje popraw\u0119, nie rzucamy si\u0119 od razu na uruchomienie systemu w produkcji. Zamiast tego musimy najpierw udowodni\u0107, \u017ce pomys\u0142 zadzia\u0142a w praktyce. W tym celu musimy odpowiedzie\u0107 na kilka pyta\u0144:<\/p>\n<ul>\n<li><b>Szybko\u015b\u0107<\/b>: czy proxy b\u0119dzie szybsze?<\/li>\n<li><b>Niezawodno\u015b\u0107<\/b>: czy b\u0119dzie si\u0119 cz\u0119\u015bciej psu\u0107?<\/li>\n<li><b>Trudno\u015b\u0107<\/b>: jak zintegrowa\u0107 z aplikacjami?<\/li>\n<li><b>Koszt<\/b>: ile kosztuje wdro\u017cenie dodatkowej infrastruktury?<\/li>\n<\/ul>\n<p>\nSzczeg\u00f3\u0142owo przyjrzyjmy si\u0119 naszemu podej\u015bciu do oceny pierwszego punktu. Pozosta\u0142e b\u0119d\u0105 analizowane w podobny spos\u00f3b.<\/p>\n<p>Aby przeanalizowa\u0107 szybko\u015b\u0107 zapyta\u0144, chcemy uzyska\u0107 dane dla wszystkich u\u017cytkownik\u00f3w, nie po\u015bwi\u0119caj\u0105c du\u017co czasu na rozw\u00f3j i nie psuj\u0105c produkcji. Istnieje kilka podej\u015b\u0107, aby to osi\u0105gn\u0105\u0107:<\/p>\n<ol>\n<li>RUM, czyli pasywne mierzenie zapyta\u0144. Mierzymy czas realizacji bie\u017c\u0105cych zapyta\u0144 od u\u017cytkownik\u00f3w i zapewniamy pe\u0142ne pokrycie u\u017cytkownik\u00f3w. Wada \u2014 sygna\u0142 jest do\u015b\u0107 niestabilny z powodu wielu czynnik\u00f3w, takich jak r\u00f3\u017cne rozmiary zapyta\u0144, czas przetwarzania na serwerze i kliencie. Ponadto nie mo\u017cna przetestowa\u0107 nowej konfiguracji bez wp\u0142ywu na produkcj\u0119.<\/li>\n<li>Testy laboratoryjne. Specjalne serwery i infrastruktura, kt\u00f3re imituj\u0105 klient\u00f3w. Przy ich pomocy przeprowadzamy niezb\u0119dne testy. W ten spos\u00f3b uzyskujemy pe\u0142n\u0105 kontrol\u0119 nad wynikami pomiar\u00f3w i wyra\u017any sygna\u0142. Jednak nie ma pe\u0142nego pokrycia urz\u0105dze\u0144 i lokalizacji u\u017cytkownik\u00f3w (szczeg\u00f3lnie w przypadku us\u0142ug na ca\u0142ym \u015bwiecie i wsparcia dla tysi\u0119cy modeli urz\u0105dze\u0144).<\/li>\n<\/ol>\n<p>\nJak mo\u017cna po\u0142\u0105czy\u0107 zalety obu metod?<\/p>\n<p>Nasz zesp\u00f3\u0142 znalaz\u0142 rozwi\u0105zanie. Napisali\u015bmy ma\u0142y fragment kodu \u2014 pr\u00f3bnik \u2014 kt\u00f3ry wbudowali\u015bmy w nasze aplikacje. Pr\u00f3bki pozwalaj\u0105 nam przeprowadza\u0107 w pe\u0142ni kontrolowane testy sieciowe z naszych urz\u0105dze\u0144. Dzia\u0142a to w nast\u0119puj\u0105cy spos\u00f3b: <\/p>\n<ol>\n<li>Nied\u0142ugo po za\u0142adowaniu aplikacji i zako\u0144czeniu wst\u0119pnej aktywno\u015bci uruchamiamy nasze pr\u00f3bki. <\/li>\n<li>Klient wysy\u0142a zapytanie do serwera i otrzymuje \u201eprzepis\u201d testu. Przepis to lista adres\u00f3w URL, do kt\u00f3rych nale\u017cy wykona\u0107 zapytania HTTP(s). Opr\u00f3cz tego przepis konfiguruje parametry zapyta\u0144: op\u00f3\u017anienia mi\u0119dzy zapytaniami, obj\u0119to\u015b\u0107 \u017c\u0105danych danych, nag\u0142\u00f3wki HTTP(s), itp. Mo\u017cemy r\u00f3wnocze\u015bnie testowa\u0107 kilka r\u00f3\u017cnych przepis\u00f3w \u2014 podczas \u017c\u0105dania konfiguracji losowo okre\u015blamy, kt\u00f3ry przepis wyda\u0107. <\/li>\n<li>Czas uruchomienia pr\u00f3bki jest wybierany tak, aby nie kolidowa\u0142 z aktywnym u\u017cywaniem zasob\u00f3w sieciowych przez klienta. W zasadzie wybiera si\u0119 czas, gdy klient nie jest aktywny.<\/li>\n<li>Po otrzymaniu przepisu klient wykonuje zapytania do ka\u017cdego z adres\u00f3w URL r\u00f3wnolegle. Zapytanie do ka\u017cdego z adres\u00f3w mo\u017ce by\u0107 powtarzane \u2014 tzw. \u201epulsacje\u201d. Podczas pierwszej pulsacji mierzymy, ile czasu zaj\u0119\u0142o nawi\u0105zanie po\u0142\u0105czenia i pobranie danych. Podczas drugiej pulsacji mierzymy czas \u0142adowania danych przez ju\u017c nawi\u0105zane po\u0142\u0105czenie. Przed trzeci\u0105 pulsacj\u0105 mo\u017cemy na\u0142o\u017cy\u0107 op\u00f3\u017anienie i zmierzy\u0107 pr\u0119dko\u015b\u0107 nawi\u0105zania ponownego po\u0142\u0105czenia itd.\n<p>Podczas testu mierzmy wszystkie parametry, kt\u00f3re mo\u017ce uzyska\u0107 urz\u0105dzenie:<\/p>\n<ul>\n<li>czas zapytania DNS;<\/li>\n<li>czas nawi\u0105zywania po\u0142\u0105czenia przez TCP;<\/li>\n<li>czas nawi\u0105zywania po\u0142\u0105czenia przez TLS;<\/li>\n<li>czas otrzymywania pierwszego bajtu danych;<\/li>\n<li>ca\u0142kowity czas \u0142adowania;<\/li>\n<li>status kodu rezultatu.<\/li>\n<\/ul>\n<\/li>\n<li> Po zako\u0144czeniu wszystkich puls\u00f3w pr\u00f3bka \u0142aduje wyniki wszystkich pomiar\u00f3w do analizy.<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/fff11d487b7c7725707cdeeca0734296.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKluczowymi elementami s\u0105 minimalna zale\u017cno\u015b\u0107 od logiki po stronie klienta, przetwarzania danych po stronie serwera oraz pomiar r\u00f3wnoleg\u0142ych zapyta\u0144. Dzi\u0119ki temu zyskujemy mo\u017cliwo\u015b\u0107 izolowania i testowania wp\u0142ywu r\u00f3\u017cnych czynnik\u00f3w na wydajno\u015b\u0107 zapyta\u0144, wariuj\u0105c je w ramach jednego przepisu, i uzyskiwania wynik\u00f3w z rzeczywistych klient\u00f3w.<\/p>\n<p>Taka infrastruktura okaza\u0142a si\u0119 u\u017cyteczna nie tylko do analizy wydajno\u015bci zapyta\u0144. Obecnie mamy 14 aktywnych przepis\u00f3w, ponad 6000 pr\u00f3b na sekund\u0119, zbieraj\u0105cych dane z ca\u0142ego \u015bwiata i z pe\u0142nym pokryciem urz\u0105dze\u0144. Gdyby Netflix kupi\u0142by tak\u0105 us\u0142ug\u0119 od zewn\u0119trznych firm, kosztowa\u0142aby ona miliony dolar\u00f3w rocznie, z o wiele gorszym pokryciem.<\/p>\n<h2>Sprawdzamy teori\u0119 w praktyce: prototyp<\/h2>\n<p>\nZ takim systemem uzyskali\u015bmy mo\u017cliwo\u015b\u0107 oceny efektywno\u015bci proxy CDN na op\u00f3\u017anienie zapyta\u0144. Teraz trzeba:<\/p>\n<ul>\n<li>stworzy\u0107 prototyp proxy;<\/li>\n<li>umie\u015bci\u0107 prototyp na CDN;<\/li>\n<li>okre\u015bli\u0107, jak kierowa\u0107 klient\u00f3w do proxy na konkretnym serwerze CDN;<\/li>\n<li>por\u00f3wna\u0107 wydajno\u015b\u0107 z zapytaniami do AWS bez proxy.<\/li>\n<\/ul>\n<p>\nZadanie \u2014 jak najszybciej oceni\u0107 efektywno\u015b\u0107 proponowanego rozwi\u0105zania. Do realizacji prototypu wybrali\u015bmy Go, dzi\u0119ki dost\u0119pno\u015bci dobrych bibliotek sieciowych. Na ka\u017cdym serwerze CDN zainstalowali\u015bmy prototyp proxy jako statyczny plik binarny, aby zminimalizowa\u0107 zale\u017cno\u015bci i upro\u015bci\u0107 integracj\u0119. W pocz\u0105tkowej realizacji maksymalnie wykorzystali\u015bmy standardowe komponenty i niewielkie modyfikacje dla HTTP\/2 connection pooling oraz request multiplexing.<\/p>\n<p>Aby zr\u00f3wnowa\u017cy\u0107 obci\u0105\u017cenie mi\u0119dzy regionami AWS, u\u017cyli\u015bmy geograficznej bazy danych DNS, tej samej, kt\u00f3ra jest wykorzystywana do r\u00f3wnowa\u017cenia klient\u00f3w. Do wyboru serwera CDN dla klienta u\u017cywamy TCP Anycast dla serwer\u00f3w w Internet Exchange (IX). W tym przypadku u\u017cywamy jednego adresu IP dla wszystkich serwer\u00f3w CDN, a klient b\u0119dzie kierowany do serwera CDN z najmniejsz\u0105 liczb\u0105 skok\u00f3w IP. Na serwerach CDN zainstalowanych u dostawc\u00f3w internetowych (ISP) nie mamy kontroli nad routerem w celu skonfigurowania TCP Anycast, dlatego stosujemy <noindex><a rel=\"nofollow\" href=\"https:\/\/www.infoq.com\/presentations\/netflix-streaming-arch\/\">t\u0119 sam\u0105 logik\u0119<\/a><\/noindex>, na kt\u00f3rej klienci kierowani s\u0105 do dostawc\u00f3w internetowych w celu streamingu wideo.<\/p>\n<p>Mamy wi\u0119c trzy typy tras dla \u017c\u0105dania: do chmury przez otwarty internet, przez serwer CDN w IX lub przez serwer CDN zlokalizowany u dostawcy internetowego. Naszym celem jest zrozumienie, kt\u00f3ra trasa jest lepsza i jakie s\u0105 korzy\u015bci z proxy w por\u00f3wnaniu do sposobu, w jaki zapytania s\u0105 kierowane do produkcji. W tym celu korzystamy z systemu pr\u00f3b w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<p><img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/51b64d5be0aaf0f141484ee0fd373396.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKa\u017cda trasa staje si\u0119 oddzielnym celem, a my patrzymy na uzyskany czas. Dla analizy \u0142\u0105czymy wyniki proxy w jedn\u0105 grup\u0119 (wybieramy najlepszy czas mi\u0119dzy proxy IX a proxy ISP) i por\u00f3wnujemy z czasem zapyta\u0144 do chmury bez proxy:<\/p>\n<p><img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/ec01690f6a312e61649282b0e6208778.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJak wida\u0107, wyniki by\u0142y niejednoznaczne \u2014 w wi\u0119kszo\u015bci przypadk\u00f3w proxy zapewnia dobre przyspieszenie, ale istnieje r\u00f3wnie\u017c wystarczaj\u0105ca liczba klient\u00f3w, dla kt\u00f3rych sytuacja znacznie si\u0119 pogarsza. <\/p>\n<p>Ostatecznie zrobili\u015bmy kilka wa\u017cnych rzeczy:<\/p>\n<ol>\n<li>Ocenili\u015bmy oczekiwan\u0105 wydajno\u015b\u0107 zapyta\u0144 od klient\u00f3w do chmury przez proxy CDN.<\/li>\n<li>Uzyskali\u015bmy dane od rzeczywistych klient\u00f3w z r\u00f3\u017cnych typ\u00f3w urz\u0105dze\u0144.<\/li>\n<li>Zrozumieli\u015bmy, \u017ce teoria nie potwierdzi\u0142a si\u0119 w 100% i pocz\u0105tkowa propozycja z proxy CDN dla nas nie zadzia\u0142a.<\/li>\n<li>Nie ryzykowali\u015bmy \u2014 nie zmieniali\u015bmy konfiguracji produkcji dla klient\u00f3w.<\/li>\n<li>Nie zepsuli\u015bmy niczego. <\/li>\n<\/ol>\n<p><\/p>\n<h2>Prototyp 2.0<\/h2>\n<p>\nWr\u00f3\u0107my wi\u0119c do deski kre\u015blarskiej i powt\u00f3rzmy proces od nowa.<\/p>\n<p>Pomys\u0142 \u2014 zamiast 100% proxy dla ka\u017cdego klienta okre\u015blimy najszybsz\u0105 tras\u0119 i tam b\u0119dziemy kierowa\u0107 zapytania \u2014 czyli b\u0119dziemy robi\u0107 to, co nazywa si\u0119 klientem steering.<\/p>\n<p><img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/780817f48a4d2b292d5545e0aa1ccc50.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJak to zrealizowa\u0107? Nie mo\u017cemy u\u017cywa\u0107 logiki po stronie serwera, poniewa\u017c celem jest po\u0142\u0105czenie si\u0119 z tym serwerem. Nale\u017cy to jako\u015b zrealizowa\u0107 po stronie klienta. Idealnie, \u017ceby zrobi\u0107 to z minimaln\u0105 ilo\u015bci\u0105 skomplikowanej logiki, unikaj\u0105c problem\u00f3w z integracj\u0105 z szerok\u0105 gam\u0105 platform klienckich. <\/p>\n<p>Odpowiedzi\u0105 jest wykorzystanie DNS. W naszym przypadku mamy w\u0142asn\u0105 infrastruktur\u0119 DNS, i mo\u017cemy skonfigurowa\u0107 stref\u0119 domenow\u0105, dla kt\u00f3rej nasze serwery b\u0119d\u0105 autorytatywne. Dzia\u0142a to w ten spos\u00f3b:<\/p>\n<ol>\n<li>Klient wysy\u0142a zapytanie do serwera DNS, u\u017cywaj\u0105c hosta, na przyk\u0142ad api.netflix.com.<\/li>\n<li>Zapytanie trafia na nasz serwer DNS.<\/li>\n<li>Serwer DNS wie, kt\u00f3ra \u015bcie\u017cka dla tego klienta jest najszybsza i wydaje odpowiedni adres IP. <\/li>\n<\/ol>\n<p>\nW rozwi\u0105zaniu pojawia si\u0119 dodatkowa z\u0142o\u017cono\u015b\u0107: autorytatywne dostawcy DNS nie widz\u0105 adresu IP klienta i mog\u0105 dostrzega\u0107 tylko adres IP rekurencyjnego resolvera, kt\u00f3rego u\u017cywa klient. <\/p>\n<p>W rezultacie nasz autorytatywny resolver musi podejmowa\u0107 decyzje nie dla pojedynczego klienta, ale dla grupy klient\u00f3w na podstawie rekurencyjnego resolvera. <\/p>\n<p>Dla rozwi\u0105zania wykorzystujemy te same pr\u00f3by, agregujemy wyniki pomiar\u00f3w od klient\u00f3w z ka\u017cdego z rekurencyjnych resolver\u00f3w i decydujemy, dok\u0105d skierowa\u0107 t\u0119 grup\u0119 \u2014 przez IX za pomoc\u0105 TCP Anycast, przez proxy ISP lub bezpo\u015brednio do chmury.<\/p>\n<p>Otrzymujemy taki system:<\/p>\n<p><img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/ad23219938d1cb7b6eef498671c3e151.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUzyskany model sterowania DNS umo\u017cliwia kierowanie klient\u00f3w na podstawie historycznych obserwacji pr\u0119dko\u015bci po\u0142\u0105cze\u0144 od klient\u00f3w do chmury. <\/p>\n<p>Ponownie, pytanie \u2014 jak skutecznie sprawdzi si\u0119 takie podej\u015bcie? Aby na to odpowiedzie\u0107, ponownie wykorzystujemy nasz system pr\u00f3b. Dlatego konfigurujemy konfiguracj\u0119 recency, gdzie jeden z target\u00f3w kieruje si\u0119 w stron\u0119 sterowania DNS, a drugi \u2014 bezpo\u015brednio w chmur\u0119 (aktualna produkcja).<\/p>\n<p><img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/ceb2ded9367ebd0aa0ede46191a89a88.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa koniec por\u00f3wnujemy wyniki i uzyskujemy ocen\u0119 skuteczno\u015bci:<\/p>\n<p><img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/ca0db88461d5f2cb0f3f7c07eae14f10.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nW rezultacie poznali\u015bmy kilka wa\u017cnych rzeczy:<\/p>\n<ol>\n<li>Ocenili\u015bmy oczekiwan\u0105 wydajno\u015b\u0107 zapyta\u0144 od klient\u00f3w do chmury z wykorzystaniem DNS Steering.<\/li>\n<li>Uzyskali\u015bmy dane od rzeczywistych klient\u00f3w z r\u00f3\u017cnych typ\u00f3w urz\u0105dze\u0144.<\/li>\n<li>Udowodnili\u015bmy skuteczno\u015b\u0107 zaproponowanej idei.<\/li>\n<li>Nie ryzykowali\u015bmy \u2014 nie zmieniali\u015bmy konfiguracji produkcji dla klient\u00f3w.<\/li>\n<li>Nie zepsuli\u015bmy niczego.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Teraz do trudniejsze \u2014 uruchamiamy w produkcji.<\/h2>\n<p>\nNaj\u0142atwiejsze jest ju\u017c za nami \u2014 mamy dzia\u0142aj\u0105cy prototyp. Teraz trudna cz\u0119\u015b\u0107 \u2014 uruchomienie rozwi\u0105zania dla ca\u0142ego ruchu Netflix, wdro\u017cenie na 150 milionach u\u017cytkownik\u00f3w, tysi\u0105cach urz\u0105dze\u0144, setkach mikroserwis\u00f3w oraz ci\u0105gle zmieniaj\u0105cych si\u0119 produkt\u00f3w i infrastruktury. Na serwery Netflix wp\u0142ywaj\u0105 miliony zapyta\u0144 na sekund\u0119, a nieostro\u017cne dzia\u0142anie mo\u017ce \u0142atwo z\u0142ama\u0107 us\u0142ug\u0119. Chcemy jednocze\u015bnie dynamicznie kierowa\u0107 ruch przez tysi\u0105ce serwer\u00f3w CDN, w internecie, gdzie co\u015b si\u0119 zmienia i psuje stale w najgorszym momencie. <\/p>\n<p>I mimo to w zespole s\u0105 3 in\u017cynierowie odpowiedzialni za rozw\u00f3j, wdro\u017cenie i pe\u0142ne wsparcie systemu.<\/p>\n<p>Zatem dalej porozmawiamy o spokojnym i zdrowym \u015bnie.<\/p>\n<p>Jak kontynuowa\u0107 rozw\u00f3j, a nie traci\u0107 ca\u0142ego czasu na wsparcie? Podstaw\u0105 naszego podej\u015bcia s\u0105 3 zasady:<\/p>\n<ol>\n<li>Minimalizujemy potencjalny zakres awarii (blast radius). <\/li>\n<li>Przygotowujemy si\u0119 na niespodzianki \u2014 spodziewamy si\u0119, \u017ce co\u015b si\u0119 popsuje, mimo test\u00f3w i osobistego do\u015bwiadczenia.<\/li>\n<li>Stopniowa degradacja (graceful degradation) \u2014 je\u015bli co\u015b nie dzia\u0142a, powinno by\u0107 naprawiane automatycznie, nawet je\u015bli nie w najskuteczniejszy spos\u00f3b.<\/li>\n<\/ol>\n<p>\nOkaza\u0142o si\u0119, \u017ce w naszym przypadku, przy takim podej\u015bciu do problemu, mo\u017cna znale\u017a\u0107 proste i skuteczne rozwi\u0105zanie oraz znacznie upro\u015bci\u0107 wsparcie systemu. Zrozumieli\u015bmy, \u017ce mo\u017cemy doda\u0107 do klienta ma\u0142y fragment kodu, kt\u00f3ry b\u0119dzie monitorowa\u0142 b\u0142\u0119dy zapyta\u0144 sieciowych spowodowane problemami z po\u0142\u0105czeniem. W przypadku b\u0142\u0119d\u00f3w sieciowych dokonujemy fallbacku bezpo\u015brednio do chmury. Takie rozwi\u0105zanie nie wymaga znacznych wysi\u0142k\u00f3w ze strony zespo\u0142\u00f3w klienckich, ale znacznie zmniejsza ryzyko niespodziewanych awarii i niespodzianek dla nas.<\/p>\n<p>Oczywi\u015bcie pomimo fallbacku, przestrzegamy jasnej dyscypliny w trakcie rozwoju:<\/p>\n<ol>\n<li>Test na pr\u00f3bkach.<\/li>\n<li>Testy A\/B lub Canaries.<\/li>\n<li>Stopniowe wdro\u017cenie (progressive rollout).<\/li>\n<\/ol>\n<p>\nPodej\u015bcie do test\u00f3w na pr\u00f3bkach zosta\u0142o opisane \u2014 zmiany s\u0105 najpierw testowane za pomoc\u0105 dostosowanego przepisu.<\/p>\n<p>Aby przeprowadzi\u0107 testy canary, potrzebujemy uzyska\u0107 por\u00f3wnywalne pary serwer\u00f3w, na kt\u00f3rych mo\u017cna por\u00f3wna\u0107, jak dzia\u0142a system przed i po zmianach. W tym celu z naszych licznych witryn CDN losujemy pary serwer\u00f3w, kt\u00f3re otrzymuj\u0105 por\u00f3wnywalny ruch:<\/p>\n<p><img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/eef504f5c81aa985b78339fd5f913d14.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNast\u0119pnie wdra\u017camy zmiany na serwery Canary. Aby oceni\u0107 wyniki, uruchamiamy system, kt\u00f3ry por\u00f3wnuje oko\u0142o 100-150 metryk z grup\u0105 kontrolnych serwer\u00f3w:<\/p>\n<p><img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/898edb0a5bd493d6ef228cd116c1a939.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJe\u015bli testowanie na Canarze przebieg\u0142o pomy\u015blnie, wprowadzamy wydanie stopniowo, falami. Na ka\u017cdym z serwis\u00f3w nie aktualizujemy serwer\u00f3w jednocze\u015bnie \u2014 utrata ca\u0142ej strony w przypadku problem\u00f3w ma znacznie wi\u0119kszy wp\u0142yw na us\u0142ugi dla u\u017cytkownik\u00f3w ni\u017c utrata takiej samej liczby serwer\u00f3w, ale w r\u00f3\u017cnych miejscach.<\/p>\n<p>Og\u00f3lnie skuteczno\u015b\u0107 i bezpiecze\u0144stwo takiego podej\u015bcia zale\u017c\u0105 od liczby i jako\u015bci zebranych metryk. W naszym systemie przyspieszania zapyta\u0144 zbieramy metryki ze wszystkich mo\u017cliwych komponent\u00f3w: <\/p>\n<ul>\n<li>od klient\u00f3w \u2014 liczba sesji i zapyta\u0144, wska\u017aniki fallback; <\/li>\n<li>proxy \u2014 statystyki dotycz\u0105ce liczby i czasu zapyta\u0144;<\/li>\n<li>DNS \u2014 liczba i wyniki zapyta\u0144;<\/li>\n<li>cloud edge \u2014 liczba oraz czas przetwarzania zapyta\u0144 w chmurze.<\/li>\n<\/ul>\n<p>\nWszystko to zbierane jest w jedn\u0105 lini\u0119 przetwarzania, a w zale\u017cno\u015bci od potrzeb decydujemy, kt\u00f3re metryki wys\u0142a\u0107 do analityki w czasie rzeczywistym, a kt\u00f3re do Elasticsearch lub Big Data w celu dok\u0142adniejszej diagnostyki.<\/p>\n<h2>Monitorujemy<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/ff8b00b1239a20f85e96ce23c2d7c2d0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nW naszym przypadku wprowadzamy zmiany w krytycznej \u015bcie\u017cce zapyta\u0144 mi\u0119dzy klientem a serwerem. Liczba r\u00f3\u017cnych komponent\u00f3w po stronie klienta, serwera oraz na drodze przez internet jest ogromna. Zmiany po stronie klienta i serwera zachodz\u0105 nieustannie \u2014 w trakcie pracy dziesi\u0105tek zespo\u0142\u00f3w oraz naturalnych zmian w ekosystemie. Jeste\u015bmy po\u015brodku \u2014 podczas diagnostyki problem\u00f3w istnieje du\u017ce prawdopodobie\u0144stwo, \u017ce b\u0119dziemy w to zaanga\u017cowani. Dlatego musimy jasno rozumie\u0107, jak definiowa\u0107, zbiera\u0107 i analizowa\u0107 metryki w celu szybkiej lokalizacji problem\u00f3w. <\/p>\n<p>Idealnie \u2014 pe\u0142ny dost\u0119p do wszystkich rodzaj\u00f3w metryk i filtr\u00f3w w czasie rzeczywistym. Ale metryk jest bardzo wiele, wi\u0119c pojawia si\u0119 pytanie o koszty. W naszym przypadku dzielimy metryki i narz\u0119dzia developerskie w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<p><img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/0b4a15776f3b44331652adc14ea87390.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDo wykrywania i triage problem\u00f3w u\u017cywamy naszego w\u0142asnego systemu w czasie rzeczywistym z otwartym kodem <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Netflix\/atlas\">Atlas<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"https:\/\/netflixtechblog.com\/lumen-custom-self-service-dashboarding-for-netflix-8c56b541548c\">Lumen<\/a><\/noindex> \u2014 do wizualizacji. Przechowuje zagregowane metryki w pami\u0119ci, jest niezawodny i integruje si\u0119 z systemem powiadamiania. Do lokalizacji i diagnostyki mamy dost\u0119p do log\u00f3w z Elasticsearch i Kibana. Do analizy statystycznej i modelowania wykorzystujemy big data i wizualizacj\u0119 w Tableau.<\/p>\n<p>Wydaje si\u0119, \u017ce z takim podej\u015bciem bardzo trudno jest pracowa\u0107. Jednak przy hierarchicznej organizacji metryk i narz\u0119dzi mo\u017cemy szybko przeanalizowa\u0107 problem, okre\u015bli\u0107 jego typ, a nast\u0119pnie zej\u015b\u0107 do szczeg\u00f3\u0142owych metryk. Na zidentyfikowanie \u017ar\u00f3d\u0142a awarii zazwyczaj po\u015bwi\u0119camy oko\u0142o 1-2 minut. Po tym ju\u017c wsp\u00f3\u0142pracujemy z konkretnym zespo\u0142em nad diagnoz\u0105 \u2014 od kilku dziesi\u0119ciu minut do kilku godzin.<\/p>\n<p>Nawet je\u015bli diagnostyka odbywa si\u0119 szybko, nie chcemy, aby zdarza\u0142o si\u0119 to zbyt cz\u0119sto. W idealnym przypadku chcieliby\u015bmy otrzymywa\u0107 krytyczne powiadomienia tylko wtedy, gdy ma to znacz\u0105cy wp\u0142yw na us\u0142ug\u0119. Dla naszego systemu przyspieszania zapyta\u0144 mamy tylko 2 powiadomienia, kt\u00f3re b\u0119d\u0105 informowa\u0107:<\/p>\n<ul>\n<li>procent Client Fallback \u2014 ocena zachowania klient\u00f3w;<\/li>\n<li>procent Probe errors \u2014 dane o stabilno\u015bci komponent\u00f3w sieciowych.<\/li>\n<\/ul>\n<p>\nTe krytyczne powiadomienia monitoruj\u0105, czy system dzia\u0142a dla wi\u0119kszo\u015bci u\u017cytkownik\u00f3w. Sprawdzamy, ile klient\u00f3w skorzysta\u0142o z fallback, je\u015bli nie mogli uzyska\u0107 przyspieszenia zapyta\u0144. \u015arednio mamy mniej ni\u017c 1 krytyczne powiadomienie w tygodniu, mimo ogromnej liczby zmian w systemie. Dlaczego to wystarcza?<\/p>\n<ol>\n<li>Wyst\u0119puje client fallback w przypadku, gdy nasza proxy nie dzia\u0142a.<\/li>\n<li>Istnieje automatyczny system kierowania, kt\u00f3ry reaguje na problemy.<\/li>\n<\/ol>\n<p>\nO tym ostatnim wi\u0119cej. Nasz system probe oraz system automatycznego okre\u015blania optymalnej \u015bcie\u017cki dla zapyta\u0144 od klienta do chmury umo\u017cliwiaj\u0105 automatyczne radzenie sobie z niekt\u00f3rymi problemami. <\/p>\n<p>Wracaj\u0105c do naszej konfiguracji probe i 3 kategorii \u015bcie\u017cek. Opr\u00f3cz czasu \u0142adowania mo\u017cemy sprawdza\u0107 sam fakt dostarczenia. Je\u015bli nie uda\u0142o si\u0119 za\u0142adowa\u0107 danych, patrz\u0105c na wyniki r\u00f3\u017cnych \u015bcie\u017cek mo\u017cemy okre\u015bli\u0107, gdzie i co si\u0119 zepsu\u0142o, a tak\u017ce czy mo\u017cemy to naprawi\u0107 automatycznie, zmieniaj\u0105c \u015bcie\u017ck\u0119 zapytania.<\/p>\n<p>Przyk\u0142ady:<\/p>\n<p><img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/7d935da82aaca53af87f05fbdf215c4c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/f74ef9d3de953099921a68fbc65cb187.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/3c77cbd47813d3320efbf339a0690c53.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTen proces mo\u017cna zautomatyzowa\u0107. W\u0142\u0105czy\u0107 go do systemu kierowania. I nauczy\u0107 go reagowa\u0107 na problemy z wydajno\u015bci\u0105 i niezawodno\u015bci\u0105. Je\u015bli co\u015b zaczyna si\u0119 psu\u0107 \u2014 reagowa\u0107, je\u015bli jest lepsza opcja. Przy tym natychmiastowa reakcja nie jest krytyczna, dzi\u0119ki fallbackowi na klientach.<\/p>\n<p>W ten spos\u00f3b zasady wsparcia systemu mo\u017cna sformu\u0142owa\u0107 nast\u0119puj\u0105co:<\/p>\n<ul>\n<li>zmniejszamy skal\u0119 awarii;<\/li>\n<li>zbieramy metryki;<\/li>\n<li>automatycznie naprawiamy awarie, je\u015bli to mo\u017cliwe;<\/li>\n<li>je\u015bli to niemo\u017cliwe \u2014 informujemy;<\/li>\n<li>pracujemy nad dashboardami i zestawem narz\u0119dzi triage, aby szybko reagowa\u0107.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Wyci\u0105gni\u0119te lekcje<\/h2>\n<p>\nNie potrzeba du\u017co czasu na napisanie prototypu. W naszym przypadku by\u0142 gotowy ju\u017c po 4 miesi\u0105cach. Dzi\u0119ki niemu uzyskali\u015bmy nowe metryki, a po 10 miesi\u0105cach od rozpocz\u0119cia prac otrzymali\u015bmy pierwszy ruch produkcyjny. Nast\u0119pnie zacz\u0119\u0142a si\u0119 nu\u017c\u0105ca i bardzo skomplikowana praca: stopniowe wprowadzenie produktu na rynek i skalowanie systemu, migracja g\u0142\u00f3wnego ruchu i uczenie si\u0119 na b\u0142\u0119dach. Przy tym skuteczny proces nie b\u0119dzie liniowy \u2014 mimo wszelkich stara\u0144, nie mo\u017cna wszystkiego przewidzie\u0107. O wiele bardziej skuteczna jest szybka iteracja i reagowanie na nowe dane. <\/p>\n<p><img decoding=\"async\" alt=\"Przyspieszamy \u017c\u0105dania internetowe i \u015bpimy spokojnie\" src=\"\/wp-content\/uploads\/2020\/06\/c9c182a1a4fa048b1f1b2a82a4db65e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa podstawie naszego do\u015bwiadczenia mo\u017cemy poleci\u0107 nast\u0119puj\u0105ce:<\/p>\n<ol>\n<li>Nie wierzcie intuicji.\n<p>Nasza intuicja nieustannie nas zawodzi\u0142a, mimo ogromnego do\u015bwiadczenia cz\u0142onk\u00f3w zespo\u0142u. Na przyk\u0142ad b\u0142\u0119dnie przewidywali\u015bmy oczekiwane przyspieszenie korzystania z proxy CDN, czy zachowanie TCP Anycast.<\/li>\n<li>Pozyskujcie dane z produkcji.\n<p>Wa\u017cne jest, aby jak najszybciej uzyska\u0107 dost\u0119p chocia\u017c do niewielkiej ilo\u015bci danych produkcyjnych. Liczba unikalnych przypadk\u00f3w, konfiguracji, ustawie\u0144 w warunkach laboratoryjnych jest praktycznie niemo\u017cliwa do osi\u0105gni\u0119cia. Szybki dost\u0119p do wynik\u00f3w pozwoli szybciej wykry\u0107 potencjalne problemy i uwzgl\u0119dni\u0107 je w architekturze systemu.<\/li>\n<li>Nie pod\u0105\u017cajcie za cudzymi radami i wynikami \u2014 zbierajcie swoje dane.\n<p>Stosujcie zasady dotycz\u0105ce zbierania i analizy danych, ale nie przyjmujcie bezkrytycznie cudzych wynik\u00f3w i stwierdze\u0144. Tylko wy mo\u017cecie dok\u0142adnie wiedzie\u0107, co dzia\u0142a dla waszych u\u017cytkownik\u00f3w. Wasze systemy i klienci mog\u0105 znacznie r\u00f3\u017cni\u0107 si\u0119 od innych firm. Na szcz\u0119\u015bcie narz\u0119dzia do analizy s\u0105 obecnie dost\u0119pne i \u0142atwe w u\u017cyciu. Wasze wyniki mog\u0105 nie zgadza\u0107 si\u0119 z tym, co twierdzi Netflix, Facebook, Akamai i inne firmy. W naszym przypadku wydajno\u015b\u0107 TLS, HTTP2 czy statystyki dotycz\u0105ce zapyta\u0144 DNS r\u00f3\u017cni\u0105 si\u0119 od wynik\u00f3w Facebooka, Ubera, Akamai \u2014 poniewa\u017c mamy inne urz\u0105dzenia, klient\u00f3w i przep\u0142ywy danych.<\/li>\n<li>Nie d\u0105\u017ccie do modnych trend\u00f3w bez potrzeby i oceny efektywno\u015bci.\n<p>Zaczynajcie od prostego. Lepiej stworzy\u0107 prosty dzia\u0142aj\u0105cy system w kr\u00f3tkim czasie, ni\u017c sp\u0119dzi\u0107 ogromn\u0105 ilo\u015b\u0107 czasu na rozwijaniu niepotrzebnych wam komponent\u00f3w. Rozwi\u0105zujcie zadania i problemy, kt\u00f3re s\u0105 wa\u017cne na podstawie waszych pomiar\u00f3w i wynik\u00f3w. <\/li>\n<li>B\u0105d\u017a gotowy na nowe zastosowania.\n<p>Tak jak trudno przewidzie\u0107 wszystkie problemy \u2014 trudno r\u00f3wnie\u017c z wyprzedzeniem przewidzie\u0107 zalety i zastosowania. We\u017a przyk\u0142ad ze startup\u00f3w \u2014 ich zdolno\u015b\u0107 do dostosowywania si\u0119 do potrzeb klient\u00f3w. W twoim przypadku \u2014 mo\u017cesz odkrywa\u0107 nowe problemy i ich rozwi\u0105zania. W naszym projekcie postawili\u015bmy sobie za cel zmniejszenie op\u00f3\u017anienia zapyta\u0144. Jednak w trakcie analizy i dyskusji zrozumieli\u015bmy, \u017ce serwery proxy mo\u017cemy r\u00f3wnie\u017c stosowa\u0107:<\/p>\n<ul>\n<li>do r\u00f3wnowa\u017cenia ruchu w regionach AWS, oraz redukcji koszt\u00f3w;<\/li>\n<li>do modelowania stabilno\u015bci CDN;<\/li>\n<li>do konfigurowania DNS;<\/li>\n<li>do konfigurowania TLS\/TCP.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><\/p>\n<h2>Podsumowanie<\/h2>\n<p>\nW raporcie opisa\u0142em, jak Netflix rozwi\u0105zuje problem przyspieszania zapyta\u0144 internetowych mi\u0119dzy klientami a chmur\u0105. Jak zbieramy dane z wykorzystaniem systemu pr\u00f3b na klientach i wykorzystujemy zebrane dane historyczne do kierowania zapyta\u0144 produkcyjnych od klient\u00f3w przez najszybsz\u0105 tras\u0119 w internecie. Jak wykorzystujemy zasady dzia\u0142ania protoko\u0142\u00f3w sieciowych, nasz\u0105 infrastruktur\u0119 CDN, sie\u0107 backbone i serwery DNS, aby osi\u0105gn\u0105\u0107 ten cel.<\/p>\n<p>Jednak nasze rozwi\u0105zanie to tylko przyk\u0142ad tego, jak w Netflix wdro\u017cyli\u015bmy taki system. Co zadzia\u0142a\u0142o dla nas. Praktyczna cz\u0119\u015b\u0107 mojego raportu dla Ciebie \u2014 zasady projektowania i utrzymywania, kt\u00f3rych przestrzegamy i dzi\u0119ki kt\u00f3rym osi\u0105gamy dobre wyniki.<\/p>\n<p>Nasze rozwi\u0105zanie problemu mo\u017ce nie pasowa\u0107 do Ciebie. Jednak teoria i zasady projektowania pozostaj\u0105, nawet je\u015bli nie masz w\u0142asnej infrastruktury CDN lub je\u015bli znacznie r\u00f3\u017cni si\u0119 ona od naszej. <\/p>\n<p>Wa\u017cy r\u00f3wnie\u017c pozostaje znaczenie szybko\u015bci zapyta\u0144 dla biznesu. Nawet dla prostego serwisu nale\u017cy podejmowa\u0107 decyzje: mi\u0119dzy dostawcami \u201echmurowymi\u201d, lokalizacj\u0105 serwer\u00f3w, dostawcami CDN i DNS. Tw\u00f3j wyb\u00f3r wp\u0142ynie na efektywno\u015b\u0107 zapyta\u0144 internetowych dla twoich klient\u00f3w. Wa\u017cne jest, aby mierzy\u0107 i rozumie\u0107 ten wp\u0142yw.<\/p>\n<p>Zacznij od prostych rozwi\u0105za\u0144, dbaj o to, jak zmieniasz produkt. Ucz si\u0119 w trakcie procesu i doskonal system na podstawie danych od swoich klient\u00f3w, swojej infrastruktury i swojego biznesu. My\u015bl o mo\u017cliwo\u015bci nieoczekiwanych awarii w procesie projektowania. Wtedy b\u0119dziesz m\u00f3g\u0142 przyspieszy\u0107 sw\u00f3j proces rozwoju, poprawi\u0107 efektywno\u015b\u0107 rozwi\u0105zania, unikn\u0105\u0107 nadmiernego obci\u0105\u017cenia wsparcia i spa\u0107 spokojnie.<\/p>\n<blockquote><p>W tym roku <noindex><a rel=\"nofollow\" href=\"http:\/\/devoops-moscow.ru\/?utm_source=habr&amp;utm_medium=506106\">konferencja odb\u0119dzie si\u0119 od 6 do 10 lipca<\/a><\/noindex> w formacie online. B\u0119dzie mo\u017cna zada\u0107 pytania jednemu z ojc\u00f3w DevOps, samemu Johnowi Willisowi!<\/p><\/blockquote>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/jugru\/blog\/506106\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>Netflix \u2014 \u043b\u0438\u0434\u0435\u0440 \u0440\u044b\u043d\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0442\u0435\u043b\u0435\u0432\u0438\u0434\u0435\u043d\u0438\u044f \u2014 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f, \u0441\u043e\u0437\u0434\u0430\u0432\u0448\u0430\u044f \u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0449\u0430\u044f \u044d\u0442\u043e\u0442 \u0441\u0435\u0433\u043c\u0435\u043d\u0442. Netflix \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u0448\u0438\u0440\u043d\u044b\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u043c \u043a\u0438\u043d\u043e \u0438 \u0441\u0435\u0440\u0438\u0430\u043b\u043e\u0432, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441 \u043f\u043e\u0447\u0442\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0443\u0433\u043e\u043b\u043a\u0430 \u043f\u043b\u0430\u043d\u0435\u0442\u044b \u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c, \u043d\u043e \u0438 \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u043e\u0439 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u043e\u0439. \u041d\u0430\u0433\u043b\u044f\u0434\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 Netflix \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u043d\u0430 DevOops 2019 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":84877,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-84876","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=\"Netflix \u2014 \u043b\u0438\u0434\u0435\u0440 \u0440\u044b\u043d\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0442\u0435\u043b\u0435\u0432\u0438\u0434\u0435\u043d\u0438\u044f \u2014.\" \/>\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\/uskoryaem-internet-zaprosy-i-spim-spokojno\" \/>\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\u0423\u0441\u043a\u043e\u0440\u044f\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u0441\u043f\u0438\u043c \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"Netflix \u2014 \u043b\u0438\u0434\u0435\u0440 \u0440\u044b\u043d\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0442\u0435\u043b\u0435\u0432\u0438\u0434\u0435\u043d\u0438\u044f \u2014.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/uskoryaem-internet-zaprosy-i-spim-spokojno\" \/>\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=\"2020-06-11T11:43:18+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-06-11T11:43:18+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\udd47 Przyspieszamy zapytania internetowe i \u015bpimy spokojnie | ProHoster","description":"Netflix \u2014 lider rynku telewizji internetowej \u2014.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/uskoryaem-internet-zaprosy-i-spim-spokojno","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\u0423\u0441\u043a\u043e\u0440\u044f\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u0441\u043f\u0438\u043c \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e | ProHoster","og:description":"Netflix \u2014 \u043b\u0438\u0434\u0435\u0440 \u0440\u044b\u043d\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0442\u0435\u043b\u0435\u0432\u0438\u0434\u0435\u043d\u0438\u044f \u2014.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/uskoryaem-internet-zaprosy-i-spim-spokojno","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":"2020-06-11T11:43:18+00:00","article:modified_time":"2020-06-11T11:43:18+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"84876","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 14:48:22","updated":"2022-09-27 23:34:06","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\/84876","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=84876"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/84876\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/84877"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=84876"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=84876"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=84876"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}