{"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\/ro\/blog\/administrirovanie\/uskoryaem-internet-zaprosy-i-spim-spokojno","title":{"rendered":"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/07e2e32d406b8b5d6d6cb3f627a31c3a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNetflix \u2014 liderul pie\u021bei de televiziune online \u2014 compania care a creat \u0219i dezvolt\u0103 activ acest segment. Netflix este cunoscut nu doar pentru catalogul extins de filme \u0219i seriale, disponibile din aproape orice col\u021b al lumii \u0219i de pe orice dispozitiv cu ecran, ci \u0219i pentru infrastructura sa fiabil\u0103 \u0219i cultura inginerie unic\u0103. <\/p>\n<p>Un exemplu clar al abord\u0103rii Netflix \u00een dezvoltarea \u0219i \u00eentre\u021binerea sistemelor complexe a fost prezentat la DevOops 2019 <noindex><a rel=\"nofollow\" href=\"https:\/\/sfedov.com\">Sergei Fedorov<\/a><\/noindex> \u2014 director de dezvoltare la Netflix. Absolvent al facult\u0103\u021bii de matematic\u0103 \u0219i informatic\u0103 a Universit\u0103\u021bii NNGU numit\u0103 dup\u0103 Lobacevski, Sergei este unul dintre primii ingineri din Open Connect \u2014 echipa CDN de la Netflix. El a construit sisteme de monitorizare \u0219i analiz\u0103 a datelor video, a lansat serviciul popular pentru evaluarea vitezei conexiunii la internet FAST.com \u0219i \u00een ultimii ani a lucrat la optimizarea cererilor pe internet, astfel \u00eenc\u00e2t aplica\u021bia Netflix s\u0103 func\u021bioneze c\u00e2t mai repede pentru utilizatori.<\/p>\n<p>Prezentarea a primit cele mai bune recenzii din partea participan\u021bilor la conferin\u021b\u0103, \u0219i am preg\u0103tit pentru voi versiunea text a acesteia.<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=\"Reda\u021bi 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>\u00cen prezentare, Sergei a discutat \u00een detaliu<\/h2>\n<p><\/p>\n<ul>\n<li>despre ce influen\u021beaz\u0103 \u00eent\u00e2rzierea cererilor pe internet \u00eentre client \u0219i server;<\/li>\n<li>cum s\u0103 reduci aceast\u0103 \u00eent\u00e2rziere;<\/li>\n<li>cum s\u0103 proiectezi, \u00eentre\u021bii \u0219i monitorizezi sisteme rezistente la erori;<\/li>\n<li>cum s\u0103 atingi rezultate \u00eentr-un timp scurt, cu un risc minim pentru afacere;<\/li>\n<li>cum s\u0103 analizezi rezultatele \u0219i s\u0103 \u00eenve\u021bi din gre\u0219eli.<\/li>\n<\/ul>\n<p>\nR\u0103spunsurile la aceste \u00eentreb\u0103ri sunt necesare nu doar celor care lucreaz\u0103 \u00een mari corpora\u021bii. <\/p>\n<p>Principiile \u0219i tehnicile prezentate ar trebui s\u0103 fie cunoscute \u0219i aplicate de c\u0103tre oricine dezvolt\u0103 \u0219i \u00eentre\u021bine produse online.<\/p>\n<p><b>\u00cen continuare \u2014 povestea din perspectiva vorbitorului.<\/b><\/p>\n<h2>Importan\u021ba vitezei internetului<\/h2>\n<p>\nViteza cererilor pe internet este direct legat\u0103 de afaceri. S\u0103 lu\u0103m \u00een considerare domeniul comer\u021bului online: compania Amazon \u00een 2009 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.gigaspaces.com\/blog\/amazon-found-every-100ms-of-latency-cost-them-1-in-sales\/\">a declarat<\/a><\/noindex>, c\u0103 o \u00eent\u00e2rziere de 100 ms duce la pierderi de 1% din v\u00e2nz\u0103ri.<\/p>\n<p>Tot mai multe dispozitive mobile apar, iar odat\u0103 cu ele, tot mai multe site-uri \u0219i aplica\u021bii mobile. Dac\u0103 pagina ta se \u00eencarc\u0103 mai lent de 3 secunde, pierzi aproximativ jum\u0103tate din utilizatori. Din <noindex><a rel=\"nofollow\" href=\"https:\/\/webmasters.googleblog.com\/2018\/01\/using-page-speed-in-mobile-search.html\">iulie 2018<\/a><\/noindex> , Google ia \u00een considerare viteza de \u00eenc\u0103rcare a paginii tale \u00een rezultatele c\u0103ut\u0103rii: cu c\u00e2t pagina se \u00eencarc\u0103 mai repede, cu at\u00e2t pozi\u021bia ei \u00een Google este mai bun\u0103.<\/p>\n<p>Viteza conexiunii este, de asemenea, important\u0103 \u0219i \u00een organiza\u021biile financiare, unde \u00eent\u00e2rzierea este critic\u0103. \u00cen 2015, compania 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\">a \u00eencheiat<\/a><\/noindex> o cablare \u00eentre New York \u0219i Londra, cu un cost de 400 de milioane de dolari, pentru a reduce laten\u021ba \u00eentre ora\u0219e cu 6 ms. Imagina\u021bi-v\u0103, 66 de milioane de dolari pentru o reducere de 1 ms a laten\u021bei!<\/p>\n<p>Conform <noindex><a rel=\"nofollow\" href=\"https:\/\/hpbn.co\/primer-on-web-performance\/\">cercet\u0103rii<\/a><\/noindex>, viteza de conexiune de peste 5 Mbit\/s \u00eenceteaz\u0103 s\u0103 mai influen\u021beze direct viteza de \u00eenc\u0103rcare a unui site web tipic. Totu\u0219i, \u00eentre laten\u021ba conexiunii \u0219i viteza de \u00eenc\u0103rcare a paginii exist\u0103 o dependen\u021b\u0103 liniar\u0103:<\/p>\n<p><img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/340ca1f2c5bdd6ca95a5caf02f67e3fd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCu toate acestea, Netflix nu este un produs tipic. Impactul laten\u021bei \u0219i vitezei asupra utilizatorului este un domeniu activ de analiz\u0103 \u0219i dezvoltare. Exist\u0103 \u00eenc\u0103rcarea aplica\u021biei \u0219i selectarea con\u021binutului, care depind de laten\u021b\u0103, dar \u00eenc\u0103rcarea elementelor statice \u0219i streaming-ul depind \u0219i de viteza conexiunii. Analiza \u0219i optimizarea factorilor cheie care influen\u021beaz\u0103 calitatea serviciului pentru utilizator sunt domenii active de dezvoltare pentru mai multe echipe din Netflix. Una dintre sarcini este reducerea laten\u021bei cererilor \u00eentre dispozitivele Netflix \u0219i infrastructura cloud.<\/p>\n<p>\u00cen aceast\u0103 prezentare ne vom concentra pe reducerea laten\u021bei \u00een contextul infrastructurii Netflix. Vom examina din punct de vedere practic cum s\u0103 abord\u0103m procesele de proiectare, dezvoltare \u0219i operare ale sistemelor distribuite complexe \u0219i cum s\u0103 investim timp \u00een inova\u021bii \u0219i rezultate, nu \u00een diagnosticarea problemelor opera\u021bionale \u0219i a defec\u021biunilor.<\/p>\n<h2>\u00cen interiorul Netflix<\/h2>\n<p>\nMii de dispozitive diferite suport\u0103 aplica\u021biile Netflix. Dezvoltarea acestora este responsabilitatea a patru echipe diferite, care creeaz\u0103 versiuni separate ale clientului pentru Android, iOS, TV \u0219i browserele web. Investim foarte mult efort pentru a \u00eembun\u0103t\u0103\u021bi \u0219i personaliza interfa\u021ba utilizatorului. Pentru aceasta, desf\u0103\u0219ur\u0103m sute de teste A\/B \u00een paralel.<\/p>\n<p>Personalizarea este sus\u021binut\u0103 de sute de microservicii \u00een cloud-ul AWS, care ofer\u0103 date personalizate pentru utilizatori, gestionarea cererilor, telemetrie, Big Data \u0219i Encoding. Vizualizarea traficului arat\u0103 astfel:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/n7Te9WIz1ho?t=364\">Link c\u0103tre videoclip cu demonstrarea (6:04-6:23)<\/a><\/noindex><\/p>\n<p>\u00cen st\u00e2nga se afl\u0103 entry point-ul, iar apoi traficul este distribuit \u00eentre sute de microservicii, care sunt sus\u021binute de echipe backend diferite.<\/p>\n<p>Un alt component important al infrastructurii noastre este Open Connect CDN, care livreaz\u0103 con\u021binut static - videoclipuri, imagini, cod pentru clien\u021bi etc. CDN-ul este amplasat pe servere personalizate (OCA - Open Connect Appliance). \u00cen interior se afl\u0103 array-uri de SSD-uri \u0219i HDD-uri, gestionate de FreeBSD optimizat, cu NGINX \u0219i un set de servicii. Proiect\u0103m \u0219i optimiz\u0103m componentele hardware \u0219i software astfel \u00eenc\u00e2t acest server CDN s\u0103 poat\u0103 trimite c\u00e2t mai multe date utilizatorilor. <\/p>\n<p>\u201eZidul\u201d acestor servere la punctul de schimb de trafic internet (Internet eXchange - IX) arat\u0103 astfel:<\/p>\n<p><img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/8155601c344acb1eb05b925193af8f9a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nInternet Exchange ofer\u0103 posibilitatea furnizorilor de internet \u0219i furnizorilor de con\u021binut s\u0103 se \u201econecteze\u201d unii la al\u021bii pentru un schimb de date mai direct pe internet. \u00cen \u00eentreaga lume sunt aproximativ 70-80 de puncte Internet Exchange, unde sunt instalate serverele noastre, iar noi ne ocup\u0103m \u00een mod autonom de instalarea \u0219i \u00eentre\u021binerea acestora:<\/p>\n<p><img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/77a2465314e47c0b2c90dbf7a2fb5e6b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00cen plus, furniz\u0103m servere direct furnizorilor de internet, pe care ace\u0219tia le instaleaz\u0103 \u00een re\u021beaua lor, \u00eembun\u0103t\u0103\u021bind localizarea traficului Netflix \u0219i calitatea streaming-ului pentru utilizatori:<\/p>\n<p><img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/63e077d2649bfafea5c7af43a0faaf85.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSetul de servicii AWS este responsabil pentru gestionarea cererilor video de la clien\u021bi c\u0103tre serverele CDN, precum \u0219i configurarea acestora - actualizarea con\u021binutului, codului surs\u0103, set\u0103rilor etc. Pentru acest lucru, am construit, de asemenea, o re\u021bea backbone, care conecteaz\u0103 serverele din punctele Internet Exchange cu AWS. Re\u021beaua backbone reprezint\u0103 o re\u021bea global\u0103 din cabluri de fibr\u0103 optic\u0103 \u0219i routere, pe care le putem proiecta \u0219i configura \u00een func\u021bie de nevoile noastre.<\/p>\n<p>Dup\u0103 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.sandvine.com\/hubfs\/Sandvine_Redesign_2019\/Downloads\/Internet%20Phenomena\/Internet%20Phenomena%20Report%20Q32019%2020190910.pdf\">evalu\u0103rilor Sandvine<\/a><\/noindex>, infrastructura noastr\u0103 CDN livreaz\u0103 \u00een orele de v\u00e2rf aproximativ \u215b din traficul mondial de internet \u0219i \u2153 din traficul din America de Nord, unde Netflix exist\u0103 cel mai mult timp. Cifre impresionante, dar pentru mine, una dintre cele mai surprinz\u0103toare realiz\u0103ri este c\u0103 \u00eentreaga sistem\u0103 CDN este dezvoltat\u0103 \u0219i \u00eentre\u021binut\u0103 de o echip\u0103 de mai pu\u021bin de 150 de persoane.<\/p>\n<p>Ini\u021bial, infrastructura CDN a fost proiectat\u0103 pentru livrarea datelor video. Totu\u0219i, de-a lungul timpului, am realizat c\u0103 putem folosi \u0219i pentru optimizarea cererilor dinamice de la clien\u021bi \u00een cloud-ul AWS.<\/p>\n<h2>Despre accelerarea internetului<\/h2>\n<p>\nAst\u0103zi, Netflix are 3 regiuni AWS, iar \u00eent\u00e2rzierea cererilor \u00een cloud va depinde de distan\u021ba la care se afl\u0103 clientul fa\u021b\u0103 de cea mai apropiat\u0103 regiune. Avem, de asemenea, multe servere CDN care sunt utilizate pentru livrarea con\u021binutului static. Exist\u0103 vreo modalitate de a folosi aceast\u0103 infrastructur\u0103 pentru a accelera cererile dinamice? Din p\u0103cate, nu putem cache-ui aceste cereri \u2013 API-urile sunt personalizate, iar fiecare rezultat este unic.<\/p>\n<p>Hai s\u0103 facem un proxy pe serverul CDN \u0219i s\u0103 \u00eencepem s\u0103 gestion\u0103m traficul prin el. Va fi mai rapid?<\/p>\n<h2>Partea tehnic\u0103<\/h2>\n<p>\nS\u0103 ne amintim cum func\u021bioneaz\u0103 protocoalele de re\u021bea. Ast\u0103zi, cea mai mare parte a traficului de pe internet folose\u0219te HTTPS, care depinde de protocoalele de baz\u0103 TCP \u0219i TLS. Pentru ca un client s\u0103 se conecteze la server, efectueaz\u0103 un handshake, iar pentru a stabili o conexiune securizat\u0103, clientul trebuie s\u0103 schimbe mesaje cu serverul de trei ori \u0219i apoi s\u0103 trimite datele, ceea ce necesit\u0103 cel pu\u021bin o alt\u0103 dat\u0103. Cu o \u00eent\u00e2rziere de un schimb (RTT) de 100 ms, avem nevoie de 400 ms pentru a primi primul bit de date:<\/p>\n<p><img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/ab12024f5a9940ca470f27821ca3c631.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDac\u0103 certificatele sunt amplasate pe serverul CDN, atunci timpul de \u201estr\u00e2ngere de m\u00e2n\u0103\u201d \u00eentre client \u0219i server poate fi redus semnificativ, dac\u0103 CDN-ul se afl\u0103 mai aproape. S\u0103 presupunem c\u0103 \u00eent\u00e2rzierea p\u00e2n\u0103 la serverul CDN este de 30 ms. Atunci pentru a ob\u021bine primul bit va fi nevoie deja de 220 ms:<\/p>\n<p><img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/d63134bb51592aaa6a5e0c86f1a070e0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDar avantajele nu se opresc aici. Dup\u0103 ce conexiunea a fost deja stabilit\u0103, TCP cre\u0219te fereastra de congestionare (cantitatea de informa\u021bie pe care o poate transmite prin aceast\u0103 conexiune \u00een paralel). Dac\u0103 un pachet de date se pierde, atunci implement\u0103rile clasice ale protocolului TCP (precum TCP New Reno) reduc \u201efereastra\u201d deschis\u0103 la jum\u0103tate. Cre\u0219terea ferestrei de congestionare \u0219i viteza de recuperare de la pierdere depind din nou de \u00eent\u00e2rzierea (RTT) p\u00e2n\u0103 la server. Dac\u0103 conexiunea merge doar p\u00e2n\u0103 la serverul CDN, aceast\u0103 recuperare va fi mai rapid\u0103. Pierderile de pachete sunt un fenomen standard, \u00een special pentru re\u021belele wireless.<\/p>\n<p>L\u0103\u021bimea de band\u0103 a internetului poate sc\u0103dea, mai ales \u00een orele de v\u00e2rf din cauza traficului generat de utilizatori, ceea ce poate duce la \u201eblocaje\u201d. \u00cen plus, nu exist\u0103 nicio modalitate de a oferi prioritate unor cereri \u00een favoarea altora. De exemplu, nu putem prioritiza cererile cu volume mici \u0219i sensibile la \u00eent\u00e2rziere fa\u021b\u0103 de fluxurile de date \u201egrele\u201d care \u00eengreuneaz\u0103 re\u021beaua. Cu toate acestea, \u00een cazul nostru, existen\u021ba unei re\u021bele backbone proprii ne permite s\u0103 facem acest lucru pe o parte din drumul cererii \u2014 \u00eentre CDN \u0219i cloud, \u0219i putem s\u0103 o configur\u0103m complet. Putem face astfel \u00eenc\u00e2t pachetele mici \u0219i sensibile la \u00eent\u00e2rziere s\u0103 fie prioritizate, iar fluxurile mari de date s\u0103 mearg\u0103 pu\u021bin mai t\u00e2rziu. Cu c\u00e2t CDN-ul este mai aproape de client, cu at\u00e2t mai mare este eficien\u021ba.<\/p>\n<p>De asemenea, protocoalele de nivel aplica\u021bie (OSI Nivelul 7) influen\u021beaz\u0103 \u00eent\u00e2rzierea. Protocoalele noi, cum ar fi HTTP\/2, permit optimizarea performan\u021bei cererilor paralele. Cu toate acestea, avem clien\u021bi Netflix cu dispozitive vechi, care nu suport\u0103 protocoale noi. Nu to\u021bi clien\u021bii pot fi actualiza\u021bi sau configura\u021bi optim. \u00cen plus, \u00eentre proxy-ul CDN \u0219i cloud \u2013 exist\u0103 un control complet \u0219i posibilitatea de a folosi protocoale \u0219i configura\u021bii noi, optime. Partea ineficient\u0103 cu protocoale vechi va ac\u021biona doar \u00eentre client \u0219i serverul CDN. Mai mult, putem multiplexa cererile pe o conexiune deja stabilit\u0103 \u00eentre CDN \u0219i cloud, \u00eembun\u0103t\u0103\u021bind utilizarea conexiunii la nivel TCP:<\/p>\n<p><img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/a05b49680734670dcfce9111f3ba1919.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>M\u0103sur\u0103m<\/h2>\n<p>\nDe\u0219i teoria promite \u00eembun\u0103t\u0103\u021biri, nu ne gr\u0103bim s\u0103 lans\u0103m imediat sistemul \u00een produc\u021bie. \u00cen schimb, trebuie s\u0103 dovedim mai \u00eent\u00e2i c\u0103 ideea va func\u021biona \u00een practic\u0103. Pentru aceasta, trebuie s\u0103 r\u0103spundem la c\u00e2teva \u00eentreb\u0103ri:<\/p>\n<ul>\n<li><b>Vitez\u0103<\/b>: va fi proxy-ul mai rapid?<\/li>\n<li><b>Fiabilitate<\/b>: va e\u0219ua mai des?<\/li>\n<li><b>Complexitate<\/b>: cum se integreaz\u0103 cu aplica\u021biile?<\/li>\n<li><b>Pre\u021b<\/b>: c\u00e2t cost\u0103 implementarea infrastructurii suplimentare?<\/li>\n<\/ul>\n<p>\nS\u0103 analiz\u0103m detaliat abordarea noastr\u0103 pentru evaluarea primei \u00eentreb\u0103ri. Celelalte se analizeaz\u0103 \u00eentr-un mod asem\u0103n\u0103tor.<\/p>\n<p>Pentru a analiza viteza cererilor, dorim s\u0103 ob\u021binem date pentru to\u021bi utilizatorii, f\u0103r\u0103 a investi mult timp \u00een dezvoltare \u0219i f\u0103r\u0103 a afecta produc\u021bia. Exist\u0103 mai multe abord\u0103ri pentru aceasta:<\/p>\n<ol>\n<li>RUM, sau m\u0103surarea pasiv\u0103 a cererilor. M\u0103sur\u0103m timpul de execu\u021bie al cererilor curente de la utilizatori \u0219i asigur\u0103m o acoperire complet\u0103 a utilizatorilor. Un dezavantaj este semnalul nu foarte stabil din cauza multor factori, cum ar fi dimensiunile diferite ale cererilor, timpul de procesare pe server \u0219i client. \u00cen plus, nu putem testa o nou\u0103 configura\u021bie f\u0103r\u0103 efect asupra produc\u021biei.<\/li>\n<li>Teste de laborator. Servere \u0219i infrastructur\u0103 special\u0103 care imit\u0103 clien\u021bii. Cu ajutorul acestora efectu\u0103m testele necesare. Astfel, ob\u021binem un control complet asupra rezultatelor m\u0103sur\u0103rilor \u0219i un semnal clar. Dar nu exist\u0103 o acoperire complet\u0103 a dispozitivelor \u0219i a loca\u021biei utilizatorilor (\u00een special cu un serviciu global \u0219i suport pentru mii de modele de dispozitive).<\/li>\n<\/ol>\n<p>\nCum putem combina avantajele ambelor metode?<\/p>\n<p>Echipa noastr\u0103 a g\u0103sit o solu\u021bie. Am scris un mic fragment de cod \u2014 prob\u0103 \u2014 pe care l-am integrat \u00een aplica\u021bia noastr\u0103. Probe ne permit s\u0103 facem teste de re\u021bea complet controlate de pe dispozitivele noastre. Func\u021bioneaz\u0103 astfel: <\/p>\n<ol>\n<li>La scurt timp dup\u0103 \u00eenc\u0103rcarea aplica\u021biei \u0219i finalizarea activit\u0103\u021bilor ini\u021biale, lans\u0103m probele noastre. <\/li>\n<li>Clientul face o cerere c\u0103tre server \u0219i prime\u0219te un \u00abre\u021bet\u0103\u00bb de test. Re\u021beta const\u0103 \u00eentr-o list\u0103 de adrese URL la care trebuie s\u0103 facem cereri HTTP(s). Pe l\u00e2ng\u0103 aceasta, re\u021beta configureaz\u0103 parametrii cererilor: \u00eent\u00e2rzieri \u00eentre cereri, volumul de date solicitate, antetele HTTP(s) etc. \u00cen plus, putem testa simultan mai multe re\u021bete diferite \u2014 la cererea de configurare, se determin\u0103 aleatoriu ce re\u021bet\u0103 s\u0103 fie furnizat\u0103. <\/li>\n<li>Timpul de lansare a probei este ales pentru a nu intra \u00een conflict cu utilizarea activ\u0103 a resurselor de re\u021bea pe client. Practic, se alege un moment \u00een care clientul nu este activ.<\/li>\n<li>Dup\u0103 primirea re\u021betei, clientul face cereri pentru fiecare dintre adresele URL, \u00een paralel. Cererea pentru fiecare dintre adrese poate fi repetat\u0103 \u2014 a\u0219a-numitele \u00abpulsi\u00bb. La primul puls, m\u0103sur\u0103m c\u00e2t timp a fost necesar pentru a stabili conexiunea \u0219i a desc\u0103rca datele. La al doilea puls, m\u0103sur\u0103m timpul de \u00eenc\u0103rcare a datelor prin conexiunea deja stabilit\u0103. \u00cenainte de al treilea, putem introduce o \u00eent\u00e2rziere \u0219i m\u0103sura viteza de stabilire a reconexiunii etc.\n<p>\u00cen timpul testului, m\u0103sur\u0103m toate parametrii pe care dispozitivul le poate ob\u021bine:<\/p>\n<ul>\n<li>timpul de cerere DNS;<\/li>\n<li>timpul de stabilire a conexiunii prin TCP;<\/li>\n<li>timpul de stabilire a conexiunii prin TLS;<\/li>\n<li>timpul necesar pentru primirea primului byte de date;<\/li>\n<li>timpul total de \u00eenc\u0103rcare;<\/li>\n<li>codul de stare a rezultatului.<\/li>\n<\/ul>\n<\/li>\n<li> Dup\u0103 \u00eencheierea tuturor pulsurilor, proba \u00eencarc\u0103 rezultatele tuturor m\u0103sur\u0103rilor pentru analiz\u0103.<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/fff11d487b7c7725707cdeeca0734296.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPunctele cheie sunt dependen\u021ba minim\u0103 de logica clientului, procesarea datelor pe server \u0219i m\u0103surarea cererilor paralele. Astfel, ob\u021binem posibilitatea de a izola \u0219i testa influen\u021ba diferitelor factori care afecteaz\u0103 performan\u021ba cererilor, variind ace\u0219tia \u00een cadrul acelea\u0219i re\u021bete \u0219i ob\u021bin\u00e2nd rezultate din partea clien\u021bilor reali.<\/p>\n<p>Aceast\u0103 infrastructur\u0103 s-a dovedit util\u0103 nu doar pentru analiza performan\u021bei cererilor. \u00cen acest moment, avem 14 re\u021bete active, peste 6000 de probe pe secund\u0103, care ob\u021bin date din toate col\u021burile lumii \u0219i au o acoperire complet\u0103 a dispozitivelor. Dac\u0103 Netflix ar cump\u0103ra un astfel de serviciu de la companii externe, ar costa milioane de dolari pe an, av\u00e2nd o acoperire mult mai slab\u0103.<\/p>\n<h2>Test\u0103m teoria \u00een practic\u0103: prototipul<\/h2>\n<p>\nCu un astfel de sistem, am ob\u021binut posibilitatea de a evalua eficien\u021ba proxy-ului CDN asupra laten\u021bei cererilor. Acum trebuie s\u0103:<\/p>\n<ul>\n<li>cre\u0103m un prototip de proxy;<\/li>\n<li>distribuim prototipul pe CDN;<\/li>\n<li>stabilim cum s\u0103 direc\u021bion\u0103m clien\u021bii c\u0103tre proxy pe un anumit server CDN;<\/li>\n<li>compar\u0103m performan\u021ba cu cererile \u00een AWS f\u0103r\u0103 proxy.<\/li>\n<\/ul>\n<p>\nObiectivul este de a evalua c\u00e2t mai repede eficien\u021ba solu\u021biei propuse. Pentru implementarea prototipului, am ales Go, datorit\u0103 disponibilit\u0103\u021bii unor biblioteci de re\u021bea bune. Pe fiecare server CDN am instalat prototipul proxy ca un binary static, pentru a minimiza dependen\u021bele \u0219i a simplifica integrarea. \u00cen implementarea ini\u021bial\u0103, am folosit la maximum componentele standard \u0219i mici modific\u0103ri pentru pooling-ul conexiunilor HTTP\/2 \u0219i multiplexarea cererilor.<\/p>\n<p>Pentru a echilibra \u00eentre regiunile AWS, am folosit o baz\u0103 de date geografic\u0103 DNS, aceea\u0219i folosit\u0103 pentru echilibrarea clien\u021bilor. Pentru a alege serverul CDN pentru client, utiliz\u0103m TCP Anycast pentru serverele din Internet Exchange (IX). \u00cen aceast\u0103 variant\u0103, folosim o singur\u0103 adres\u0103 IP pentru toate serverele CDN, \u00een timp ce clientul va fi direc\u021bionat c\u0103tre serverul CDN cu cel mai mic num\u0103r de hops IP. La serverele CDN instalate la furnizorii de internet (ISP), nu avem control asupra routerului pentru configurarea TCP Anycast, a\u0219a c\u0103 folosim <noindex><a rel=\"nofollow\" href=\"https:\/\/www.infoq.com\/presentations\/netflix-streaming-arch\/\">aceea\u0219i logic\u0103<\/a><\/noindex>, conform c\u0103reia clien\u021bii sunt direc\u021biona\u021bi c\u0103tre furnizorii de internet pentru streaming video.<\/p>\n<p>Deci, avem trei tipuri de c\u0103i pentru cerere: \u00een cloud prin internet deschis, prin server CDN \u00een IX sau prin server CDN situat la furnizorul de internet. Scopul nostru este s\u0103 \u00een\u021belegem care cale este mai bun\u0103 \u0219i ce beneficii are proxy-ul, comparativ cu modul \u00een care cererile sunt direc\u021bionate \u00een produc\u021bie. Pentru aceasta, folosim un sistem de probe \u00een urm\u0103torul mod:<\/p>\n<p><img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/51b64d5be0aaf0f141484ee0fd373396.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFiecare dintre c\u0103i devine un target separat, iar noi ne uit\u0103m la timpul pe care l-am ob\u021binut. Pentru analiz\u0103, grup\u0103m rezultatele proxy \u00een un singur grup (alegem cel mai bun timp \u00eentre proxy-urile IX \u0219i ISP) \u0219i compar\u0103m cu timpul cererilor \u00een cloud f\u0103r\u0103 proxy:<\/p>\n<p><img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/ec01690f6a312e61649282b0e6208778.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDup\u0103 cum se vede, rezultatele s-au dovedit ambigue - \u00een majoritatea cazurilor, proxy-ul ofer\u0103 un bun avans, dar exist\u0103, de asemenea, un num\u0103r suficient de clien\u021bi pentru care situa\u021bia se va \u00eenr\u0103ut\u0103\u021bi semnificativ. <\/p>\n<p>Ca urmare, am realizat c\u00e2teva lucruri importante:<\/p>\n<ol>\n<li>Am evaluat performan\u021ba a\u0219teptat\u0103 a cererilor de la clien\u021bi \u00een cloud prin proxy CDN.<\/li>\n<li>Am ob\u021binut date de la clien\u021bi reali, de pe toate tipurile de dispozitive.<\/li>\n<li>Am \u00een\u021beles c\u0103 teoria nu a fost confirmat\u0103 100% \u0219i propunerea ini\u021bial\u0103 cu proxy CDN nu va func\u021biona pentru noi.<\/li>\n<li>Nu am riscat - nu am schimbat configura\u021biile de produc\u021bie pentru clien\u021bi.<\/li>\n<li>Nu am stricat nimic. <\/li>\n<\/ol>\n<p><\/p>\n<h2>Prototip 2.0<\/h2>\n<p>\nDeci, ne \u00eentoarcem la tabl\u0103 \u0219i repet\u0103m procesul de la \u00eenceput.<\/p>\n<p>Ideea este - \u00een loc de 100% proxy, pentru fiecare client vom determina cea mai rapid\u0103 cale \u0219i vom dirija cererile acolo - adic\u0103 vom face ceea ce se nume\u0219te client steering.<\/p>\n<p><img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/780817f48a4d2b292d5545e0aa1ccc50.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCum s\u0103 realiz\u0103m asta? Nu putem folosi logica pe server, deoarece scopul este s\u0103 ne conect\u0103m la acest server. Trebuie s\u0103 facem acest lucru cumva pe client \u0219i, ideal, s\u0103 reducem la minimum logica complex\u0103 pentru a evita problemele de integrare cu o gam\u0103 larg\u0103 de platforme client. <\/p>\n<p>R\u0103spunsul este utilizarea DNS. \u00cen cazul nostru, dispunem de propria infrastructur\u0103 DNS \u0219i putem configura zona de domeniu pentru care serverele noastre vor fi autoritare. Func\u021bioneaz\u0103 astfel:<\/p>\n<ol>\n<li>Clientul trimite o cerere c\u0103tre serverul DNS folosind un host, de exemplu api.netflix.com.<\/li>\n<li>Cererea ajunge la serverul nostru DNS.<\/li>\n<li>Serverul DNS \u0219tie care este calea cea mai rapid\u0103 pentru acest client \u0219i returneaz\u0103 adresa IP corespunz\u0103toare. <\/li>\n<\/ol>\n<p>\n\u00cen solu\u021bie exist\u0103 o dificultate suplimentar\u0103: furnizorii de DNS autoritari nu v\u0103d adresa IP a clientului \u0219i pot considera doar adresa IP a resolver-ului recursiv folosit de client. <\/p>\n<p>Astfel, resolverul nostru autoritar trebuie s\u0103 ia decizii nu pentru un singur client, ci pentru un grup de clien\u021bi pe baza resolver-ului recursiv. <\/p>\n<p>Pentru a rezolva problema, folosim acelea\u0219i probe, agreg\u0103m rezultatele m\u0103sur\u0103torilor de la clien\u021bi pentru fiecare dintre resolver-urile recursiv \u0219i decid\u0103m unde s\u0103 direc\u021bion\u0103m acest grup - prin proxy prin IX folosind TCP Anycast, prin proxy-ul ISP sau direct \u00een cloud.<\/p>\n<p>Ob\u021binem un astfel de sistem:<\/p>\n<p><img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/ad23219938d1cb7b6eef498671c3e151.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nModelul ob\u021binut de DNS steering permite direc\u021bionarea clien\u021bilor pe baza observa\u021biilor istorice asupra vitezei conexiunilor de la clien\u021bi la cloud. <\/p>\n<p>\u00centrebarea este din nou - c\u00e2t de eficient va fi acest abordare? Pentru a r\u0103spunde, folosim din nou sistemul nostru de probe. Prin urmare, configur\u0103m un experiment recent, unde una dintre \u021binte urmeaz\u0103 direc\u021bia de la DNS steering, iar cealalt\u0103 - merge direct \u00een cloud (produc\u021bia curent\u0103).<\/p>\n<p><img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/ceb2ded9367ebd0aa0ede46191a89a88.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00cen final, compar\u0103m rezultatele \u0219i ob\u021binem o estimare a eficien\u021bei:<\/p>\n<p><img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/ca0db88461d5f2cb0f3f7c07eae14f10.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA\u0219adar, am \u00eenv\u0103\u021bat c\u00e2teva lucruri importante:<\/p>\n<ol>\n<li>Am evaluat performan\u021ba a\u0219teptat\u0103 a cererilor de la clien\u021bi c\u0103tre cloud folosind DNS steering.<\/li>\n<li>Am ob\u021binut date de la clien\u021bi reali, de pe toate tipurile de dispozitive.<\/li>\n<li>Am demonstrat eficien\u021ba ideii propuse.<\/li>\n<li>Nu am riscat - nu am schimbat configura\u021biile de produc\u021bie pentru clien\u021bi.<\/li>\n<li>Nu am stricat nimic.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Acum, despre o provocare - lans\u0103m \u00een produc\u021bie.<\/h2>\n<p>\nCel mai simplu este acum \u00een trecut - avem un prototip func\u021bional. Acum, partea complicat\u0103 este s\u0103 implement\u0103m solu\u021bia pentru tot traficul Netflix, s\u0103 o desf\u0103\u0219ur\u0103m pe 150 de milioane de utilizatori, mii de dispozitive, sute de microservicii \u0219i un produs \u0219i infrastructur\u0103 \u00een continu\u0103 schimbare. Serverele Netflix primesc milioane de cereri pe secund\u0103 \u0219i este u\u0219or s\u0103 strici serviciul printr-o ac\u021biune neaten\u021biei. \u00cen acela\u0219i timp, dorim s\u0103 direc\u021bion\u0103m traficul dinamic prin mii de servere CDN \u00een internet, unde ceva se schimb\u0103 \u0219i se stric\u0103 constant, \u0219i \u00een cel mai nefericit moment. <\/p>\n<p>\u0218i, cu toate acestea, echipa noastr\u0103 const\u0103 din 3 ingineri responsabili pentru dezvoltarea, desf\u0103\u0219urarea \u0219i suportul complet al sistemului.<\/p>\n<p>Prin urmare, vom vorbi despre un somn calm \u0219i s\u0103n\u0103tos.<\/p>\n<p>Cum s\u0103 continu\u0103m dezvoltarea, f\u0103r\u0103 a ne pierde tot timpul \u00een suport? La baza abord\u0103rii noastre stau 3 principii:<\/p>\n<ol>\n<li>Reducem poten\u021bialul de amploare al defectelor (blast radius). <\/li>\n<li>Ne preg\u0103tim pentru surprize - ne a\u0219tept\u0103m ca ceva s\u0103 se strice, \u00een ciuda test\u0103rii \u0219i experien\u021bei personale.<\/li>\n<li>Degradare gradual\u0103 (graceful degradation) - dac\u0103 ceva nu func\u021bioneaz\u0103 corect, ar trebui s\u0103 fie reparat automat, chiar dac\u0103 nu \u00een cel mai eficient mod.<\/li>\n<\/ol>\n<p>\nS-a dovedit c\u0103 \u00een cazul nostru, cu o abordare de acest tip, putem g\u0103si o solu\u021bie simpl\u0103 \u0219i eficient\u0103, care s\u0103 simplifice semnificativ suportul sistemului. Am realizat c\u0103 putem ad\u0103uga o mic\u0103 bucat\u0103 de cod \u00een client \u0219i s\u0103 monitoriz\u0103m erorile cererilor de re\u021bea cauzate de problemele de conectivitate. \u00cen cazul erorilor de re\u021bea, facem fallback direct \u00een cloud. Aceast\u0103 solu\u021bie nu necesit\u0103 eforturi considerabile din partea echipelor clientului, dar reduce semnificativ riscul de defecte nea\u0219teptate \u0219i surprize pentru noi.<\/p>\n<p>Desigur, \u00een ciuda fallback-ului, respect\u0103m totu\u0219i o disciplin\u0103 strict\u0103 pe parcursul dezvolt\u0103rii:<\/p>\n<ol>\n<li>Test pe probe.<\/li>\n<li>Testare A\/B sau Canaries.<\/li>\n<li>Publicare treptat\u0103 (progressive rollout).<\/li>\n<\/ol>\n<p>\n\u00cen ceea ce prive\u0219te probele, abordarea a fost descris\u0103 - modific\u0103rile sunt testate mai \u00eent\u00e2i cu ajutorul unei re\u021bete configurate.<\/p>\n<p>Pentru testarea canary, trebuie s\u0103 ob\u021binem perechi comparabile de servere pe care s\u0103 compar\u0103m cum func\u021bioneaz\u0103 sistemul \u00eenainte \u0219i dup\u0103 modific\u0103ri. Pentru aceasta, din numeroasele noastre site-uri CDN, facem o selec\u021bie de perechi de servere care primesc trafic comparabil:<\/p>\n<p><img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/eef504f5c81aa985b78339fd5f913d14.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nApoi, vom implementa versiunile cu modific\u0103rile pe serverele Canary. Pentru a evalua rezultatele, rul\u0103m un sistem care compar\u0103 aproximativ 100-150 de metrici cu un e\u0219antion de servere Control:<\/p>\n<p><img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/898edb0a5bd493d6ef228cd116c1a939.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDac\u0103 testarea Canary a fost reu\u0219it\u0103, lans\u0103m treptat, \u00een valuri. Pe fiecare site, nu actualiz\u0103m serverele simultan \u2014 pierderea unui \u00eentreg site \u00een cazul unor probleme are un impact mai semnificativ asupra serviciului pentru utilizatori dec\u00e2t pierderea unui num\u0103r similar de servere, dar \u00een locuri diferite.<\/p>\n<p>\u00cen general, eficien\u021ba \u0219i securitatea unei astfel de abord\u0103ri depind de cantitatea \u0219i calitatea metricilor colectate. Pentru sistemul nostru de accelerare a cererilor, colect\u0103m metrici din toate componentele posibile: <\/p>\n<ul>\n<li>de la clien\u021bi \u2014 num\u0103rul de sesiuni \u0219i cereri, ratele de fallback; <\/li>\n<li>proxy \u2014 statistici privind num\u0103rul \u0219i timpul cererilor;<\/li>\n<li>DNS \u2014 num\u0103rul \u0219i rezultatele cererilor;<\/li>\n<li>cloud edge \u2014 num\u0103rul \u0219i timpul de procesare a cererilor \u00een cloud.<\/li>\n<\/ul>\n<p>\nToate acestea sunt colectate \u00eentr-un pipeline unic, iar, \u00een func\u021bie de nevoi, decidem ce metrici s\u0103 trimitem pentru analiza \u00een timp real \u0219i ce metrici \u2014 \u00een Elasticsearch sau Big Data pentru diagnoz\u0103 mai detaliat\u0103.<\/p>\n<h2>Monitoriz\u0103m<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/ff8b00b1239a20f85e96ce23c2d7c2d0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00cen cazul nostru, facem modific\u0103ri pe calea critic\u0103 a cererilor \u00eentre client \u0219i server. Totu\u0219i, num\u0103rul diferitelor componente de pe client, server \u0219i pe drumul prin internet este enorm. Modific\u0103rile pe client \u0219i server se petrec constant \u2014 \u00een timpul activit\u0103\u021bii zecilor de echipe \u0219i al schimb\u0103rilor naturale din ecosistem. Suntem \u00een mijloc \u2014 la diagnosticarea problemelor, exist\u0103 o \u0219ans\u0103 mare s\u0103 fim implica\u021bi \u00een acest proces. De aceea, trebuie s\u0103 \u00een\u021belegem clar cum s\u0103 definim, colect\u0103m \u0219i analiz\u0103m metricile pentru o localizare rapid\u0103 a problemelor. <\/p>\n<p>Ideal \u2014 acces complet la toate tipurile de metrici \u0219i filtre \u00een timp real. Dar sunt foarte multe metrici, a\u0219a c\u0103 se pune problema costului. \u00cen cazul nostru, separ\u0103m metricile \u0219i instrumentele de dezvoltare astfel:<\/p>\n<p><img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/0b4a15776f3b44331652adc14ea87390.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPentru descoperirea \u0219i trierea problemelor, folosim un sistem propriu de timp real cu cod surs\u0103 deschis <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Netflix\/atlas\">Atlas<\/a><\/noindex> \u0219i <noindex><a rel=\"nofollow\" href=\"https:\/\/netflixtechblog.com\/lumen-custom-self-service-dashboarding-for-netflix-8c56b541548c\">Lumen<\/a><\/noindex> \u2014 pentru vizualizare. Acesta p\u0103streaz\u0103 metricile agregate \u00een memorie, este de \u00eencredere \u0219i se integreaz\u0103 cu sistemul de alertare. Pentru localizare \u0219i diagnoz\u0103, avem acces la jurnalele din Elasticsearch \u0219i Kibana. Pentru analiza statistic\u0103 \u0219i modelare \u2014 folosim big data \u0219i vizualizarea \u00een Tableau.<\/p>\n<p>Se pare c\u0103 este foarte complicat s\u0103 lucr\u0103m cu aceast\u0103 abordare. Totu\u0219i, prin organizarea ierarhic\u0103 a metricilor \u0219i instrumentelor, putem analiza rapid problema, defini tipul s\u0103u \u0219i apoi - ne putem aprofunda \u00een metricile detaliate. De obicei, ne ia \u00eentre 1 \u0219i 2 minute pentru a identifica sursa defec\u021biunii. Dup\u0103 aceea, colabor\u0103m cu echipa specific\u0103 pentru diagnosticare - de la zeci de minute p\u00e2n\u0103 la c\u00e2teva ore.<\/p>\n<p>Chiar dac\u0103 diagnosticul este realizat rapid, nu ne dorim s\u0103 se \u00eent\u00e2mple frecvent. \u00cen mod ideal, vom primi alerte critice doar atunci c\u00e2nd exist\u0103 un impact semnificativ asupra serviciului. Pentru sistemul nostru de accelerare a cererilor, avem doar 2 alerte care vor notifica:<\/p>\n<ul>\n<li>procentul Client Fallback - evaluarea comportamentului clien\u021bilor;<\/li>\n<li>procentul erorilor Probe - date despre stabilitatea componentelor de re\u021bea.<\/li>\n<\/ul>\n<p>\nAceste alerte critice monitorizeaz\u0103 dac\u0103 sistemul func\u021bioneaz\u0103 pentru majoritatea utilizatorilor. Ne uit\u0103m la c\u00e2\u021bi clien\u021bi au utilizat fallback-ul, dac\u0103 nu au reu\u0219it s\u0103 ob\u021bin\u0103 accelerarea cererilor. \u00cen medie, avem mai pu\u021bin de 1 alert\u0103 critic\u0103 pe s\u0103pt\u0103m\u00e2n\u0103, de\u0219i \u00een sistem se \u00eent\u00e2mpl\u0103 o cantitate gigantic\u0103 de modific\u0103ri. De ce ne ajunge acest lucru?<\/p>\n<ol>\n<li>Exist\u0103 fallback pentru clien\u021bi \u00een cazul \u00een care proxy-ul nostru nu func\u021bioneaz\u0103.<\/li>\n<li>Exist\u0103 un sistem de steering automat care reac\u021bioneaz\u0103 la probleme.<\/li>\n<\/ol>\n<p>\nDespre ultimul \u00een detaliu. Sistemul nostru de probe \u0219i sistemul de determinare automat\u0103 a celui mai optim drum pentru cererile de la client c\u0103tre cloud ne permit s\u0103 facem fa\u021b\u0103 automat unor probleme. <\/p>\n<p>S\u0103 revenim la configura\u021bia noastr\u0103 de probe \u0219i cele 3 categorii de drumuri. \u00cen afar\u0103 de timpul de \u00eenc\u0103rcare, putem analiza \u0219i faptul de livrare. Dac\u0103 nu am reu\u0219it s\u0103 \u00eenc\u0103rc\u0103m datele, prin observarea rezultatelor pe diferite drumuri putem determina unde \u0219i ce s-a defectat \u0219i dac\u0103 putem face automat o corectare modific\u00e2nd drumul cererii.<\/p>\n<p>Exemple:<\/p>\n<p><img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/7d935da82aaca53af87f05fbdf215c4c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/f74ef9d3de953099921a68fbc65cb187.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/3c77cbd47813d3320efbf339a0690c53.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAcest proces poate fi automatizat. \u00cel putem include \u00een sistemul de steering. \u0218i s\u0103 o \u00eenv\u0103\u021b\u0103m s\u0103 reac\u021bioneze la probleme de performan\u021b\u0103 \u0219i fiabilitate. Dac\u0103 ceva \u00eencepe s\u0103 se defecteze - s\u0103 reac\u021bioneze, dac\u0103 exist\u0103 o op\u021biune mai bun\u0103. \u00cen acela\u0219i timp, reac\u021bia instantanee nu este critic\u0103, datorit\u0103 fallback-ului pentru clien\u021bi.<\/p>\n<p>Astfel, principiile de suport ale sistemului pot fi formulate astfel:<\/p>\n<ul>\n<li>reducem amploarea defec\u021biunilor;<\/li>\n<li>colect\u0103m metrici;<\/li>\n<li>remediem automat defec\u021biunile, dac\u0103 putem;<\/li>\n<li>dac\u0103 nu putem - notific\u0103m;<\/li>\n<li>Lucr\u0103m la dashboards \u0219i un triage toolset pentru reac\u021bii rapide.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Lec\u021biile \u00eenv\u0103\u021bate<\/h2>\n<p>\nCrearea prototipului nu necesit\u0103 mult timp. \u00cen cazul nostru, acesta a fost gata \u00een doar 4 luni. Cu el, am ob\u021binut noi metrici, iar dup\u0103 10 luni de la \u00eenceputul dezvolt\u0103rii, am avut primul trafic \u00een production. Apoi a \u00eenceput munca grea \u0219i foarte complicat\u0103: s\u0103 producem \u0219i s\u0103 extindem treptat sistemul, s\u0103 migram traficul principal \u0219i s\u0103 \u00eenv\u0103\u021b\u0103m din gre\u0219eli. Acest proces eficient nu va fi liniar \u2014 \u00een ciuda tuturor eforturilor, nu se poate prezice totul. Este mult mai eficient s\u0103 iter\u0103m rapid \u0219i s\u0103 reac\u021bion\u0103m la noi date. <\/p>\n<p><img decoding=\"async\" alt=\"Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi\" src=\"\/wp-content\/uploads\/2020\/06\/c9c182a1a4fa048b1f1b2a82a4db65e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPe baza experien\u021bei noastre, putem recomanda urm\u0103toarele:<\/p>\n<ol>\n<li>Nu v\u0103 baza\u021bi pe intui\u021bie.\n<p>Intui\u021bia noastr\u0103 ne-a \u00een\u0219elat constant, \u00een ciuda experien\u021bei vaste a membrilor echipei. De exemplu, am prezis gre\u0219it accelerarea a\u0219teptat\u0103 de la utilizarea CDN proxy-urilor sau comportamentul TCP Anycast.<\/li>\n<li>Ob\u021bine\u021bi date din production.\n<p>Este important s\u0103 ob\u021bine\u021bi c\u00e2t mai repede acces la m\u0103car o cantitate mic\u0103 de date din production. Este aproape imposibil s\u0103 ob\u021bine\u021bi num\u0103rul unic de cazuri, configura\u021bii sau set\u0103ri \u00een condi\u021bii de laborator. Accesul rapid la rezultate va permite cunoa\u0219terea mai rapid\u0103 a problemelor poten\u021biale \u0219i integrarea acestora \u00een arhitectura sistemului.<\/li>\n<li>Nu urma\u021bi sfaturile \u0219i rezultatele altora \u2014 aduna\u021bi-v\u0103 propriile date.\n<p>Urma\u021bi principiile de colectare \u0219i analiz\u0103 a datelor, dar nu accepta\u021bi orbe\u0219te rezultatele \u0219i afirma\u021biile altora. Numai voi pute\u021bi \u0219ti exact ce func\u021bioneaz\u0103 pentru utilizatorii vo\u0219tri. Sistemele \u0219i clien\u021bii vo\u0219tri pot diferi semnificativ de alte companii. Din fericire, instrumentele de analiz\u0103 sunt acum disponibile \u0219i u\u0219or de utilizat. Rezultatele ob\u021binute pot s\u0103 nu coincid\u0103 cu ceea ce afirm\u0103 Netflix, Facebook, Akamai \u0219i alte companii. \u00cen cazul nostru, performan\u021ba TLS, HTTP2 sau statisticile legate de cererile DNS difer\u0103 de rezultatele Facebook, Uber, Akamai \u2014 pentru c\u0103 avem dispozitive, clien\u021bi \u0219i fluxuri de date diferite.<\/li>\n<li>Nu urm\u0103ri\u021bi tendin\u021bele la mod\u0103 f\u0103r\u0103 necesitate \u0219i evaluarea eficien\u021bei.\n<p>\u00cencepe\u021bi cu ceva simplu. Este mai bine s\u0103 realiza\u021bi un sistem de lucru simplu \u00eentr-un timp scurt, dec\u00e2t s\u0103 petrece\u021bi o perioad\u0103 \u00eendelungat\u0103 dezvolt\u00e2nd componente inutile. Aborda\u021bi problemele care sunt importante pe baza m\u0103sur\u0103torilor \u0219i rezultatelor voastre. <\/li>\n<li>Fii preg\u0103tit pentru noi aplica\u021bii.\n<p>La fel de greu cum este s\u0103 previi toate problemele, la fel de greu este s\u0103 anticipezi avantajele \u0219i aplica\u021biile. Ia exemplu de la startup-uri - capacitatea lor de a se adapta la cerin\u021bele clien\u021bilor. \u00cen cazul t\u0103u - po\u021bi descoperi noi probleme \u0219i solu\u021bii pentru acestea. \u00cen proiectul nostru, ne-am propus s\u0103 reducem laten\u021ba cererilor. Cu toate acestea, \u00een timpul analizei \u0219i discu\u021biilor, am realizat c\u0103 putem utiliza serverele proxy \u0219i pentru:<\/p>\n<ul>\n<li>echilibrarea traficului \u00eentre regiunile AWS \u0219i reducerea costurilor;<\/li>\n<li>modelarea stabilit\u0103\u021bii CDN;<\/li>\n<li>configurarea DNS;<\/li>\n<li>configurarea TLS\/TCP.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><\/p>\n<h2>Concluzie<\/h2>\n<p>\n\u00cen raport am descris cum Netflix abordeaz\u0103 problema acceler\u0103rii cererilor internet \u00eentre clien\u021bi \u0219i cloud. Cum colect\u0103m date prin intermediul sistemului de sondaje la clien\u021bi \u0219i folosim date istorice pentru a direc\u021biona cererile de produc\u021bie de la clien\u021bi prin cea mai rapid\u0103 rut\u0103 pe internet. Cum aplic\u0103m principiile func\u021bion\u0103rii protocoalelor de re\u021bea, infrastructura noastr\u0103 CDN, re\u021beaua backbone \u0219i serverele DNS pentru a atinge acest obiectiv.<\/p>\n<p>Cu toate acestea, solu\u021bia noastr\u0103 este doar un exemplu de cum am implementat un astfel de sistem la Netflix. Ce a func\u021bionat pentru noi. Partea practic\u0103 a raportului meu pentru voi - principiile de dezvoltare \u0219i suport pe care le urm\u0103m \u0219i care ne ajut\u0103 s\u0103 ob\u021binem rezultate bune.<\/p>\n<p>Solu\u021bia noastr\u0103 pentru problema voastr\u0103 s-ar putea s\u0103 nu fie potrivit\u0103. Totu\u0219i, teoria \u0219i principiile de dezvoltare r\u0103m\u00e2n, chiar dac\u0103 nu ave\u021bi o infrastructur\u0103 CDN proprie sau dac\u0103 aceasta difer\u0103 semnificativ de a noastr\u0103. <\/p>\n<p>De asemenea, r\u0103m\u00e2ne important\u0103 viteza cererilor pentru afaceri. Chiar \u0219i pentru un serviciu simplu trebuie s\u0103 face\u021bi o alegere: \u00eentre furnizorii \u201ecloud\u201d, loca\u021bia serverelor, CDN-uri \u0219i furnizorii DNS. Alegerile voastre vor influen\u021ba eficien\u021ba cererilor internet pentru clien\u021bii vo\u0219tri. Este important s\u0103 m\u0103sura\u021bi \u0219i s\u0103 \u00een\u021belege\u021bi aceast\u0103 influen\u021b\u0103.<\/p>\n<p>\u00cencepe\u021bi cu solu\u021bii simple, ave\u021bi grij\u0103 de modul \u00een care modifica\u021bi produsul. \u00cenv\u0103\u021ba\u021bi pe parcurs \u0219i \u00eembun\u0103t\u0103\u021bi\u021bi sistemul pe baza datelor de la clien\u021bii vo\u0219tri, infrastructura voastr\u0103 \u0219i afacerea voastr\u0103. G\u00e2ndi\u021bi-v\u0103 la posibilitatea unor defec\u021biuni neprev\u0103zute \u00een procesul de proiectare. \u0218i astfel ve\u021bi putea accelera procesul de dezvoltare, \u00eembun\u0103t\u0103\u021bi eficien\u021ba solu\u021biei, evita o suprasolicitare a suportului \u0219i dormi lini\u0219ti\u021bi.<\/p>\n<blockquote><p>Anul acesta <noindex><a rel=\"nofollow\" href=\"http:\/\/devoops-moscow.ru\/?utm_source=habr&amp;utm_medium=506106\">conferin\u021ba va avea loc \u00eentre 6 \u0219i 10 iulie<\/a><\/noindex> \u00een format online. Vei putea s\u0103 pui \u00eentreb\u0103ri unuia dintre p\u0103rin\u021bii DevOps, lui John Willis!<\/p><\/blockquote>\n<p>Sursa: <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.2.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\/ro\/blog\/administrirovanie\/uskoryaem-internet-zaprosy-i-spim-spokojno\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\udd47Acceler\u0103m cererile de internet \u0219i dormim lini\u0219ti\u021bi | ProHoster","description":"Netflix este liderul pie\u021bei de televiziune prin internet.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/uskoryaem-internet-zaprosy-i-spim-spokojno","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/84876","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=84876"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/84876\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/84877"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=84876"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=84876"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=84876"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}