{"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\/cs\/blog\/administrirovanie\/uskoryaem-internet-zaprosy-i-spim-spokojno","title":{"rendered":"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/07e2e32d406b8b5d6d6cb3f627a31c3a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNetflix \u2014 l\u00eddr na trhu internetov\u00e9ho televizn\u00edho vys\u00edl\u00e1n\u00ed \u2014 spole\u010dnost, kter\u00e1 vytvo\u0159ila a aktivn\u011b rozv\u00edj\u00ed tento segment. Netflix je zn\u00e1m\u00fd nejen rozs\u00e1hl\u00fdm katalogem film\u016f a seri\u00e1l\u016f dostupn\u00fdch t\u00e9m\u011b\u0159 z jak\u00e9hokoli m\u00edsta na sv\u011bt\u011b a na jak\u00e9mkoli za\u0159\u00edzen\u00ed s displejem, ale tak\u00e9 spolehlivou infrastrukturou a unik\u00e1tn\u00ed in\u017een\u00fdrskou kulturou. <\/p>\n<p>P\u0159\u00edklad p\u0159\u00edstupu Netflixu k v\u00fdvoji a podpo\u0159e slo\u017eit\u00fdch syst\u00e9m\u016f p\u0159edstavil <noindex><a rel=\"nofollow\" href=\"https:\/\/sfedov.com\">Sergej Fedorov<\/a><\/noindex> \u2014 \u0159editel pro v\u00fdvoj v Netflixu. Absolvent Fakulty v\u00fdpo\u010detn\u00ed techniky NNGU im. Lobachevsk\u00e9ho, Sergej je jedn\u00edm z prvn\u00edch in\u017een\u00fdr\u016f v Open Connect \u2014 CDN t\u00fdmu v Netflixu. Vytvo\u0159il syst\u00e9my pro monitorov\u00e1n\u00ed a anal\u00fdzu videodat, spustil popul\u00e1rn\u00ed slu\u017ebu pro m\u011b\u0159en\u00ed rychlosti internetov\u00e9ho p\u0159ipojen\u00ed FAST.com a posledn\u00edch n\u011bkolik let pracuje na optimalizaci internetov\u00fdch po\u017eadavk\u016f, aby aplikace Netflix fungovala co nejrychleji pro u\u017eivatele.<\/p>\n<p>Prezentace z\u00edskala nejlep\u0161\u00ed hodnocen\u00ed od \u00fa\u010dastn\u00edk\u016f konference a p\u0159ipravili jsme pro v\u00e1s textovou verzi.<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=\"P\u0159ehr\u00e1t video\" 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>V prezentaci Sergej podrobn\u011b hovo\u0159il<\/h2>\n<p><\/p>\n<ul>\n<li>o tom, co ovliv\u0148uje zpo\u017ed\u011bn\u00ed internetov\u00fdch po\u017eadavk\u016f mezi klientem a serverem;<\/li>\n<li>jak toto zpo\u017ed\u011bn\u00ed sn\u00ed\u017eit;<\/li>\n<li>jak navrhovat, udr\u017eovat a monitorovat odoln\u00e9 syst\u00e9my proti chyb\u00e1m;<\/li>\n<li>jak dosahovat v\u00fdsledk\u016f ve zkr\u00e1cen\u00fdch \u010dasov\u00fdch lh\u016ft\u00e1ch a s minim\u00e1ln\u00edm rizikem pro podnik\u00e1n\u00ed;<\/li>\n<li>jak analyzovat v\u00fdsledky a u\u010dit se na chyb\u00e1ch.<\/li>\n<\/ul>\n<p>\nOdpov\u011bdi na tyto ot\u00e1zky jsou pot\u0159ebn\u00e9 nejen t\u011bm, kte\u0159\u00ed pracuj\u00ed ve velk\u00fdch korporac\u00edch. <\/p>\n<p>P\u0159edlo\u017een\u00e9 principy a techniky by m\u011bl zn\u00e1t a praktikusovat ka\u017ed\u00fd, kdo vyv\u00edj\u00ed a podporuje internetov\u00e9 produkty.<\/p>\n<p><b>D\u00e1le \u2014 vypr\u00e1v\u011bn\u00ed z pohledu \u0159e\u010dn\u00edka.<\/b><\/p>\n<h2>D\u016fle\u017eitost rychlosti internetu<\/h2>\n<p>\nRychlost internetov\u00fdch po\u017eadavk\u016f je p\u0159\u00edmo spojena s podnik\u00e1n\u00edm. Zva\u017eme oblast nakupov\u00e1n\u00ed: spole\u010dnost Amazon v roce 2009 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.gigaspaces.com\/blog\/amazon-found-every-100ms-of-latency-cost-them-1-in-sales\/\">\u0159\u00edkala<\/a><\/noindex>, \u017ee zpo\u017ed\u011bn\u00ed o 100 ms vede ke ztr\u00e1t\u011b 1% prodeje.<\/p>\n<p>Po\u010det mobiln\u00edch za\u0159\u00edzen\u00ed st\u00e1le roste, a s nimi tak\u00e9 mobiln\u00ed weby a aplikace. Pokud se va\u0161e str\u00e1nka na\u010d\u00edt\u00e1 d\u00e9le ne\u017e 3 sekundy, ztr\u00e1c\u00edte p\u0159ibli\u017en\u011b polovinu u\u017eivatel\u016f. Od <noindex><a rel=\"nofollow\" href=\"https:\/\/webmasters.googleblog.com\/2018\/01\/using-page-speed-in-mobile-search.html\">\u010dervence 2018<\/a><\/noindex> Google bere v \u00favahu rychlost na\u010d\u00edt\u00e1n\u00ed va\u0161\u00ed str\u00e1nky p\u0159i vyhled\u00e1v\u00e1n\u00ed: \u010d\u00edm rychleji se str\u00e1nka na\u010d\u00edt\u00e1, t\u00edm vy\u0161\u0161\u00ed je jej\u00ed pozice v Google.<\/p>\n<p>Rychlost p\u0159ipojen\u00ed je tak\u00e9 d\u016fle\u017eit\u00e1 ve finan\u010dn\u00edch instituc\u00edch, kde je zpo\u017ed\u011bn\u00ed kritick\u00e9. V roce 2015 spole\u010dnost 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\">ukon\u010dila<\/a><\/noindex> polo\u017eka kabelu mezi New Yorkem a Lond\u00fdnem v hodnot\u011b 400 milion\u016f dolar\u016f, kter\u00e1 m\u00e1 sn\u00ed\u017eit latenci mezi m\u011bsty o 6 ms. P\u0159edstavte si, 66 milion\u016f dolar\u016f za 1 ms sn\u00ed\u017een\u00ed latence!<\/p>\n<p>Podle <noindex><a rel=\"nofollow\" href=\"https:\/\/hpbn.co\/primer-on-web-performance\/\">v\u00fdzkumu<\/a><\/noindex>, rychlost p\u0159ipojen\u00ed nad 5 Mbit\/s p\u0159est\u00e1v\u00e1 m\u00edt p\u0159\u00edm\u00fd vliv na rychlost na\u010d\u00edt\u00e1n\u00ed typick\u00e9 webov\u00e9 str\u00e1nky. Nicm\u00e9n\u011b existuje line\u00e1rn\u00ed z\u00e1vislost mezi latenc\u00ed p\u0159ipojen\u00ed a rychlost\u00ed na\u010d\u00edt\u00e1n\u00ed str\u00e1nky:<\/p>\n<p><img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/340ca1f2c5bdd6ca95a5caf02f67e3fd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNetflix v\u0161ak nen\u00ed typick\u00fd produkt. Vliv latence a rychlosti na u\u017eivatele je aktivn\u00ed oblast\u00ed anal\u00fdzy a v\u00fdvoje. Existuje na\u010d\u00edt\u00e1n\u00ed aplikace a v\u00fdb\u011br obsahu, kter\u00e9 z\u00e1vis\u00ed na latenci, ale na\u010d\u00edt\u00e1n\u00ed statick\u00fdch prvk\u016f a streaming tak\u00e9 z\u00e1vis\u00ed na rychlosti p\u0159ipojen\u00ed. Anal\u00fdza a optimalizace kl\u00ed\u010dov\u00fdch faktor\u016f ovliv\u0148uj\u00edc\u00edch kvalitu slu\u017eby pro u\u017eivatele je aktivn\u00ed oblast\u00ed v\u00fdvoje n\u011bkolika t\u00fdm\u016f v Netflixu. Jedn\u00edm z \u00fakol\u016f je sn\u00ed\u017een\u00ed latence po\u017eadavk\u016f mezi za\u0159\u00edzen\u00edmi Netflix a cloudovou infrastrukturou.<\/p>\n<p>Ve zpr\u00e1v\u011b se zam\u011b\u0159\u00edme zejm\u00e9na na sn\u00ed\u017een\u00ed latence (latency) na p\u0159\u00edkladu infrastruktury Netflix. Uvid\u00edme, jak p\u0159istupovat k proces\u016fm n\u00e1vrhu, v\u00fdvoje a provozu slo\u017eit\u00fdch distribuovan\u00fdch syst\u00e9m\u016f a tr\u00e1vit \u010das inovacemi a v\u00fdsledky, nikoli diagnostikou provozn\u00edch probl\u00e9m\u016f a poruch.<\/p>\n<h2>Uvnit\u0159 Netflixu<\/h2>\n<p>\nTis\u00edce r\u016fzn\u00fdch za\u0159\u00edzen\u00ed podporuj\u00ed aplikace Netflix. Na jejich v\u00fdvoji pracuj\u00ed \u010dty\u0159i r\u016fzn\u00e9 t\u00fdmy, kter\u00e9 vytv\u00e1\u0159ej\u00ed samostatn\u00e9 verze klienta pro Android, iOS, TV a webov\u00e9 prohl\u00ed\u017ee\u010de. A my velmi investujeme do vylep\u0161en\u00ed a personalizace u\u017eivatelsk\u00e9ho rozhran\u00ed. Za t\u00edmto \u00fa\u010delem prov\u00e1d\u00edme sou\u010dasn\u011b stovky A\/B test\u016f.<\/p>\n<p>Personalizace je podporov\u00e1na stovkami mikroslu\u017eeb v cloudu AWS, kter\u00e9 poskytuj\u00ed personalizovan\u00e1 data pro u\u017eivatele, zpracov\u00e1n\u00ed po\u017eadavk\u016f, telemetrii, Big Data a Encoding. Vizualizace provozu vypad\u00e1 takto:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/n7Te9WIz1ho?t=364\">Odkaz na video s demonstrac\u00ed (6:04-6:23)<\/a><\/noindex><\/p>\n<p>Vlevo se nach\u00e1z\u00ed bod vstupu, a pot\u00e9 se provoz distribuuje mezi n\u011bkolika stovkami mikroslu\u017eeb, kter\u00e9 podporuj\u00ed r\u016fzn\u00e9 backend t\u00fdmy.<\/p>\n<p>Dal\u0161\u00ed d\u016fle\u017eitou sou\u010d\u00e1st\u00ed na\u0161\u00ed infrastruktury je Open Connect CDN, kter\u00e1 doru\u010duje statick\u00fd obsah koncov\u00e9mu u\u017eivateli \u2014 videa, obr\u00e1zky, k\u00f3d pro klienty atd. CDN je um\u00edst\u011bna na zak\u00e1zkov\u00fdch serverech (OCA \u2014 Open Connect Appliance). Uvnit\u0159 jsou pole SSD a HDD disk\u016f spravovan\u00fdch optimalizovan\u00fdm FreeBSD, s NGINX a sadou slu\u017eeb. Navrhujeme a optimalizujeme hardwarov\u00e9 a softwarov\u00e9 komponenty tak, aby mohl tento CDN server pos\u00edlat co nejv\u00edce dat u\u017eivatel\u016fm. <\/p>\n<p>\u201eSt\u011bna\u201c t\u011bchto server\u016f na bod\u011b v\u00fdm\u011bny internetov\u00e9ho provozu (Internet eXchange \u2014 IX) vypad\u00e1 takto:<\/p>\n<p><img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/8155601c344acb1eb05b925193af8f9a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nInternet Exchange poskytuje mo\u017enost internetov\u00fdm poskytovatel\u016fm a dodavatel\u016fm obsahu \u201ep\u0159ipojit se\u201c navz\u00e1jem pro p\u0159\u00edm\u011bj\u0161\u00ed v\u00fdm\u011bnu dat na internetu. Po cel\u00e9m sv\u011bt\u011b je p\u0159ibli\u017en\u011b 70-80 Internet Exchange bod\u016f, kde jsou um\u00edst\u011bny na\u0161e servery, a my se o jejich instalaci a \u00fadr\u017ebu postar\u00e1me sami:<\/p>\n<p><img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/77a2465314e47c0b2c90dbf7a2fb5e6b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKrom\u011b toho tak\u00e9 poskytujeme servery p\u0159\u00edmo internetov\u00fdm poskytovatel\u016fm, kte\u0159\u00ed je instaluj\u00ed do sv\u00e9 s\u00edt\u011b, \u010d\u00edm\u017e zlep\u0161uj\u00ed lokalizaci Netflix provozu a kvalitu streamingu pro u\u017eivatele:<\/p>\n<p><img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/63e077d2649bfafea5c7af43a0faaf85.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSada slu\u017eeb AWS je zodpov\u011bdn\u00e1 za sm\u011brov\u00e1n\u00ed video po\u017eadavk\u016f od klient\u016f k CDN server\u016fm, stejn\u011b jako za konfiguraci samotn\u00fdch server\u016f \u2014 aktualizaci obsahu, software, nastaven\u00ed atd. K tomu jsme tak\u00e9 vybudovali backbone s\u00ed\u0165, kter\u00e1 propojuje servery v bod\u011b Internet Exchange s AWS. Backbone s\u00ed\u0165 p\u0159edstavuje glob\u00e1ln\u00ed s\u00ed\u0165 optick\u00fdch kabel\u016f a router\u016f, kter\u00e9 m\u016f\u017eeme navrhovat a konfigurovat podle na\u0161ich pot\u0159eb.<\/p>\n<p>Podle <noindex><a rel=\"nofollow\" href=\"https:\/\/www.sandvine.com\/hubfs\/Sandvine_Redesign_2019\/Downloads\/Internet%20Phenomena\/Internet%20Phenomena%20Report%20Q32019%2020190910.pdf\">hodnocen\u00ed Sandvine<\/a><\/noindex>, na\u0161e CDN infrastruktura doru\u010duje v dob\u011b \u0161pi\u010dky p\u0159ibli\u017en\u011b \u215b sv\u011btov\u00e9ho internetov\u00e9ho provozu a \u2153 provozu v Severn\u00ed Americe, kde Netflix existuje nejd\u00e9le. P\u016fsobiv\u00e1 \u010d\u00edsla, ale pro m\u011b jedn\u00edm z nej\u00fa\u017easn\u011bj\u0161\u00edch \u00fasp\u011bch\u016f je, \u017ee cel\u00fd syst\u00e9m CDN je vyv\u00edjen a udr\u017eov\u00e1n t\u00fdmem m\u00e9n\u011b ne\u017e 150 lid\u00ed.<\/p>\n<p>P\u016fvodn\u011b byla CDN infrastruktura navr\u017eena pro doru\u010dov\u00e1n\u00ed video dat. Postupem \u010dasu jsme v\u0161ak zjistili, \u017ee ji m\u016f\u017eeme vyu\u017e\u00edt tak\u00e9 pro optimalizaci dynamick\u00fdch po\u017eadavk\u016f od klient\u016f do AWS cloudu.<\/p>\n<h2>O zrychlen\u00ed internetu<\/h2>\n<p>\nDnes m\u00e1 Netflix 3 regiony AWS a zpo\u017ed\u011bn\u00ed po\u017eadavk\u016f v cloudu bude z\u00e1viset na tom, jak daleko je klient od nejbli\u017e\u0161\u00edho regionu. K tomu m\u00e1me \u0159adu server\u016f CDN, kter\u00e9 se pou\u017e\u00edvaj\u00ed pro dod\u00e1vku statick\u00e9ho obsahu. M\u016f\u017eeme n\u011bjak vyu\u017e\u00edt tuto infrastrukturu, abychom urychlili dynamick\u00e9 po\u017eadavky? Bohu\u017eel tyto po\u017eadavky nelze cacheovat \u2014 API jsou personalizovan\u00e1 a ka\u017ed\u00fd v\u00fdsledek je unik\u00e1tn\u00ed.<\/p>\n<p>Poj\u010fme vytvo\u0159it proxy na serveru CDN a za\u010d\u00edt skrze n\u011bj proch\u00e1zet provoz. Bude to rychlej\u0161\u00ed?<\/p>\n<h2>Technick\u00e9 z\u00e1klady<\/h2>\n<p>\nVzpom\u011b\u0148me si, jak funguj\u00ed s\u00ed\u0165ov\u00e9 protokoly. Dnes v\u011bt\u0161ina provozu na internetu pou\u017e\u00edv\u00e1 HTTPS, kter\u00fd z\u00e1vis\u00ed na protokolech ni\u017e\u0161\u00ed \u00farovn\u011b TCP a TLS. Aby se klient p\u0159ipojil k serveru, prov\u00e1d\u00ed handshake, a pro nav\u00e1z\u00e1n\u00ed zabezpe\u010den\u00e9ho spojen\u00ed mus\u00ed klient vym\u011bnit zpr\u00e1vy se serverem t\u0159ikr\u00e1t a je\u0161t\u011b alespo\u0148 jednou, aby p\u0159edal data. P\u0159i zpo\u017ed\u011bn\u00ed jednoho v\u00fdm\u011bny (RTT) 100 ms pot\u0159ebujeme 400 ms, abychom z\u00edskali prvn\u00ed bit dat:<\/p>\n<p><img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/ab12024f5a9940ca470f27821ca3c631.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPokud um\u00edst\u00edme certifik\u00e1ty na server CDN, m\u016f\u017eeme v\u00fdrazn\u011b zkr\u00e1tit \u010das takzvan\u00e9ho \u201epod\u00e1n\u00ed ruky\u201c mezi klientem a serverem, pokud je CDN bl\u00ed\u017ee. P\u0159edpokl\u00e1dejme, \u017ee zpo\u017ed\u011bn\u00ed do serveru CDN \u010din\u00ed 30 ms. Pak pro z\u00edsk\u00e1n\u00ed prvn\u00edho bitu ji\u017e pot\u0159ebujeme 220 ms:<\/p>\n<p><img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/d63134bb51592aaa6a5e0c86f1a070e0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAle v\u00fdhody t\u00edmto nekon\u010d\u00ed. Jakmile je spojen\u00ed ji\u017e nav\u00e1z\u00e1no, TCP zvy\u0161uje congestion window (po\u010det informac\u00ed, kter\u00e9 m\u016f\u017ee paraleln\u011b p\u0159en\u00e1\u0161et p\u0159es toto spojen\u00ed). Pokud dojde ke ztr\u00e1t\u011b datov\u00e9ho paketu, potom klasick\u00e9 implementace protokolu TCP (jako TCP New Reno) sni\u017euj\u00ed otev\u0159en\u00e9 \u201eokno\u201c na polovinu. R\u016fst congestion window a rychlost jeho obnovy po ztr\u00e1t\u011b op\u011bt z\u00e1vis\u00ed na zpo\u017ed\u011bn\u00ed (RTT) do serveru. Pokud toto spojen\u00ed jde pouze na server CDN, tato obnova bude rychlej\u0161\u00ed. Ztr\u00e1ta paket\u016f je p\u0159itom b\u011b\u017en\u00fdm jevem, zejm\u00e9na pro bezdr\u00e1tov\u00e9 s\u00edt\u011b.<\/p>\n<p>Internetov\u00e1 propustnost m\u016f\u017ee b\u00fdt sn\u00ed\u017eena, zejm\u00e9na v \u0161pi\u010dk\u00e1ch kv\u016fli u\u017eivatelsk\u00e9mu provozu, co\u017e m\u016f\u017ee v\u00e9st k \"z\u00e1cp\u00e1m\". P\u0159itom na internetu neexistuje zp\u016fsob, jak up\u0159ednostnit n\u011bkter\u00e9 po\u017eadavky p\u0159ed jin\u00fdmi. Nap\u0159\u00edklad up\u0159ednostnit mal\u00e9, objemov\u011b mal\u00e9 a na zpo\u017ed\u011bn\u00ed citliv\u00e9 po\u017eadavky oproti \"t\u011b\u017ek\u00fdm\" datov\u00fdm tok\u016fm, kter\u00e9 zat\u011b\u017euj\u00ed s\u00ed\u0165. Nicm\u00e9n\u011b v na\u0161em p\u0159\u00edpad\u011b n\u00e1m vlastn\u00ed backbone s\u00ed\u0165 umo\u017e\u0148uje to prov\u00e9st na \u010d\u00e1sti cesty po\u017eadavku \u2014 mezi CDN a cloudem, a m\u016f\u017eeme ji pln\u011b konfigurovat. M\u016f\u017eeme zajistit, aby mal\u00e9 a na zpo\u017ed\u011bn\u00ed z\u00e1visl\u00e9 pakety m\u011bly prioritu, zat\u00edmco velk\u00e9 datov\u00e9 toky by \u0161ly trochu pozd\u011bji. \u010c\u00edm bl\u00ed\u017ee je CDN k klientovi, t\u00edm v\u011bt\u0161\u00ed je efektivita.<\/p>\n<p>Na zpo\u017ed\u011bn\u00ed tak\u00e9 ovliv\u0148uj\u00ed protokoly aplika\u010dn\u00ed \u00farovn\u011b (OSI \u00farove\u0148 7). Nov\u00e9 protokoly, jako je HTTP\/2, umo\u017e\u0148uj\u00ed optimalizovat v\u00fdkon paraleln\u00edch po\u017eadavk\u016f. Nicm\u00e9n\u011b m\u00e1me Netflix jako klienty, kte\u0159\u00ed pou\u017e\u00edvaj\u00ed star\u00e1 za\u0159\u00edzen\u00ed, kter\u00e1 nov\u00fdmi protokoly nepodporuj\u00ed. Ne v\u0161echny klienty je mo\u017en\u00e9 aktualizovat nebo optim\u00e1ln\u011b nastavit. Mezi CDN proxy a cloudem v\u0161ak m\u00e1me plnou kontrolu a mo\u017enost vyu\u017e\u00edt nov\u00e9, optim\u00e1ln\u00ed protokoly a nastaven\u00ed. Neefektivn\u00ed \u010d\u00e1st se star\u00fdmi protokoly bude fungovat pouze mezi klientem a CDN serverem. Nav\u00edc m\u016f\u017eeme multiplexovat po\u017eadavky na ji\u017e nav\u00e1zan\u00e9 spojen\u00ed mezi CDN a cloudem, \u010d\u00edm\u017e zlep\u0161\u00edme vyu\u017eit\u00ed spojen\u00ed na \u00farovni TCP:<\/p>\n<p><img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/a05b49680734670dcfce9111f3ba1919.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>M\u011b\u0159\u00edme<\/h2>\n<p>\nI kdy\u017e teorie slibuje zlep\u0161en\u00ed, nepou\u0161t\u00edme se hned do spu\u0161t\u011bn\u00ed syst\u00e9mu v produkci. M\u00edsto toho mus\u00edme nejprve dok\u00e1zat, \u017ee my\u0161lenka bude fungovat v praxi. Za t\u00edmto \u00fa\u010delem je t\u0159eba odpov\u011bd\u011bt na n\u011bkolik ot\u00e1zek:<\/p>\n<ul>\n<li><b>Rychlost<\/b>: Bude proxy rychlej\u0161\u00ed?<\/li>\n<li><b>Spolehlivost<\/b>: Bude se \u010dast\u011bji porouch\u00e1vat?<\/li>\n<li><b>Slo\u017eitost<\/b>: Jak integrovat s aplikacemi?<\/li>\n<li><b>N\u00e1klady<\/b>: Kolik stoj\u00ed nasazen\u00ed dodate\u010dn\u00e9 infrastruktury?<\/li>\n<\/ul>\n<p>\nPod\u00edvejme se podrobn\u011b na n\u00e1\u0161 p\u0159\u00edstup k hodnocen\u00ed prvn\u00edho bodu. Ostatn\u00ed se vyhodnocuj\u00ed podobn\u00fdm zp\u016fsobem.<\/p>\n<p>Pro anal\u00fdzu rychlosti po\u017eadavk\u016f chceme z\u00edskat data pro v\u0161echny u\u017eivatele, utr\u00e1cet m\u00e1lo \u010dasu na v\u00fdvoj a nezlomit produkci. K tomu existuje n\u011bkolik p\u0159\u00edstup\u016f:<\/p>\n<ol>\n<li>RUM, nebo pasivn\u00ed m\u011b\u0159en\u00ed po\u017eadavk\u016f. M\u011b\u0159\u00edme dobu vykon\u00e1v\u00e1n\u00ed aktu\u00e1ln\u00edch po\u017eadavk\u016f od u\u017eivatel\u016f a zaji\u0161\u0165ujeme \u00fapln\u00e9 pokryt\u00ed u\u017eivatel\u016f. Nev\u00fdhodou je, \u017ee sign\u00e1l nen\u00ed p\u0159\u00edli\u0161 stabiln\u00ed kv\u016fli mnoha faktor\u016fm, jako jsou rozm\u011bry po\u017eadavk\u016f, doba zpracov\u00e1n\u00ed na serveru a klientovi. Krom\u011b toho nelze otestovat novou konfiguraci bez vlivu na produkci.<\/li>\n<li>Laboratorn\u00ed testy. Speci\u00e1ln\u00ed servery a infrastruktura, kter\u00e9 simuluj\u00ed klienty. S jejich pomoc\u00ed prov\u00e1d\u00edme pot\u0159ebn\u00e9 testy. T\u00edmto zp\u016fsobem z\u00edsk\u00e1v\u00e1me plnou kontrolu nad v\u00fdsledky m\u011b\u0159en\u00ed a jasn\u00fd sign\u00e1l. Ale nen\u00ed k dispozici \u00fapln\u00e9 pokryt\u00ed za\u0159\u00edzen\u00ed a um\u00edst\u011bn\u00ed u\u017eivatel\u016f (zejm\u00e9na se slu\u017ebou po cel\u00e9m sv\u011bt\u011b a podporou tis\u00edc\u016f model\u016f za\u0159\u00edzen\u00ed).<\/li>\n<\/ol>\n<p>\nJak lze spojit v\u00fdhody obou metod?<\/p>\n<p>N\u00e1\u0161 t\u00fdm na\u0161el \u0159e\u0161en\u00ed. Napsali jsme mal\u00fd kousek k\u00f3du \u2013 zku\u0161ebn\u00ed \u00faryvek \u2013 kter\u00fd jsme integrovali do na\u0161eho aplikace. Tyto \u00faryvky n\u00e1m umo\u017e\u0148uj\u00ed prov\u00e1d\u011bt pln\u011b kontrolovan\u00e9 s\u00ed\u0165ov\u00e9 testy z na\u0161ich za\u0159\u00edzen\u00ed. Funguje to n\u00e1sledovn\u011b: <\/p>\n<ol>\n<li>Kr\u00e1tce po na\u010dten\u00ed aplikace a dokon\u010den\u00ed \u00favodn\u00edch aktivit spou\u0161t\u00edme na\u0161e \u00faryvky. <\/li>\n<li>Klient provede po\u017eadavek na server a obdr\u017e\u00ed \"recept\" testu. Recept p\u0159edstavuje seznam URL adres, na kter\u00e9 je t\u0159eba prov\u00e9st HTTP(s) po\u017eadavek. Krom\u011b toho recept konfiguruje parametry po\u017eadavk\u016f: zpo\u017ed\u011bn\u00ed mezi po\u017eadavky, objem po\u017eadovan\u00fdch dat, HTTP(s) hlavi\u010dky atd. P\u0159itom m\u016f\u017eeme paraleln\u011b testovat n\u011bkolik r\u016fzn\u00fdch recept\u016f \u2014 p\u0159i po\u017eadavku na konfiguraci n\u00e1hodn\u011b ur\u010d\u00edme, kter\u00fd recept vyd\u00e1me. <\/li>\n<li>\u010cas spu\u0161t\u011bn\u00ed \u00faryvku je vybr\u00e1n tak, aby nekolidoval s aktivn\u00edm vyu\u017e\u00edv\u00e1n\u00edm s\u00ed\u0165ov\u00fdch zdroj\u016f na klientovi. V podstat\u011b se vyb\u00edr\u00e1 \u010das, kdy je klient neaktivn\u00ed.<\/li>\n<li>Po obdr\u017een\u00ed receptu prov\u00e1d\u00ed klient po\u017eadavky na ka\u017edou z URL adres paraleln\u011b. Po\u017eadavek na ka\u017edou adresu m\u016f\u017ee b\u00fdt opakov\u00e1n \u2014 tzv. \u201epulzy\u201c. P\u0159i prvn\u00edm pulzu m\u011b\u0159\u00edme, kolik \u010dasu bylo pot\u0159eba pro nav\u00e1z\u00e1n\u00ed spojen\u00ed a sta\u017een\u00ed dat. P\u0159i druh\u00e9m pulzu m\u011b\u0159\u00edme dobu na\u010d\u00edt\u00e1n\u00ed dat ji\u017e nav\u00e1zan\u00e9m spojen\u00ed. P\u0159ed t\u0159et\u00edm m\u016f\u017eeme nastavit zpo\u017ed\u011bn\u00ed a zm\u011b\u0159it rychlost nav\u00e1z\u00e1n\u00ed opakovan\u00e9ho spojen\u00ed atd.\n<p>B\u011bhem testu m\u011b\u0159\u00edme v\u0161echny parametry, kter\u00e9 m\u016f\u017ee za\u0159\u00edzen\u00ed z\u00edskat:<\/p>\n<ul>\n<li>\u010das DNS dotazu;<\/li>\n<li>\u010das pro nav\u00e1z\u00e1n\u00ed TCP p\u0159ipojen\u00ed;<\/li>\n<li>\u010das pro nav\u00e1z\u00e1n\u00ed TLS p\u0159ipojen\u00ed;<\/li>\n<li>\u010das pro p\u0159\u00edjem prvn\u00edho bajtu dat;<\/li>\n<li>celkov\u00fd \u010das na\u010d\u00edt\u00e1n\u00ed;<\/li>\n<li>status k\u00f3d v\u00fdsledku.<\/li>\n<\/ul>\n<\/li>\n<li> Po dokon\u010den\u00ed v\u0161ech puls\u016f vzorek na\u010dte v\u00fdsledky v\u0161ech m\u011b\u0159en\u00ed pro anal\u00fdzu.<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/fff11d487b7c7725707cdeeca0734296.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKl\u00ed\u010dov\u00fdmi momenty jsou minim\u00e1ln\u00ed z\u00e1vislost na logice na klientsk\u00e9 stran\u011b, zpracov\u00e1n\u00ed dat na serveru a m\u011b\u0159en\u00ed paraleln\u00edch dotaz\u016f. T\u00edmto zp\u016fsobem z\u00edsk\u00e1me mo\u017enost izolovat a testovat vliv r\u016fzn\u00fdch faktor\u016f ovliv\u0148uj\u00edc\u00edch v\u00fdkon dotaz\u016f, variabiln\u011b je m\u011bnit v r\u00e1mci jednoho receptu a z\u00edsk\u00e1vat v\u00fdsledky z re\u00e1ln\u00fdch klient\u016f.<\/p>\n<p>Takov\u00e1 infrastruktura se uk\u00e1zala jako u\u017eite\u010dn\u00e1 nejen pro anal\u00fdzu v\u00fdkonu dotaz\u016f. V tomto okam\u017eiku m\u00e1me 14 aktivn\u00edch recept\u016f, v\u00edce ne\u017e 6000 vzork\u016f za sekundu, z\u00edsk\u00e1vaj\u00edc\u00ed data ze v\u0161ech kout\u016f sv\u011bta s pln\u00fdm pokryt\u00edm za\u0159\u00edzen\u00ed. Kdyby Netflix nakupoval podobnou slu\u017ebu od extern\u00edch spole\u010dnost\u00ed, st\u00e1lo by to miliony dolar\u016f ro\u010dn\u011b, a to s mnohem hor\u0161\u00edm pokryt\u00edm.<\/p>\n<h2>Ov\u011b\u0159ujeme teorii v praxi: prototyp<\/h2>\n<p>\nS takov\u00fdm syst\u00e9mem jsme z\u00edskali mo\u017enost ocenit efektivitu CDN proxy na latenci dotaz\u016f. Nyn\u00ed je pot\u0159eba:<\/p>\n<ul>\n<li>vytvo\u0159it prototyp proxy;<\/li>\n<li>um\u00edstit prototyp na CDN;<\/li>\n<li>ur\u010dit, jak sm\u011brovat klienty k proxy na konkr\u00e9tn\u00edm CDN serveru;<\/li>\n<li>srovnat v\u00fdkon s dotazy na AWS bez proxy.<\/li>\n<\/ul>\n<p>\n\u00dakolem je co nejrychleji posoudit efektivitu navrhovan\u00e9ho \u0159e\u0161en\u00ed. Pro realizaci prototypu jsme zvolili Go, d\u00edky p\u0159\u00edtomnosti kvalitn\u00edch s\u00ed\u0165ov\u00fdch knihoven. Na ka\u017ed\u00e9m CDN serveru jsme nainstalovali prototyp proxy jako statick\u00fd bin\u00e1rn\u00ed soubor, abychom minimalizovali z\u00e1vislosti a usnadnili integraci. V po\u010d\u00e1te\u010dn\u00ed realizaci jsme co nejv\u00edce vyu\u017eili standardn\u00ed komponenty a drobn\u00e9 \u00fapravy pro HTTP\/2 connection pooling a request multiplexing.<\/p>\n<p>Pro vyv\u00e1\u017een\u00ed mezi regiony AWS jsme pou\u017eili geografickou datab\u00e1zi DNS, kterou pou\u017e\u00edv\u00e1me tak\u00e9 pro vyv\u00e1\u017een\u00ed klient\u016f. K v\u00fdb\u011bru CDN serveru pro klienta pou\u017e\u00edv\u00e1me TCP Anycast pro servery v Internet Exchange (IX). V tomto sc\u00e9n\u00e1\u0159i pou\u017e\u00edv\u00e1me jednu IP adresu pro v\u0161echny CDN servery, p\u0159i\u010dem\u017e klient bude sm\u011brov\u00e1n na CDN server s nejmen\u0161\u00edm po\u010dtem IP hops. U CDN server\u016f, kter\u00e9 jsou um\u00edst\u011bny u poskytovatel\u016f internetov\u00fdch slu\u017eeb (ISP), nem\u00e1me kontrolu nad routerem pro nastaven\u00ed TCP Anycast, proto vyu\u017e\u00edv\u00e1me <noindex><a rel=\"nofollow\" href=\"https:\/\/www.infoq.com\/presentations\/netflix-streaming-arch\/\">stejnou logiku<\/a><\/noindex>, podle kter\u00e9 jsou klienti sm\u011brov\u00e1ni k internetov\u00fdm poskytovatel\u016fm pro videostreaming.<\/p>\n<p>M\u00e1me tedy t\u0159i typy cest pro po\u017eadavek: do cloudu p\u0159es ve\u0159ejn\u00fd internet, p\u0159es CDN server v IX nebo p\u0159es CDN server um\u00edst\u011bn\u00fd u poskytovatele internetov\u00fdch slu\u017eeb. Na\u0161\u00edm c\u00edlem je pochopit, kter\u00e1 cesta je nejlep\u0161\u00ed a jak\u00e9 v\u00fdhody m\u00e1 proxy ve srovn\u00e1n\u00ed s t\u00edm, jak jsou po\u017eadavky sm\u011brov\u00e1ny do produkce. K tomu pou\u017e\u00edv\u00e1me syst\u00e9m test\u016f n\u00e1sleduj\u00edc\u00edm zp\u016fsobem:<\/p>\n<p><img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/51b64d5be0aaf0f141484ee0fd373396.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKa\u017ed\u00e1 z cest se st\u00e1v\u00e1 samostatn\u00fdm c\u00edlem a my sledujeme \u010das, kter\u00fd jsme z\u00edskali. Pro anal\u00fdzu slu\u010dujeme v\u00fdsledky proxy do jedn\u00e9 skupiny (vyb\u00edr\u00e1me nejlep\u0161\u00ed \u010das mezi proxy IX a ISP) a porovn\u00e1v\u00e1me jej s \u010dasem po\u017eadavk\u016f do cloudu bez proxy:<\/p>\n<p><img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/ec01690f6a312e61649282b0e6208778.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJak je vid\u011bt, v\u00fdsledky jsou nejednozna\u010dn\u00e9 \u2014 v v\u011bt\u0161in\u011b p\u0159\u00edpad\u016f proxy poskytuje dobr\u00e9 zrychlen\u00ed, ale je tak\u00e9 dostatek klient\u016f, pro kter\u00e9 se situace v\u00fdrazn\u011b zhor\u0161\u00ed. <\/p>\n<p>Nakonec jsme ud\u011blali n\u011bkolik d\u016fle\u017eit\u00fdch v\u011bc\u00ed:<\/p>\n<ol>\n<li>Odhadli jsme o\u010dek\u00e1van\u00fd v\u00fdkon po\u017eadavk\u016f od klient\u016f do cloudu p\u0159es CDN proxy.<\/li>\n<li>Z\u00edskali jsme data od skute\u010dn\u00fdch klient\u016f ze v\u0161ech typ\u016f za\u0159\u00edzen\u00ed.<\/li>\n<li>Pochopili jsme, \u017ee teorie nebyla stoprocentn\u00ed a p\u016fvodn\u00ed n\u00e1vrh s CDN proxy pro n\u00e1s nefunguje.<\/li>\n<li>Neriskovali jsme \u2014 nem\u011bnili jsme konfigurace produkce pro klienty.<\/li>\n<li>Nerozbili jsme nic. <\/li>\n<\/ol>\n<p><\/p>\n<h2>Prototyp 2.0<\/h2>\n<p>\nVr\u00e1t\u00edme se tedy zp\u011bt k n\u00e1vrhu a proces zopakujeme.<\/p>\n<p>My\u0161lenka je takov\u00e1, \u017ee m\u00edsto 100% proxy ur\u010d\u00edme pro ka\u017ed\u00e9ho klienta nejrychlej\u0161\u00ed cestu a budeme tam sm\u011brovat po\u017eadavky \u2014 tedy ud\u011bl\u00e1me to, \u010demu se \u0159\u00edk\u00e1 \u0159\u00edzen\u00ed klienta.<\/p>\n<p><img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/780817f48a4d2b292d5545e0aa1ccc50.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJak to realizovat? Nem\u016f\u017eeme pou\u017e\u00edt logiku na stran\u011b serveru, proto\u017ee c\u00edlem je p\u0159ipojit se k tomuto serveru. Je pot\u0159eba to n\u011bjak prov\u00e9st na klientovi. A ide\u00e1ln\u011b to ud\u011blat s minim\u00e1ln\u00edm mno\u017estv\u00edm slo\u017eit\u00e9 logiky, abychom se nemuseli zab\u00fdvat integrac\u00ed s \u0161irok\u00fdm spektrem klientsk\u00fdch platforem. <\/p>\n<p>Odpov\u011b\u010f je pou\u017eit\u00ed DNS. V na\u0161em p\u0159\u00edpad\u011b m\u00e1me vlastn\u00ed DNS infrastrukturu a m\u016f\u017eeme nastavit dom\u00e9novou z\u00f3nu, pro kterou budou na\u0161e servery autoritativn\u00ed. Funguje to takto:<\/p>\n<ol>\n<li>Klient pos\u00edl\u00e1 dotaz na DNS server pomoc\u00ed hostitele, nap\u0159\u00edklad api.netflix.com.<\/li>\n<li>Dotaz p\u0159ich\u00e1z\u00ed na n\u00e1\u0161 DNS server.<\/li>\n<li>DNS server v\u00ed, jak\u00e1 cesta je pro tohoto klienta nejrychlej\u0161\u00ed, a vyd\u00e1v\u00e1 odpov\u00eddaj\u00edc\u00ed IP adresu. <\/li>\n<\/ol>\n<p>\nV \u0159e\u0161en\u00ed je dal\u0161\u00ed slo\u017eitost: autoritativn\u00ed DNS poskytovatel\u00e9 nevid\u00ed IP adresu klienta a mohou pouze pova\u017eovat IP adresu rekursivn\u00edho resolveru, kter\u00fd klient pou\u017e\u00edv\u00e1. <\/p>\n<p>Nakonec n\u00e1\u0161 autoritativn\u00ed resolver mus\u00ed \u010dinit rozhodnut\u00ed ne pro jednotliv\u00e9ho klienta, ale pro skupinu klient\u016f na z\u00e1klad\u011b rekursivn\u00edho resolveru. <\/p>\n<p>Pro \u0159e\u0161en\u00ed pou\u017e\u00edv\u00e1me stejn\u00e9 vzorky, agregujeme v\u00fdsledky m\u011b\u0159en\u00ed od klient\u016f pro ka\u017ed\u00fd rekursivn\u00ed resolver a rozhodujeme, kam tuto skupinu nasm\u011brovat - proxy p\u0159es IX pomoc\u00ed TCP Anycast, p\u0159es ISP proxy nebo p\u0159\u00edmo do cloudu.<\/p>\n<p>Dost\u00e1v\u00e1me takov\u00fd syst\u00e9m:<\/p>\n<p><img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/ad23219938d1cb7b6eef498671c3e151.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZ\u00edskan\u00fd model DNS steering umo\u017e\u0148uje sm\u011brovat klienty na z\u00e1klad\u011b historick\u00fdch pozorov\u00e1n\u00ed rychlosti spojen\u00ed od klient\u016f do cloudu. <\/p>\n<p>Op\u011bt ot\u00e1zka - jak efektivn\u011b bude takov\u00fd p\u0159\u00edstup fungovat? Pro odpov\u011b\u010f znovu vyu\u017eijeme n\u00e1\u0161 vzorkovac\u00ed syst\u00e9m. Nastav\u00edme konfiguraci recent, kde jedno z c\u00edl\u016f jde podle sm\u011brov\u00e1n\u00ed DNS a druh\u00e9 jde p\u0159\u00edmo do cloudu (aktu\u00e1ln\u00ed produkce).<\/p>\n<p><img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/ceb2ded9367ebd0aa0ede46191a89a88.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNakonec porovn\u00e1me v\u00fdsledky a z\u00edsk\u00e1me hodnocen\u00ed efektivity:<\/p>\n<p><img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/ca0db88461d5f2cb0f3f7c07eae14f10.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa konci jsme se dozv\u011bd\u011bli n\u011bkolik d\u016fle\u017eit\u00fdch v\u011bc\u00ed:<\/p>\n<ol>\n<li>Vyhodnotili jsme o\u010dek\u00e1van\u00fd v\u00fdkon dotaz\u016f od klient\u016f do cloudu pomoc\u00ed DNS Steering.<\/li>\n<li>Z\u00edskali jsme data od skute\u010dn\u00fdch klient\u016f ze v\u0161ech typ\u016f za\u0159\u00edzen\u00ed.<\/li>\n<li>Dok\u00e1zali jsme efektivitu navrhovan\u00e9 my\u0161lenky.<\/li>\n<li>Neriskovali jsme \u2014 nem\u011bnili jsme konfigurace produkce pro klienty.<\/li>\n<li>Nerozbili jsme nic.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Te\u010f k obt\u00ed\u017en\u00e9mu - spou\u0161t\u00edme v produkci.<\/h2>\n<p>\nNejleh\u010d\u00ed \u010d\u00e1st je nyn\u00ed za n\u00e1mi \u2013 m\u00e1me funk\u010dn\u00ed prototyp. Nyn\u00ed nast\u00e1v\u00e1 slo\u017eit\u011bj\u0161\u00ed \u00fakol \u2013 spustit \u0159e\u0161en\u00ed pro ve\u0161ker\u00fd provoz Netflixu, nasadit ho na 150 milion\u016f u\u017eivatel\u016f, tis\u00edce za\u0159\u00edzen\u00ed, stovky mikroslu\u017eeb a neust\u00e1le se m\u011bn\u00edc\u00ed produkt a infrastrukturu. Na servery Netflixu p\u0159ich\u00e1zej\u00ed miliony po\u017eadavk\u016f za sekundu, a je snadn\u00e9 slu\u017ebu rozb\u00edt neopatrn\u00fdm krokem. P\u0159ejeme si tak\u00e9 dynamicky sm\u011brovat provoz p\u0159es tis\u00edce CDN server\u016f na internetu, kde se n\u011bco neust\u00e1le m\u011bn\u00ed a pokaz\u00ed se to v nejm\u00e9n\u011b vhodn\u00e9m okam\u017eiku. <\/p>\n<p>A p\u0159esto, v t\u00fdmu jsou 3 in\u017een\u00fd\u0159i odpov\u011bdn\u00ed za v\u00fdvoj, nasazen\u00ed a plnou podporu syst\u00e9mu.<\/p>\n<p>Proto budeme nyn\u00ed mluvit o klidn\u00e9m a zdrav\u00e9m sp\u00e1nku.<\/p>\n<p>Jak pokra\u010dovat ve v\u00fdvoji a nepromarnit ve\u0161ker\u00fd \u010das na podporu? Z\u00e1kladem na\u0161eho p\u0159\u00edstupu jsou 3 principy:<\/p>\n<ol>\n<li>Sni\u017eujeme potenci\u00e1ln\u00ed rozsah poruch (blast radius). <\/li>\n<li>P\u0159ipravujeme se na p\u0159ekvapen\u00ed \u2013 o\u010dek\u00e1v\u00e1me, \u017ee se n\u011bco pokaz\u00ed, navzdory testov\u00e1n\u00ed a osobn\u00ed zku\u0161enosti.<\/li>\n<li>Postupn\u00e1 degradace (graceful degradation) \u2013 pokud n\u011bco nefunguje spr\u00e1vn\u011b, m\u011blo by se to opravovat automaticky, i kdy\u017e ne nejefektivn\u011bj\u0161\u00edm zp\u016fsobem.<\/li>\n<\/ol>\n<p>\nUk\u00e1zalo se, \u017ee v na\u0161em p\u0159\u00edpad\u011b, s takov\u00fdm p\u0159\u00edstupem k probl\u00e9mu, lze naj\u00edt jednoduch\u00e9 a efektivn\u00ed \u0159e\u0161en\u00ed a v\u00fdrazn\u011b zjednodu\u0161it podporu syst\u00e9mu. Uv\u011bdomili jsme si, \u017ee m\u016f\u017eeme do klienta p\u0159idat mal\u00fd kousek k\u00f3du a sledovat chyby s\u00ed\u0165ov\u00fdch po\u017eadavk\u016f zp\u016fsoben\u00e9 probl\u00e9my s p\u0159ipojen\u00edm. P\u0159i s\u00ed\u0165ov\u00fdch chyb\u00e1ch prov\u00e1d\u00edme fallback p\u0159\u00edmo do cloudu. Takov\u00e9 \u0159e\u0161en\u00ed nevy\u017eaduje velk\u00e9 \u00fasil\u00ed od klientsk\u00fdch t\u00fdm\u016f, ale v\u00fdrazn\u011b sni\u017euje riziko ne\u010dekan\u00fdch poruch a p\u0159ekvapen\u00ed pro n\u00e1s.<\/p>\n<p>Samoz\u0159ejm\u011b, navzdory fallbacku, se i nad\u00e1le \u0159\u00edd\u00edme jasnou discipl\u00ednou v pr\u016fb\u011bhu v\u00fdvoje:<\/p>\n<ol>\n<li>Test na vzorc\u00edch.<\/li>\n<li>A\/B testov\u00e1n\u00ed nebo Canaries.<\/li>\n<li>Postupn\u00e9 vyd\u00e1n\u00ed (progressive rollout).<\/li>\n<\/ol>\n<p>\nP\u0159\u00edstup k testov\u00e1n\u00ed vzork\u016f byl pops\u00e1n \u2013 zm\u011bny jsou nejprve testov\u00e1ny pomoc\u00ed nastaven\u00e9ho receptu.<\/p>\n<p>Pro canary testing pot\u0159ebujeme z\u00edskat srovnateln\u00e9 p\u00e1ry server\u016f, na kter\u00fdch lze srovn\u00e1vat, jak syst\u00e9m funguje p\u0159ed a po zm\u011bn\u00e1ch. Za t\u00edmto \u00fa\u010delem vyb\u00edr\u00e1me p\u00e1ry server\u016f z na\u0161ich \u010detn\u00fdch CDN str\u00e1nek, kter\u00e9 p\u0159ij\u00edmaj\u00ed srovnateln\u00fd provoz:<\/p>\n<p><img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/eef504f5c81aa985b78339fd5f913d14.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPot\u00e9 nasazujeme sestaven\u00ed se zm\u011bnami na Canary servery. Pro vyhodnocen\u00ed v\u00fdsledk\u016f spou\u0161t\u00edme syst\u00e9m, kter\u00fd porovn\u00e1v\u00e1 p\u0159ibli\u017en\u011b 100\u2013150 metrik se vzorkem Control server\u016f:<\/p>\n<p><img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/898edb0a5bd493d6ef228cd116c1a939.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPokud Canary testov\u00e1n\u00ed prob\u011bhne \u00fasp\u011b\u0161n\u011b, vyd\u00e1v\u00e1me verzi postupn\u011b, v n\u011bkolika vln\u00e1ch. Na ka\u017ed\u00e9m z web\u016f neaktualizujeme servery sou\u010dasn\u011b \u2014 ztr\u00e1ta cel\u00e9ho webu v p\u0159\u00edpad\u011b probl\u00e9m\u016f m\u00e1 v\u011bt\u0161\u00ed dopad na slu\u017ebu pro u\u017eivatele, ne\u017e ztr\u00e1ta stejn\u00e9ho po\u010dtu server\u016f, ale na r\u016fzn\u00fdch m\u00edstech.<\/p>\n<p>Celkov\u011b \u00fa\u010dinnost a bezpe\u010dnost tohoto p\u0159\u00edstupu z\u00e1vis\u00ed na mno\u017estv\u00ed a kvalit\u011b shrom\u00e1\u017ed\u011bn\u00fdch metrik. Pro n\u00e1\u0161 syst\u00e9m urychlen\u00ed \u017e\u00e1dost\u00ed shroma\u017e\u010fujeme metriky ze v\u0161ech mo\u017en\u00fdch komponent\u016f: <\/p>\n<ul>\n<li>od klient\u016f \u2014 po\u010det relac\u00ed a po\u017eadavk\u016f, fallback rates; <\/li>\n<li>proxy \u2014 statistiky o po\u010dtu a \u010dase \u017e\u00e1dost\u00ed;<\/li>\n<li>DNS \u2014 po\u010det a v\u00fdsledky \u017e\u00e1dost\u00ed;<\/li>\n<li>cloud edge \u2014 po\u010det a \u010das zpracov\u00e1n\u00ed \u017e\u00e1dost\u00ed v cloudu.<\/li>\n<\/ul>\n<p>\nTo v\u0161e se shrom\u00e1\u017ed\u00ed do jednotn\u00e9ho pipeline a v z\u00e1vislosti na pot\u0159eb\u00e1ch rozhodujeme, kter\u00e9 metriky pos\u00edlat na real-time analytiku a kter\u00e9 do Elasticsearch nebo Big Data pro podrobn\u011bj\u0161\u00ed diagnostiku.<\/p>\n<h2>Monitorujeme<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/ff8b00b1239a20f85e96ce23c2d7c2d0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV na\u0161em p\u0159\u00edpad\u011b \u010din\u00edme zm\u011bny na kritick\u00e9 cest\u011b po\u017eadavk\u016f mezi klientem a serverem. P\u0159itom mno\u017estv\u00ed r\u016fzn\u00fdch komponent\u016f na klientovi, na serveru a na cest\u011b p\u0159es internet je obrovsk\u00e9. Zm\u011bny na klientovi a serveru prob\u00edhaj\u00ed neust\u00e1le \u2014 v pr\u016fb\u011bhu pr\u00e1ce des\u00edtek t\u00fdm\u016f a p\u0159irozen\u00fdch zm\u011bn v ekosyst\u00e9mu. Jsme uprost\u0159ed \u2014 p\u0159i diagnostice probl\u00e9m\u016f je velk\u00e1 \u0161ance, \u017ee se na tom budeme pod\u00edlet. Proto mus\u00edme jasn\u011b rozum\u011bt, jak ur\u010dit, shroma\u017e\u010fovat a analyzovat metriky pro rychlou lokalizaci probl\u00e9m\u016f. <\/p>\n<p>Ide\u00e1ln\u011b \u2014 \u00fapln\u00fd p\u0159\u00edstup ke v\u0161em typ\u016fm metrik a filtr\u016fm v re\u00e1ln\u00e9m \u010dase. Ale metrik je opravdu hodn\u011b, tak\u017ee vyvst\u00e1v\u00e1 ot\u00e1zka n\u00e1klad\u016f. V na\u0161em p\u0159\u00edpad\u011b d\u011bl\u00edme metriky a v\u00fdvojov\u00e9 n\u00e1stroje n\u00e1sleduj\u00edc\u00edm zp\u016fsobem:<\/p>\n<p><img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/0b4a15776f3b44331652adc14ea87390.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPro odhalov\u00e1n\u00ed a triage probl\u00e9m\u016f pou\u017e\u00edv\u00e1me vlastn\u00ed real-time syst\u00e9m s otev\u0159en\u00fdm zdrojov\u00fdm k\u00f3dem <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Netflix\/atlas\">Atlas<\/a><\/noindex> a <noindex><a rel=\"nofollow\" href=\"https:\/\/netflixtechblog.com\/lumen-custom-self-service-dashboarding-for-netflix-8c56b541548c\">Lumen<\/a><\/noindex> \u2014 pro vizualizaci. Uchov\u00e1v\u00e1 agregovan\u00e9 metriky v pam\u011bti, je spolehliv\u00fd a integruje se s alerting syst\u00e9mem. Pro lokalizaci a diagnostiku m\u00e1me p\u0159\u00edstup k log\u016fm z Elasticsearch a Kibana. Pro statistickou anal\u00fdzu a modelov\u00e1n\u00ed vyu\u017e\u00edv\u00e1me big data a vizualizaci v Tableau.<\/p>\n<p>Zd\u00e1 se, \u017ee s takov\u00fdm p\u0159\u00edstupem je velmi obt\u00ed\u017en\u00e9 pracovat. Nicm\u00e9n\u011b p\u0159i hierarchick\u00e9 organizaci metrik a n\u00e1stroj\u016f m\u016f\u017eeme rychle analyzovat probl\u00e9m, ur\u010dit typ probl\u00e9mu a pot\u00e9 se hloub\u011bji zam\u011b\u0159it na podrobn\u00e9 metriky. Na identifikaci zdroje poruchy obvykle pot\u0159ebujeme asi 1-2 minuty. Pot\u00e9 ji\u017e pracujeme s konkr\u00e9tn\u00edm t\u00fdmem na diagnostice \u2014 od des\u00edtek minut po n\u011bkolik hodin.<\/p>\n<p>I kdy\u017e je diagnostika prov\u00e1d\u011bna rychle, nechceme, aby se to d\u011blo \u010dasto. Ide\u00e1ln\u011b bychom cht\u011bli dost\u00e1vat kritick\u00e9 upozorn\u011bn\u00ed pouze v p\u0159\u00edpad\u011b, \u017ee m\u00e1 v\u00fdznamn\u00fd dopad na slu\u017ebu. Pro n\u00e1\u0161 syst\u00e9m urychlen\u00ed po\u017eadavk\u016f m\u00e1me pouze 2 upozorn\u011bn\u00ed, kter\u00e1 n\u00e1s budou informovat:<\/p>\n<ul>\n<li>procento Client Fallback \u2014 hodnocen\u00ed chov\u00e1n\u00ed z\u00e1kazn\u00edk\u016f;<\/li>\n<li>procento Probe errors \u2014 data o stabilit\u011b s\u00ed\u0165ov\u00fdch komponent.<\/li>\n<\/ul>\n<p>\nTato kritick\u00e1 upozorn\u011bn\u00ed sleduj\u00ed, zda syst\u00e9m funguje pro v\u011bt\u0161inu u\u017eivatel\u016f. Sledujeme, kolik z\u00e1kazn\u00edk\u016f vyu\u017eilo fallback, pokud se jim nepoda\u0159ilo z\u00edskat urychlen\u00ed po\u017eadavk\u016f. V pr\u016fm\u011bru m\u00e1me m\u00e9n\u011b ne\u017e 1 kritick\u00e9 upozorn\u011bn\u00ed t\u00fddn\u011b, i kdy\u017e v syst\u00e9mu se d\u011bje ohromn\u00e9 mno\u017estv\u00ed zm\u011bn. Pro\u010d n\u00e1m to sta\u010d\u00ed?<\/p>\n<ol>\n<li>Existuje client fallback v p\u0159\u00edpad\u011b, \u017ee na\u0161e proxy nefunguje.<\/li>\n<li>Existuje automatick\u00fd steering syst\u00e9m, kter\u00fd reaguje na probl\u00e9my.<\/li>\n<\/ol>\n<p>\nO posledn\u00edm podrobn\u011bji. N\u00e1\u0161 syst\u00e9m pro probe a syst\u00e9m automatick\u00e9ho ur\u010den\u00ed optim\u00e1ln\u00ed cesty pro po\u017eadavky od klienta do cloudu umo\u017e\u0148uj\u00ed automaticky zvl\u00e1dat n\u011bkter\u00e9 probl\u00e9my. <\/p>\n<p>Vra\u0165me se k na\u0161\u00ed konfiguraci pro probe a 3 kategori\u00edm cest. Krom\u011b doby na\u010d\u00edt\u00e1n\u00ed m\u016f\u017eeme sledovat i samotn\u00fd fakt doru\u010den\u00ed. Pokud se data nepoda\u0159ilo na\u010d\u00edst, m\u016f\u017eeme podle v\u00fdsledk\u016f z r\u016fzn\u00fdch cest zjistit, kde a co se pokazilo, a zda m\u016f\u017eeme automaticky opravit, zm\u011bnou cesty po\u017eadavku.<\/p>\n<p>P\u0159\u00edklady:<\/p>\n<p><img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/7d935da82aaca53af87f05fbdf215c4c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/f74ef9d3de953099921a68fbc65cb187.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/3c77cbd47813d3320efbf339a0690c53.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTento proces lze automatizovat. Zahrnout ho do steering-syst\u00e9mu. A nau\u010dit ho reagovat na probl\u00e9my s v\u00fdkonem a spolehlivost\u00ed. Pokud se n\u011bco za\u010dne porouch\u00e1vat \u2014 reagovat, pokud je lep\u0161\u00ed mo\u017enost. P\u0159i\u010dem\u017e okam\u017eit\u00e1 reakce nen\u00ed kritick\u00e1 d\u00edky fallbacku na klientech.<\/p>\n<p>Principy podpory syst\u00e9mu lze tedy formulovat takto:<\/p>\n<ul>\n<li>sni\u017eujeme m\u011b\u0159\u00edtko poruch;<\/li>\n<li>sb\u00edr\u00e1me metriky;<\/li>\n<li>automaticky opravujeme poruchy, pokud m\u016f\u017eeme;<\/li>\n<li>pokud nem\u016f\u017eeme \u2014 ozn\u00e1m\u00edme;<\/li>\n<li>pracujeme na dashboardech a n\u00e1stroj\u00edch pro triage pro rychlou reakci.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Z\u00edskan\u00e9 lekce<\/h2>\n<p>\nK vytvo\u0159en\u00ed prototypu nen\u00ed pot\u0159eba mnoho \u010dasu. V na\u0161em p\u0159\u00edpad\u011b byl p\u0159ipraven u\u017e za 4 m\u011bs\u00edce. S n\u00edm jsme z\u00edskali nov\u00e9 metriky, a po 10 m\u011bs\u00edc\u00edch od za\u010d\u00e1tku v\u00fdvoje jsme dostali prvn\u00ed produk\u010dn\u00ed provoz. Pot\u00e9 za\u010dala nudn\u00e1 a velmi slo\u017eit\u00e1 pr\u00e1ce: postupn\u011b produktizovat a \u0161k\u00e1lovat syst\u00e9m, migrovat hlavn\u00ed provoz a u\u010dit se na chyb\u00e1ch. Tento efektivn\u00ed proces nebude line\u00e1rn\u00ed \u2014 navzdory ve\u0161ker\u00e9mu \u00fasil\u00ed nelze v\u0161echno p\u0159edpov\u011bd\u011bt. Mnohem efektivn\u011bj\u0161\u00ed je rychl\u00e1 iterace a reagov\u00e1n\u00ed na nov\u00e1 data. <\/p>\n<p><img decoding=\"async\" alt=\"Zrychlujeme internetov\u00e9 dotazy a sp\u00edme v klidu\" src=\"\/wp-content\/uploads\/2020\/06\/c9c182a1a4fa048b1f1b2a82a4db65e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa z\u00e1klad\u011b na\u0161ich zku\u0161enost\u00ed v\u00e1m m\u016f\u017eeme doporu\u010dit n\u00e1sleduj\u00edc\u00ed:<\/p>\n<ol>\n<li>Nev\u011b\u0159te intuici.\n<p>Na\u0161e intuice n\u00e1s neust\u00e1le zrazovala, navzdory obrovsk\u00e9mu zku\u0161enostem \u010dlen\u016f t\u00fdmu. Nap\u0159\u00edklad jsme \u0161patn\u011b p\u0159edpov\u011bd\u011bli o\u010dek\u00e1van\u00e9 zrychlen\u00ed od pou\u017e\u00edv\u00e1n\u00ed proxy CDN, nebo chov\u00e1n\u00ed TCP Anycast.<\/li>\n<li>Z\u00edsk\u00e1vejte data z produkce.\n<p>Je d\u016fle\u017eit\u00e9 co nejrychleji z\u00edskat alespo\u0148 mal\u00e9 mno\u017estv\u00ed produk\u010dn\u00edch dat. Po\u010det unik\u00e1tn\u00edch p\u0159\u00edpad\u016f, konfigurac\u00ed a nastaven\u00ed v laboratorn\u00edch podm\u00ednk\u00e1ch je prakticky nemo\u017en\u00e9 dos\u00e1hnout. Rychl\u00fd p\u0159\u00edstup k v\u00fdsledk\u016fm v\u00e1m umo\u017en\u00ed rychleji se dozv\u011bd\u011bt o potenci\u00e1ln\u00edch probl\u00e9mech a zohlednit je v architektu\u0159e syst\u00e9mu.<\/li>\n<li>Nesledujte ciz\u00ed rady a v\u00fdsledky \u2014 sb\u00edrejte sv\u00e1 vlastn\u00ed data.\n<p>Dodr\u017eujte principy sb\u011bru a anal\u00fdzy dat, ale neberte slep\u011b ciz\u00ed v\u00fdsledky a tvrzen\u00ed. Jen vy m\u016f\u017eete p\u0159esn\u011b v\u011bd\u011bt, co funguje pro va\u0161e u\u017eivatele. Va\u0161e syst\u00e9my a va\u0161i klienti se mohou v\u00fdrazn\u011b li\u0161it od ostatn\u00edch firem. Na\u0161t\u011bst\u00ed jsou nyn\u00ed n\u00e1stroje pro anal\u00fdzu dostupn\u00e9 a snadno pou\u017eiteln\u00e9. Va\u0161e z\u00edskan\u00e9 v\u00fdsledky nemus\u00ed odpov\u00eddat tomu, co uv\u00e1d\u011bj\u00ed Netflix, Facebook, Akamai a dal\u0161\u00ed spole\u010dnosti. V na\u0161em p\u0159\u00edpad\u011b se v\u00fdkonnost TLS, HTTP2 nebo statistiky DNS dotaz\u016f li\u0161\u00ed od v\u00fdsledk\u016f Facebooku, Uberu, Akamai \u2014 proto\u017ee m\u00e1me jin\u00e1 za\u0159\u00edzen\u00ed, klienty a datov\u00e9 toky.<\/li>\n<li>Nesna\u017ete se bezd\u016fvodn\u011b a bez posouzen\u00ed \u00fa\u010dinnosti n\u00e1sledovat m\u00f3dn\u00ed trendy.\n<p>Za\u010dn\u011bte s jednoduch\u00fdm. L\u00e9pe je vytvo\u0159it jednoduch\u00fd funk\u010dn\u00ed syst\u00e9m za kr\u00e1tk\u00fd \u010das, ne\u017e tr\u00e1vit ohromn\u00e9 mno\u017estv\u00ed \u010dasu v\u00fdvojem komponent, kter\u00e9 nepot\u0159ebujete. \u0158e\u0161te \u00fakoly a probl\u00e9my, kter\u00e9 jsou d\u016fle\u017eit\u00e9 na z\u00e1klad\u011b va\u0161ich m\u011b\u0159en\u00ed a v\u00fdsledk\u016f. <\/li>\n<li>Bu\u010fte p\u0159ipraveni na nov\u00e1 pou\u017eit\u00ed.\n<p>Tak jako je obt\u00ed\u017en\u00e9 p\u0159edpov\u011bd\u011bt v\u0161echny probl\u00e9my, je t\u011b\u017ek\u00e9 p\u0159edem odhadnout v\u00fdhody a pou\u017eit\u00ed. Berte si p\u0159\u00edklad ze startup\u016f \u2014 jejich schopnost p\u0159izp\u016fsobit se pot\u0159eb\u00e1m klient\u016f. Ve va\u0161em p\u0159\u00edpad\u011b m\u016f\u017eete objevit nov\u00e9 probl\u00e9my a jejich \u0159e\u0161en\u00ed. V na\u0161em projektu jsme si dali za c\u00edl sn\u00ed\u017eit prodlevu \u017e\u00e1dost\u00ed. Nicm\u00e9n\u011b b\u011bhem anal\u00fdzy a diskuz\u00ed jsme si uv\u011bdomili, \u017ee proxy servery m\u016f\u017eeme tak\u00e9 vyu\u017e\u00edvat:<\/p>\n<ul>\n<li>pro vyva\u017eov\u00e1n\u00ed provozu mezi regiony AWS, a sn\u00ed\u017een\u00ed n\u00e1klad\u016f;<\/li>\n<li>pro modelov\u00e1n\u00ed stability CDN;<\/li>\n<li>pro konfiguraci DNS;<\/li>\n<li>pro konfiguraci TLS\/TCP.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><\/p>\n<h2>Z\u00e1v\u011br<\/h2>\n<p>\nVe zpr\u00e1v\u011b jsem popsal, jak Netflix \u0159e\u0161\u00ed probl\u00e9m zrychlov\u00e1n\u00ed internetov\u00fdch \u017e\u00e1dost\u00ed mezi klienty a cloudem. Jak shroma\u017e\u010fujeme data pomoc\u00ed syst\u00e9mu vzorkov\u00e1n\u00ed u klient\u016f a pou\u017e\u00edv\u00e1me shrom\u00e1\u017ed\u011bn\u00e1 historick\u00e1 data k nasm\u011brov\u00e1n\u00ed produk\u010dn\u00edch \u017e\u00e1dost\u00ed od klient\u016f nejrychlej\u0161\u00ed cestou na internetu. Jak vyu\u017e\u00edv\u00e1me principy fungov\u00e1n\u00ed s\u00ed\u0165ov\u00fdch protokol\u016f, na\u0161i CDN infrastrukturu, backbone s\u00ed\u0165 a DNS servery k dosa\u017een\u00ed tohoto c\u00edle.<\/p>\n<p>Nicm\u00e9n\u011b na\u0161e \u0159e\u0161en\u00ed je pouze p\u0159\u00edkladem toho, jak jsme takov\u00fd syst\u00e9m v Netflixu implementovali. Co fungovalo pro n\u00e1s. Aplika\u010dn\u00ed \u010d\u00e1st m\u00e9 zpr\u00e1vy pro v\u00e1s \u2014 principy v\u00fdvoje a \u00fadr\u017eby, kter\u00fdmi se \u0159\u00edd\u00edme a dosahujeme dobr\u00fdch v\u00fdsledk\u016f.<\/p>\n<p>Na\u0161e \u0159e\u0161en\u00ed probl\u00e9mu v\u00e1m nemus\u00ed vyhovovat. Nicm\u00e9n\u011b teorie a principy v\u00fdvoje z\u016fst\u00e1vaj\u00ed, i kdy\u017e nem\u00e1te vlastn\u00ed CDN infrastrukturu, nebo pokud se podstatn\u011b li\u0161\u00ed od na\u0161\u00ed. <\/p>\n<p>D\u00e1le z\u016fst\u00e1v\u00e1 d\u016fle\u017eitost rychlosti \u017e\u00e1dost\u00ed pro podnik\u00e1n\u00ed. A i pro jednoduchou slu\u017ebu je t\u0159eba u\u010dinit rozhodnut\u00ed: mezi \u201ecloudov\u00fdmi\u201c poskytovateli, um\u00edst\u011bn\u00edm server\u016f, CDN a DNS poskytovateli. Va\u0161e volba ovlivn\u00ed efektivitu internetov\u00fdch \u017e\u00e1dost\u00ed pro va\u0161e klienty. A pro v\u00e1s je d\u016fle\u017eit\u00e9 toto vliv m\u011b\u0159it a ch\u00e1pat.<\/p>\n<p>Za\u010dn\u011bte jednoduch\u00fdmi \u0159e\u0161en\u00edmi, pe\u010dujte o to, jak m\u011bn\u00edte produkt. U\u010dte se b\u011bhem procesu a zlep\u0161ujte syst\u00e9m na z\u00e1klad\u011b dat od va\u0161ich klient\u016f, va\u0161\u00ed infrastruktury a va\u0161eho podnik\u00e1n\u00ed. Myslete na mo\u017enost ne\u010dekan\u00fdch poruch b\u011bhem n\u00e1vrhu. A pak budete moci urychlit v\u00e1\u0161 proces v\u00fdvoje, zlep\u0161it efektivitu \u0159e\u0161en\u00ed, vyhnout se nadm\u011brn\u00e9 z\u00e1t\u011b\u017ei na podporu a sp\u00e1t klidn\u011b.<\/p>\n<blockquote><p>V tomto roce <noindex><a rel=\"nofollow\" href=\"http:\/\/devoops-moscow.ru\/?utm_source=habr&amp;utm_medium=506106\">konference prob\u011bhne od 6. do 10. \u010dervence.<\/a><\/noindex> v online form\u00e1tu. Budete moci polo\u017eit ot\u00e1zky jednomu z otc\u016f DevOps, samotn\u00e9mu Johnu Willisi!<\/p><\/blockquote>\n<p>Zdroj: <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.3 - 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\/cs\/blog\/administrirovanie\/uskoryaem-internet-zaprosy-i-spim-spokojno\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\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\/cs\/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\udd47Zrychlujeme internetov\u00e9 po\u017eadavky a sp\u00edme v klidu | ProHoster","description":"Netflix \u2014 l\u00eddr na trhu internetov\u00e9 televize \u2014.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/uskoryaem-internet-zaprosy-i-spim-spokojno","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/84876","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=84876"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/84876\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/84877"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=84876"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=84876"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=84876"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}